// ********************************************************************************
// Common Math Routines
// David Ikeda - 2004

// ********************************************************************************
[VarDef, includeMath, 0]
[If, #includeMath = 0,

// ********************************************************************************
[RoutineDef, "RotateX",
	[VarDef, tY][VarSet, tY, ( (cos(#angle) * #y) - (sin(#angle) * #z) )]
	[VarDef, tZ][VarSet, tZ, ( (sin(#angle) * #y) + (cos(#angle) * #z) )]
	[VarSet, y, tY]
	[VarSet, z, tZ]
, x, y, z, angle]

// ********************************************************************************
[RoutineDef, "RotateY",
	[VarDef, tX][VarSet, tX, ( (sin(#angle) * #z) + (cos(#angle) * #x) )]
	[VarDef, tZ][VarSet, tZ, ( (cos(#angle) * #z) - (sin(#angle) * #x) )]
	[VarSet, x, tX]
	[VarSet, z, tZ]
, x, y, z, angle]

// ********************************************************************************
[RoutineDef, "RotateZ",
	[VarDef, tX][VarSet, tX, ( (cos(#angle) * #x) - (sin(#angle) * #y) )]
	[VarDef, tY][VarSet, tY, ( (sin(#angle) * #x) + (cos(#angle) * #y) )]
	[VarSet, x, tX]
	[VarSet, y, tY]
, x, y, z, angle]

// ********************************************************************************
[RoutineDef, "CopyPosition",
	[VarSet, dX, sX]
	[VarSet, dY, sY]
	[VarSet, dZ, sZ]
, sX, sY, sZ, dX, dY, dZ]

// ********************************************************************************
[RoutineDef, "GetXRotatedPosition", 
	[RoutineCall, "CopyPosition", #sX, #sY, #sZ, #dx, #dY, #dZ]
	[RoutineCall, "RotateX", #dx, #dY, #dZ, #angle]
, sX, sY, sZ, dX, dY, dZ, angle]

// ********************************************************************************
[RoutineDef, "GetYRotatedPosition", 
	[RoutineCall, "CopyPosition", #sX, #sY, #sZ, #dx, #dY, #dZ]
	[RoutineCall, "RotateY", #dx, #dY, #dZ, #angle]
, sX, sY, sZ, dX, dY, dZ, angle]

// ********************************************************************************
[RoutineDef, "GetZRotatedPosition", 
	[RoutineCall, "CopyPosition", #sX, #sY, #sZ, #dx, #dY, #dZ]
	[RoutineCall, "RotateZ", #dx, #dY, #dZ, #angle]
, sX, sY, sZ, dX, dY, dZ, angle]

// ********************************************************************************
][VarSet, includeMath, 1]
