/*************************/
/*** Math Table Header ***/
/*************************/

#ifndef __MATHTABLE_HEADER__
#define __MATHTABLE_HEADER__

#ifndef _GLOBAL_HEADER_
#include "system\global.h"
#endif


/*****************************************************************************/
extern VECTOR upVec;

extern const s16 ACosTable[4097];
extern const s16 SinTable[1024];
extern const s32 OneSinTable[1024];

/*****************************************************************************/
inline s32 macos(const s32 &a)
{
	return(ACosTable[a>>1]);
}

/*****************************************************************************/

inline s32 msin(const s32 &a)
{
	if (a>3071)
	{
		return(-SinTable[1023 - (a&1023)]);
	} else
	if (a>2047)
	{
		return(-SinTable[a&1023]);
	} else
	if (a>1023)
	{
		return(SinTable[1023 - (a&1023)]);
	} else
	{
		return(SinTable[a]);
	}
}

/*****************************************************************************/

inline s32 mcos(const s32 &a)
{
	if (a>3071)
	{
		return(SinTable[(a&1023)]);
	} else
	if (a>2047)
	{
		return(-SinTable[1023 - (a&1023)]);
	} else
	if (a>1023)
	{
		return(-SinTable[a&1023]);
	} else
	{
		return(SinTable[1023 - a]);
	}
}

/*****************************************************************************/

inline s32 monesin(const s32 &a)
{
	if (a>3071)
	{
		return(-OneSinTable[1024 - (a&1023)]);
	} else
	if (a>2047)
	{
		return(-OneSinTable[a&1023]);
	} else
	if (a>1023)
	{
		return(OneSinTable[1024 - (a&1023)]);
	} else
	{
		return(OneSinTable[a]);
	}
}

/*****************************************************************************/
/*
#define msin(x) rsin((x))
#define mcos(x) rcos((x))
#define monesin(x) (((s32)4096<<12)/rsin((x)))
*/
#endif