//=============================================================================
// Unreal Tournament SDK //
//-------------------------
// sdkCore //
//-----------
// Unreal Tournament SDK (c) 2007-2011 Stephan "Shadow" Nagel
// Under Artistic License 2.0
//
// UnSDKObj.h
//
// Header by: Shadow
//
// Description:
// UT SDK Basic Object Class Header Definitions
//=============================================================================

/*-----------------------------------------------------------------------------
	SDKObject Class
-----------------------------------------------------------------------------*/ 
class SDKCORE_API UsdkObject : public UObject
{
	//Declaration and Constructor
    	DECLARE_CLASS(UsdkObject,UObject,CLASS_Abstract|CLASS_Config,sdkCore)
    	NO_DEFAULT_CONSTRUCTOR(UsdkObject)

public:
	// sdkObject Variables
	FStringNoInit SDKVersion;
	
	// Internal
	BYTE xBlending;

	FString MusicDirectories[64];

	FString NextSong;
	BITFIELD bLoopNextSong:1;

	// sdkObject Natives

	// Bool
	//Build 100 ------------------
	DECLARE_FUNCTION(execRandBool);

	// Byte
	// Build 100 ------------------
 	DECLARE_FUNCTION(execFloatToByte);
	DECLARE_FUNCTION(execByteToFloat);

	// Integer
	// Build 100 ------------------
	DECLARE_FUNCTION(execRound);
	DECLARE_FUNCTION(execiSign);
	DECLARE_FUNCTION(execRand2);
	DECLARE_FUNCTION(execRangeInt);
   	DECLARE_FUNCTION(execRangeInt2);
   	DECLARE_FUNCTION(execSwapInt);
	DECLARE_FUNCTION(execnFac);
	DECLARE_FUNCTION(execnEven);
	DECLARE_FUNCTION(execNextPowerOfTwo);
	DECLARE_FUNCTION(execPrevPowerOfTwo);
	DECLARE_FUNCTION(execiBiChain);
	DECLARE_FUNCTION(execiOddChain);
	DECLARE_FUNCTION(execCeil);
	DECLARE_FUNCTION(execFloor);

	// Float
	// Build 100 ------------------
	DECLARE_FUNCTION(execSign);
	DECLARE_FUNCTION(execSwapFloat);
	DECLARE_FUNCTION(execFrac);
	DECLARE_FUNCTION(execBaseValue);
	DECLARE_FUNCTION(execPercentage);
	DECLARE_FUNCTION(execPercentValue);
	DECLARE_FUNCTION(execRangeFloat);
	DECLARE_FUNCTION(execRangeFloat2);
	DECLARE_FUNCTION(execFRand2);
	DECLARE_FUNCTION(execAdvRandRange);
	DECLARE_FUNCTION(execRandFClamp);
	DECLARE_FUNCTION(execLogB);
	DECLARE_FUNCTION(execLogD);
	DECLARE_FUNCTION(execLogAB);
	DECLARE_FUNCTION(execPow);
	DECLARE_FUNCTION(execnRoot);
	DECLARE_FUNCTION(execnRoot2);
	DECLARE_FUNCTION(execMetaRoot);
	DECLARE_FUNCTION(execfGeoChainExplicite);
	DECLARE_FUNCTION(execfArChainExplicite);
	DECLARE_FUNCTION(execfArChainExpInv);
	DECLARE_FUNCTION(execRadToDeg);
	DECLARE_FUNCTION(execDegToRad);
	DECLARE_FUNCTION(execdSin);
	DECLARE_FUNCTION(execdCos);
	DECLARE_FUNCTION(execCoTan);
	DECLARE_FUNCTION(execSec);
	DECLARE_FUNCTION(execCsc);
	DECLARE_FUNCTION(execSecH);
	DECLARE_FUNCTION(execASecH);
	DECLARE_FUNCTION(execASin);
	DECLARE_FUNCTION(execACos);
	DECLARE_FUNCTION(execATan2);
	DECLARE_FUNCTION(execSinH);
	DECLARE_FUNCTION(execCosH);
	DECLARE_FUNCTION(execTanH);
	DECLARE_FUNCTION(execASinH);
	DECLARE_FUNCTION(execACosH);
	DECLARE_FUNCTION(execATanH);
	DECLARE_FUNCTION(execSinc);
	DECLARE_FUNCTION(execTanc);
	DECLARE_FUNCTION(execSig);
	DECLARE_FUNCTION(execASig);
	DECLARE_FUNCTION(execFScaleDirect);
	DECLARE_FUNCTION(execFScale);
	DECLARE_FUNCTION(execFDistFunctionGen);
	DECLARE_FUNCTION(execFMathFunctionGen);
	DECLARE_FUNCTION(execFFunctionGen);
	DECLARE_FUNCTION(execFFunctionGenMeshAlpha);

	// Vector
	// Build 100 ------------------
	DECLARE_FUNCTION(execVZero);
	DECLARE_FUNCTION(execVApproxZero);
	DECLARE_FUNCTION(execVUniform);
	DECLARE_FUNCTION(execVApproxUniform);
	DECLARE_FUNCTION(execVect2);
	DECLARE_FUNCTION(execVect2D);
	DECLARE_FUNCTION(execVSizeSq);
	DECLARE_FUNCTION(execVSize2D);
	DECLARE_FUNCTION(execVSizeSq2D);
	DECLARE_FUNCTION(execVMin);
	DECLARE_FUNCTION(execVMax);
	DECLARE_FUNCTION(execVClamp);
	DECLARE_FUNCTION(execVClamp2);
	DECLARE_FUNCTION(execVRandRange);
	DECLARE_FUNCTION(execDotWOZ);
	DECLARE_FUNCTION(execVOrthogonal);
	DECLARE_FUNCTION(execVCollinear);
	DECLARE_FUNCTION(execVAngleCos);
	DECLARE_FUNCTION(execVAngle);
	DECLARE_FUNCTION(execVProjectOnTo);
	DECLARE_FUNCTION(execVSpat);
	DECLARE_FUNCTION(execVDoubleCross);
	DECLARE_FUNCTION(execVLerp);
	DECLARE_FUNCTION(execVSmerp);
	DECLARE_FUNCTION(execVInterpolate);
	DECLARE_FUNCTION(execGetDistance);
	DECLARE_FUNCTION(execGetVDistance);
	DECLARE_FUNCTION(execPointsAreNear);
	// Build 250-------------------
	DECLARE_FUNCTION(execPointIntersects);

	// Rotator
	// Build 100 ------------------
	DECLARE_FUNCTION(execRZero);
	DECLARE_FUNCTION(execRApproxZero);
	DECLARE_FUNCTION(execRot2);
	DECLARE_FUNCTION(execRSize);
	DECLARE_FUNCTION(execRSizeNRoll);
	DECLARE_FUNCTION(execRMin);
	DECLARE_FUNCTION(execRMax);
	DECLARE_FUNCTION(execRClamp);
	DECLARE_FUNCTION(execRRange);
	DECLARE_FUNCTION(execRLerp);
	DECLARE_FUNCTION(execRSmerp);
	DECLARE_FUNCTION(execRInterpolate);
	DECLARE_FUNCTION(execRFunctionGen);

	// String
	// Build 100 ------------------
	DECLARE_FUNCTION(execReplaceBoolValue);
	DECLARE_FUNCTION(execsDay);	
	// Build 161 ------------------
	DECLARE_FUNCTION(execRepl);	

	// Dynamic Array
	// Build 172 ------------------
	DECLARE_FUNCTION(execArrGetLength);
	DECLARE_FUNCTION(execArrClear);
	DECLARE_FUNCTION(execArrIdxValid);
	DECLARE_FUNCTION(execArrInsertIdx);
	DECLARE_FUNCTION(execArrRemoveIdx);

	// Class/Package
	// Build 120 ------------------
	DECLARE_FUNCTION(execGetClassName);
	DECLARE_FUNCTION(execGetPackageName);

	// Object
	// Build 148 ------------------
	DECLARE_FUNCTION(execGetIndexedObj);
	DECLARE_FUNCTION(execGetObjIndex);
	DECLARE_FUNCTION(execFindObject);

	// Operations Systems
	// Build 120 ------------------
	DECLARE_FUNCTION(execGetOS);
	DECLARE_FUNCTION(execWin32_64);

	// Render Info
	// Build 161 ------------------
	DECLARE_FUNCTION(execGetGraphicsCard);
	DECLARE_FUNCTION(execGetGFXCardConcern);
	DECLARE_FUNCTION(execGetRenderDriver);
	DECLARE_FUNCTION(execGetRender);
	DECLARE_FUNCTION(execIsDirectXRender);
	DECLARE_FUNCTION(execIsOpenGLRender);
	DECLARE_FUNCTION(execIsGlideRender);
	DECLARE_FUNCTION(execIsSoftwareRender);

	// Advanced Unreal Script Features
	// Build 120 ------------------
	DECLARE_FUNCTION(execGetFunctionName);
	DECLARE_FUNCTION(execIsCurrentFunction);
	// Build 148 ------------------
	DECLARE_FUNCTION(execHasFunction);
	DECLARE_FUNCTION(execGetFuncParmCount);
	DECLARE_FUNCTION(execGetFunctionType);
	DECLARE_FUNCTION(execHasState);
	DECLARE_FUNCTION(execGetStateType);
	DECLARE_FUNCTION(execGetEnumCount);

	// Time 
	// Build 100 ------------------
	DECLARE_FUNCTION(execjThal);
	DECLARE_FUNCTION(execjThal2);
	DECLARE_FUNCTION(execTimeSwap);
	DECLARE_FUNCTION(execTimeSwap2);

	// Color
	// Build 300 ------------------
	DECLARE_FUNCTION(execColorAdd);
	DECLARE_FUNCTION(execColorSub);
	DECLARE_FUNCTION(execColorMult);
	DECLARE_FUNCTION(execColorMultScalar);
	DECLARE_FUNCTION(execColorDiv);
	DECLARE_FUNCTION(execColorDivScalar);
	DECLARE_FUNCTION(execColorLerp);
	DECLARE_FUNCTION(execColorSmerp);

	// Quaternions
	DECLARE_FUNCTION(execQuatAdd);
	DECLARE_FUNCTION(execQuatSub);
	DECLARE_FUNCTION(execQuatInv);
	DECLARE_FUNCTION(execQuatMult);
	DECLARE_FUNCTION(execQuatMultScalar);
	DECLARE_FUNCTION(execQuatMultScalarInc);
	DECLARE_FUNCTION(execQuatSize);
	DECLARE_FUNCTION(execQuatSizeSq);
	DECLARE_FUNCTION(execQuatMakeFromAxis);
	DECLARE_FUNCTION(execQuatNormalize);
	DECLARE_FUNCTION(execQuatRotateVector);
	DECLARE_FUNCTION(execQuatDot);
	DECLARE_FUNCTION(execRotToQuat);
	DECLARE_FUNCTION(execQuatToRot);
	DECLARE_FUNCTION(execAlignQuatWith);
	DECLARE_FUNCTION(execQSlerp);
	DECLARE_FUNCTION(execQuatFindBetween);
};
