XIncludeFile "GlobalDefinitions.pb" ;************ ;- Vector 2 ;************ Structure Vector2 x.f y.f EndStructure Procedure setVector2(*vector.Vector2, x.f, y.f) *vector\x = x *vector\y = y EndProcedure Macro templateVector2(__FUNCNAME, __OPERATOR) Procedure __FUNCNAME(*vector.Vector2, *withVector.Vector2) *vector\x __OPERATOR *withVector\x *vector\y __OPERATOR *withVector\y EndProcedure EndMacro Macro templateVector2Scalar(__FUNCNAME, __OPERATOR) Procedure __FUNCNAME(*vector.Vector2, scalar.f) *vector\x __OPERATOR scalar.f *vector\y __OPERATOR scalar.f EndProcedure EndMacro templateVector2(addVector2, +) templateVector2(subVector2, -) templateVector2(mulVector2, *) templateVector2(copyVector2, =) templateVector2Scalar(addVector2Scalar, +) templateVector2Scalar(subVector2Scalar, -) templateVector2Scalar(mulVector2Scalar, *) templateVector2Scalar(divVector2Scalar, /) Procedure.f sumVector2(*vector.Vector2) ProcedureReturn *vector\x + *vector\y EndProcedure Procedure.f dotVector2(*vector1.Vector2, *vector2.Vector2) Define dummy.Vector2 : copyVector2(@dummy, *vector1) mulVector2(@dummy, *vector2) ProcedureReturn sumVector2(@dummy) EndProcedure Procedure.f lengthVector2(*vector.Vector2) ProcedureReturn Sqr(*vector\x * *vector\x + *vector\y * *vector\y) EndProcedure Procedure normVector2(*vector.Vector2) Define length.f = lengthVector2(*vector) divVector2Scalar(*vector, length) EndProcedure Procedure.s toStringVector2(*vector.Vector2, offset.i = 0) ProcedureReturn Space(offset) + "Vector2 (" + *vector + ")" + #NEWLINE$ + Space(offset + #DEBUGOFFSET) + " X = " + *vector\x + #NEWLINE$ + Space(offset + #DEBUGOFFSET) + " Y = " + *vector\y + #NEWLINE$ EndProcedure ;****************** ;- Vector3 module ;****************** Structure Vector3 x.f y.f z.f EndStructure Procedure setVector3(*vector.Vector3, x.f, y.f, z.f) *vector\x = x *vector\y = y *vector\z = z EndProcedure Macro templateVector3(__FUNCNAME, __OPERATOR) Procedure __FUNCNAME(*vector.Vector3, *withVector.Vector3) *vector\x __OPERATOR *withVector\x *vector\y __OPERATOR *withVector\y *vector\z __OPERATOR *withVector\z EndProcedure EndMacro Macro templateVector3Scalar(__FUNCNAME, __OPERATOR) Procedure __FUNCNAME(*vector.Vector3, scalar.f) *vector\x __OPERATOR scalar.f *vector\y __OPERATOR scalar.f *vector\z __OPERATOR scalar.f EndProcedure EndMacro templateVector3(addVector3, +) templateVector3(subVector3, -) templateVector3(mulVector3, *) templateVector3(copyVector3, =) templateVector3Scalar(addVector3Scalar, +) templateVector3Scalar(subVector3Scalar, -) templateVector3Scalar(mulVector3Scalar, *) templateVector3Scalar(divVector3Scalar, /) Procedure crossVector3(*result.Vector3, *vector.Vector3, *withVector.Vector3) *result\x = *vector\y * *withVector\z - *vector\z * *withVector\y *result\y = *vector\z * *withVector\x - *vector\x * *withVector\z *result\z = *vector\x * *withVector\y - *vector\y * *withVector\x EndProcedure Procedure.f sumVector3(*vector.Vector3) ProcedureReturn *vector\x + *vector\y + *vector\z EndProcedure Procedure.f dotVector3(*vector1.Vector3, *vector2.Vector3) Define dummy.Vector3 : copyVector3(@dummy, *vector1) mulVector3(@dummy, *vector2) ProcedureReturn sumVector3(@dummy) EndProcedure Procedure.f lengthVector3(*vector.Vector3) ProcedureReturn Sqr(*vector\x * *vector\x + *vector\y * *vector\y + *vector\z * *vector\z) EndProcedure Procedure normVector3(*vector.Vector3) Define length.f = lengthVector3(*vector) divVector3Scalar(*vector, length) EndProcedure Procedure.s toStringVector3(*vector.Vector3, offset.i = 0) ProcedureReturn Space(offset) + "Vector3 (" + *vector + ")" + #NEWLINE$ + Space(offset + #DEBUGOFFSET) + " X = " + *vector\x + #NEWLINE$ + Space(offset + #DEBUGOFFSET) + " Y = " + *vector\y + #NEWLINE$ + Space(offset + #DEBUGOFFSET) + " Z = " + *vector\z + #NEWLINE$ EndProcedure ; IDE Options = PureBasic 5.11 (Windows - x64) ; CursorPosition = 75 ; FirstLine = 48 ; Folding = --- ; EnableAsm ; EnableUnicode ; EnableThread ; EnableXP ; CPU = 1