Add rayman2 source files

This commit is contained in:
2024-09-18 02:33:44 +08:00
parent bcc093f8ed
commit fb036c54fd
14339 changed files with 2596224 additions and 0 deletions

View File

@@ -0,0 +1,668 @@
/*---------------------------------------------------------------------------*/
/* AITools.C : Some useful functions*/
/* author : Olivier Couvreur.*/
/* date : 05/05/1996*/
/*---------------------------------------------------------------------------*/
#include "AIUseCPA.h"
#include "specif/AIOption.h"
#include "AIMacros.h"
#include "AI_Erm.h"
#include "AI_Mmg.h"
#include "AI_Struc.h"
#include "WPWayPt.h"
#include "specif/AITools.h"
#include "StrIntel.h"
#include "safe.h"
/* in order to test NULL perso,waypoint,action,GMT, text, etc. */
#if defined(__DEBUG_AI__)
static unsigned char gs_ucDontCheckNULLFlag = 0;
void fn_vSetDontCheckNULLFlag(signed char _cValue)
{
gs_ucDontCheckNULLFlag += _cValue;
}
#endif /* __DEBUG_AI__*/
#ifdef ACTIVE_EDITOR
extern unsigned char g_ucIsEdInGhostMode;
void fn_vCheckModuleAccess(HIE_tdxHandleToSuperObject hPerso, ACP_tdxBool _bNextArgIsAChannel, void *_p_vChannelOrModuleHandle)
{
HIE_tdxHandleToSuperObject hModule;
unsigned char ucChannel;
if ( _bNextArgIsAChannel )
{
ucChannel = *(unsigned char *)_p_vChannelOrModuleHandle;
hModule = fn_hGetSuperObjectInChannel(fn_h3dDataGetChannelSOList(M_GetMSHandle(hPerso, 3dData)),(short) ucChannel);
}
else
{
ucChannel = C_ucUnknownChannel;
hModule = *(HIE_tdxHandleToSuperObject *)_p_vChannelOrModuleHandle;
}
/* if B mode, no check is done */
if (g_ucIsEdInGhostMode)
{
if (hModule)
hModule->llastComputeFrameForModule = HIE_gs_lCurrentFrame;
return;
}
/* if hModule is NULL, then there is an error : access to a valid channel number, but nothing in the channel !*/
if (hModule == NULL)
{
/* error !*/
char cText[512];
if (M_GetMSHandle(hPerso,Brain) && M_pstGetMindOfBrain(M_GetMSHandle(hPerso,Brain)))
{
sprintf(cText,"You try to access a module that does not exist at this moment !!!\n"
"this module belongs to : %s\nThe number of the channel you try to access is : %i\n",(M_pstGetMindOfBrain(M_GetMSHandle(hPerso,Brain)))->szPersoName,ucChannel);
}
else
{
sprintf(cText,"You try to access a module that does not exist at this moment !!!\n"
"this module belongs to <actor with no brain (current state is %s)>\nThe number of the channel you try to access is : %i\n",ucChannel, fn_p_szGetStateName(fn_h3dDataGetCurrentState(M_GetMSHandle(hPerso,3dData))));
}
SAF_M_AssertWithMsg(FALSE,cText);
}
else if (hModule->llastComputeFrameForModule < HIE_gs_lCurrentFrame-1)
{
/* error !*/
char cText[512];
if (M_GetMSHandle(hPerso,Brain) && M_pstGetMindOfBrain(M_GetMSHandle(hPerso,Brain)))
{
sprintf(cText,"You try to get a module position that is not up to date !!!\n"
"this module belongs to : %s\n",(M_pstGetMindOfBrain(M_GetMSHandle(hPerso,Brain)))->szPersoName);
}
else
{
sprintf(cText,"You try to get a module position that is not up to date !!!\n"
"this module belongs to <actor with no brain (current state is %s)>\n", fn_p_szGetStateName(fn_h3dDataGetCurrentState(M_GetMSHandle(hPerso,3dData))));
}
if (fn_ulStandardGameGetCustomBitsSO(hPerso) & GAM_C_CustBitNeedModuleMatrices)
{
strcat(cText,"This Perso already has the custombit 2 set, but it seems that the anim player has not\n"
"been played this time..., so check anim player related flags\n");
}
else
{
strcat(cText,"This perso does not have the custom bit 2 set, correct this and try again\n");
}
sprintf (cText + strlen(cText),"There is a difference of %i frames\n",HIE_gs_lCurrentFrame-hModule->llastComputeFrameForModule);
SAF_M_AssertWithMsg(FALSE,cText);
}
}
#endif
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
#if defined(__DEBUG_AI__)
unsigned char fn_ucGetDontCheckNULLFlag()
{
return gs_ucDontCheckNULLFlag;
}
#endif /* __DEBUG_AI__ */
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
/* CGHT*/
#if 0
/* MODIF YLG*/
ACP_tdxBool fn_bIsEndReached(MTH_tdxReal xStart,MTH_tdxReal xEnd,MTH_tdxReal xSpeed)
{
if(MTH_M_bGreaterZero(xSpeed))
{
return(MTH_M_bGreaterEqual(xStart,xEnd));
}
else if(MTH_M_bLessZero(xSpeed))
{
return(MTH_M_bLessEqual(xStart,xEnd));
}
return(TRUE);
}
#endif
char *fn_szGetStringFromTextOrStringParam(tdstGetSetParam *p_stValue)
{
char *pszString = NULL;
if ( M_GetSetParam_Type(p_stValue) == E_vt_String )
{
pszString = M_GetSetParam_szString(p_stValue);
}
else if ( M_GetSetParam_Type(p_stValue) == E_vt_Text )
{
pszString = FON_fn_szGetTextPointerForHandle(M_GetSetParam_hText(p_stValue));
}
return pszString;
}
void fn_vGetCenterOfBoundingVolume(HIE_tdxHandleToSuperObject hPerso,struct MTH3D_tdstVector_ *p_stVertex)
{
GEO_tdxHandleToBoundingSphere hBoundingSphere;
hBoundingSphere = (GEO_tdxHandleToBoundingSphere)HIE_fn_hGetSuperObjectBoundingVolume(hPerso);
/* si il y a un bounding volume*/
if (hBoundingSphere!=NULL)
{
/* on renvoie le centre de la sph<70>re*/
MTH3D_M_vMulMatrixVector(p_stVertex, &(hPerso->hGlobalMatrix->stRotationMatrix), &(hBoundingSphere->stCenterPoint));
MTH3D_M_vAddVector (p_stVertex,p_stVertex,&(hPerso->hGlobalMatrix->stTranslationVector));
}
else
{
/* on renvoie l'origine du rep<65>re*/
MTH3D_M_vCopyVector(p_stVertex, &(hPerso->hGlobalMatrix->stTranslationVector));
}
}
MTH_tdxReal fn_xDistanceBetweenPersoAndWP(HIE_tdxHandleToSuperObject p_SuperObjPerso, WP_tdhWayPoint hWP)
{
MTH3D_tdstVector stVertex1, stVertex2;
POS_fn_vGetTranslationVector(HIE_fn_hGetSuperObjectGlobalMatrix(p_SuperObjPerso), &stVertex1);
WP_fnv_WayPoint_ComputeLocation(hWP, &stVertex2);
MTH3D_M_vSubVector(&stVertex1, &stVertex1, &stVertex2);
return (MTH3D_M_xNormVector(&stVertex1));
}
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
MTH_tdxReal fn_xDistanceBetweenPerso(HIE_tdxHandleToSuperObject p_SuperObjPerso1, HIE_tdxHandleToSuperObject p_SuperObjPerso2)
{
MTH3D_tdstVector stVertex1, stVertex2;
POS_fn_vGetTranslationVector(HIE_fn_hGetSuperObjectGlobalMatrix(p_SuperObjPerso1), &stVertex1);
POS_fn_vGetTranslationVector(HIE_fn_hGetSuperObjectGlobalMatrix(p_SuperObjPerso2), &stVertex2);
MTH3D_M_vSubVector(&stVertex1, &stVertex1, &stVertex2);
return (MTH3D_M_xNormVector(&stVertex1));
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
MTH_tdxReal fn_xInternalDistance(MTH3D_tdstVector *p_stVector,unsigned char ucFlags)
{
MTH_tdxReal xX,xY,xZ;
xX=MTH3D_M_xGetXofVector(p_stVector);
xY=MTH3D_M_xGetYofVector(p_stVector);
xZ=MTH3D_M_xGetZofVector(p_stVector);
switch (ucFlags)
{
/* signed distance */
case C_DISTANCE_X:
return(xX);
case C_DISTANCE_Y:
return(xY);
case C_DISTANCE_Z:
return(xZ);
/* unsigned distance */
case C_DISTANCE_XY:
return(MTH_M_xSqrt(MTH_M_xAdd(MTH_M_xSqr(xX),MTH_M_xSqr(xY))));
case C_DISTANCE_XZ:
return(MTH_M_xSqrt(MTH_M_xAdd(MTH_M_xSqr(xX),MTH_M_xSqr(xZ))));
case C_DISTANCE_YZ:
return(MTH_M_xSqrt(MTH_M_xAdd(MTH_M_xSqr(xY),MTH_M_xSqr(xZ))));
default:
return 0;
break;
case C_DISTANCE_XYZ:
return(MTH3D_M_xNormVector(p_stVector));
}
}
/* distance expressed in local of perso2 */
MTH_tdxReal fn_xExtendedDistanceBetweenPerso(HIE_tdxHandleToSuperObject p_SuperObjPerso1, HIE_tdxHandleToSuperObject p_SuperObjPerso2, unsigned char ucFlags)
{
MTH3D_tdstVector stVertex1, stVertex2;
/*XB980430*/
/* MTH_tdxReal xNorm2=MTH_C_ZERO;*/
/*End XB*/
POS_tdstCompletePosition stMatrix;
/* bounding volume center or origin*/
if (ucFlags & DISTANCE_TO_CENTER_OF_BOUNDING_VOLUME)
{
fn_vGetCenterOfBoundingVolume(p_SuperObjPerso1,&stVertex1);
fn_vGetCenterOfBoundingVolume(p_SuperObjPerso2,&stVertex2);
}
else
{
POS_fn_vGetTranslationVector(HIE_fn_hGetSuperObjectGlobalMatrix(p_SuperObjPerso1), &stVertex1);
POS_fn_vGetTranslationVector(HIE_fn_hGetSuperObjectGlobalMatrix(p_SuperObjPerso2), &stVertex2);
}
MTH3D_M_vSubVector(&stVertex1, &stVertex1, &stVertex2);
ucFlags &= C_DISTANCE_MASK;
if (ucFlags!=C_DISTANCE_MASK)
{
/* return to local coordinates*/
POS_fn_vInvertIsoMatrix(&stMatrix,HIE_fn_hGetSuperObjectGlobalMatrix(p_SuperObjPerso2));
POS_fn_vMulMatrixVector(&stVertex1,&stMatrix,&stVertex1);
}
return(fn_xInternalDistance(&stVertex1,ucFlags));
}
/* local in perso2 */
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
MTH_tdxReal fn_xExtendedDistanceBetweenVertexAndPerso(MTH3D_tdstVector *p_stVertex1,HIE_tdxHandleToSuperObject p_SuperObjPerso2 , unsigned char ucFlags)
{
MTH3D_tdstVector stVertex2;
/*XB980430*/
/* MTH_tdxReal xNorm2=MTH_C_ZERO;*/
/*End XB*/
POS_tdstCompletePosition stMatrix;
/* bounding volume center or origin*/
if (ucFlags & DISTANCE_TO_CENTER_OF_BOUNDING_VOLUME)
{
fn_vGetCenterOfBoundingVolume(p_SuperObjPerso2,&stVertex2);
}
else
{
POS_fn_vGetTranslationVector(HIE_fn_hGetSuperObjectGlobalMatrix(p_SuperObjPerso2), &stVertex2);
}
MTH3D_M_vSubVector(p_stVertex1,p_stVertex1,&stVertex2);
ucFlags &= C_DISTANCE_MASK;
if (ucFlags!=C_DISTANCE_MASK)
{
/* return to local coordinates*/
POS_fn_vInvertIsoMatrix(&stMatrix,HIE_fn_hGetSuperObjectGlobalMatrix(p_SuperObjPerso2));
POS_fn_vMulMatrixVector(p_stVertex1,&stMatrix,p_stVertex1);
}
return(fn_xInternalDistance(p_stVertex1,ucFlags));
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
MTH_tdxReal fn_xComputeDirectionAngle(MTH3D_tdstVector *p_stVector)
{
MTH_tdxReal xRealX,xRealY,xAngle;
xRealX=MTH3D_M_xGetXofVector(p_stVector);
xRealY=MTH3D_M_xGetYofVector(p_stVector);
/* Arctan(y/x)*/
if (xRealX) xAngle=MTH_M_xATan(MTH_M_xDiv(xRealY , xRealX));
else if(MTH_M_bLess(xRealY ,MTH_C_ZERO)) xAngle=MTH_M_xNeg(MTH_C_PiBy2);
else xAngle=MTH_C_PiBy2;
/* correction !?!*/
if(MTH_M_bLess(xRealX ,MTH_C_ZERO)) xAngle=MTH_M_xAdd(xAngle,MTH_C_Pi);
if(MTH_M_bLess(xAngle,MTH_C_ZERO)) xAngle=MTH_M_xAdd(xAngle,MTH_C_2Pi);
/* correction if xAngle=0 (you go on the x axis), the angle of the perso is PI/2.*/
xAngle = MTH_M_xAdd(xAngle,MTH_C_PiBy2);
if(MTH_M_bGreater(xAngle,MTH_C_2Pi)) xAngle=MTH_M_xSub(xAngle,MTH_C_2Pi);
return(xAngle);
}
/* angle must be [in 0, 2pi[ : use xAngle=fn_xRealModuloAround(MTH_C_ZERO,MTH_C_2Pi,xAngle);*/
MTH_tdxReal fn_xComputeBestEcartDirectionAngle(MTH_tdxReal xAngleFollowed,MTH_tdxReal xAngleToFollow)
{
/* to be sure Abs(xDeltaAngle) is <=180 deg : so that it is the shortest angle */
MTH_tdxReal xDeltaAngle=MTH_M_xSub(xAngleToFollow,xAngleFollowed);
if (MTH_M_bGreater(xDeltaAngle,MTH_C_ZERO))
{
if (MTH_M_bGreater(xDeltaAngle,MTH_C_Pi))
{
xDeltaAngle=MTH_M_xSub(xDeltaAngle,MTH_C_2Pi);
}
}
else
{
if (MTH_M_bLess(xDeltaAngle,MTH_M_xNeg(MTH_C_Pi)))
{
xDeltaAngle=MTH_M_xAdd(xDeltaAngle,MTH_C_2Pi);
}
}
return(xDeltaAngle);
}
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
tdstMACDPID *fn_p_stGetMACDPIDPointer(HIE_tdxHandleToSuperObject p_SuperObjPerso)
{
tdstMACDPID *p_stMACDPID=NULL;
MS_tdxHandleToDynam h_Dynam;
DNM_tdstDynamics *p_stDynamics;
if((h_Dynam = M_GetMSHandle(p_SuperObjPerso,Dynam)) != NULL )
{
if((p_stDynamics = fn_p_stDynamGetDynamics(h_Dynam)) != NULL)
{
p_stMACDPID = DNM_M_p_stDynamicsGetExternalDatas(p_stDynamics);
}
}
if (p_stMACDPID==NULL)
{
M_AIFatalError(E_uwAIFatalNoDynamics);
}
return (p_stMACDPID);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
DNM_tdstReport *fn_pstGetDNMReport(HIE_tdxHandleToSuperObject p_SuperObjPerso)
{
MS_tdxHandleToDynam h_Dynam;
DNM_tdstDynamics *p_stDynamics;
if((h_Dynam = M_GetMSHandle(p_SuperObjPerso,Dynam)) == NULL )
return NULL;
if((p_stDynamics = fn_p_stDynamGetDynamics(h_Dynam)) == NULL)
return NULL;
return DNM_M_p_stDynamicsGetReport(p_stDynamics);
}
/* round xValue so that it belongs to [xFrom,xFrom+xModulus[*/
MTH_tdxReal fn_xRealModuloAround(MTH_tdxReal xFrom,MTH_tdxReal xModulus,MTH_tdxReal xValue)
{
/* xValue -= xFrom;*/
xValue=MTH_M_xSub(xValue,xFrom);
/* while (xValue<0) xValue += xModulus;*/
while (MTH_M_bLess(xValue,MTH_C_ZERO))
{
xValue=MTH_M_xAdd(xValue,xModulus);
}
/* while (xValue>=xModulus) xValue -= xModulus;*/
while (MTH_M_bGreaterEqual(xValue,xModulus))
{
xValue=MTH_M_xSub(xValue,xModulus);
}
/* xValue += xFrom;*/
xValue=MTH_M_xAdd(xValue,xFrom);
/* that's all folks*/
return(xValue);
};
/* same but but for a vector (X,Y,Z)*/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
void fn_vVectorModuloAround(MTH_tdxReal xFrom,MTH_tdxReal xModulus,struct MTH3D_tdstVector_ *p_stRotationVector)
{
MTH3D_M_vSetXofVector(p_stRotationVector,fn_xRealModuloAround(xFrom,xModulus,MTH3D_M_xGetXofVector(p_stRotationVector)));
MTH3D_M_vSetYofVector(p_stRotationVector,fn_xRealModuloAround(xFrom,xModulus,MTH3D_M_xGetYofVector(p_stRotationVector)));
MTH3D_M_vSetZofVector(p_stRotationVector,fn_xRealModuloAround(xFrom,xModulus,MTH3D_M_xGetZofVector(p_stRotationVector)));
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
;
/* make angular speed vector positive*/
/*
void fn_vMakeAngularSpeedVectorPositive(struct MTH3D_tdstVector_ *p_stRotationVector,struct MTH3D_tdstVector_ *p_stAngleVector,struct MTH3D_tdstVector_ *p_stAimAngleVector)
{
MTH_tdxReal xTemp;
// we must quarantee that RotationVector is >0, and that
// sgn(AimAngleVector-Anglevector)=sgn(RotationVector)
// if (RotationVector<0)
// {
// RotationVector=-RotationVector;
// if (Anglevector<AimAngleVector) AngleVector+=2Pi;
// }
// else
// {
// if (Anglevector>AimAngleVector) AngleVector-=2Pi;
// }
///
// X
if (MTH_M_bLess(xTemp=MTH3D_M_xGetXofVector(p_stRotationVector),MTH_C_ZERO))
{
MTH3D_M_vSetXofVector(p_stRotationVector,MTH_M_xNeg(xTemp));
xTemp=MTH3D_M_xGetXofVector(p_stAngleVector);
while (MTH_M_bLess(xTemp,MTH3D_M_xGetXofVector(p_stAimAngleVector)))
{
xTemp=MTH_M_xAdd(xTemp,MTH_C_2Pi);
}
MTH3D_M_vSetXofVector(p_stAngleVector,xTemp);
}
else
{
xTemp=MTH3D_M_xGetXofVector(p_stAngleVector);
while (MTH_M_bGreater(xTemp,MTH3D_M_xGetXofVector(p_stAimAngleVector)))
{
xTemp=MTH_M_xSub(xTemp,MTH_C_2Pi);
}
MTH3D_M_vSetXofVector(p_stAngleVector,xTemp);
}
// Y
if (MTH_M_bLess(xTemp=MTH3D_M_xGetYofVector(p_stRotationVector),MTH_C_ZERO))
{
MTH3D_M_vSetYofVector(p_stRotationVector,MTH_M_xNeg(xTemp));
xTemp=MTH3D_M_xGetYofVector(p_stAngleVector);
while (MTH_M_bLess(xTemp,MTH3D_M_xGetYofVector(p_stAimAngleVector)))
{
xTemp=MTH_M_xAdd(xTemp,MTH_C_2Pi);
}
MTH3D_M_vSetYofVector(p_stAngleVector,xTemp);
}
else
{
xTemp=MTH3D_M_xGetYofVector(p_stAngleVector);
while (MTH_M_bGreater(xTemp,MTH3D_M_xGetYofVector(p_stAimAngleVector)))
{
xTemp=MTH_M_xSub(xTemp,MTH_C_2Pi);
}
MTH3D_M_vSetYofVector(p_stAngleVector,xTemp);
}
// Z
if (MTH_M_bLess(xTemp=MTH3D_M_xGetZofVector(p_stRotationVector),MTH_C_ZERO))
{
MTH3D_M_vSetZofVector(p_stRotationVector,MTH_M_xNeg(xTemp));
xTemp=MTH3D_M_xGetZofVector(p_stAngleVector);
while (MTH_M_bLess(xTemp,MTH3D_M_xGetZofVector(p_stAimAngleVector)))
{
xTemp=MTH_M_xAdd(xTemp,MTH_C_2Pi);
}
MTH3D_M_vSetZofVector(p_stAngleVector,xTemp);
}
else
{
xTemp=MTH3D_M_xGetZofVector(p_stAngleVector);
if (MTH_M_bGreater(xTemp,MTH3D_M_xGetZofVector(p_stAimAngleVector)))
{
xTemp=MTH_M_xSub(xTemp,MTH_C_2Pi);
}
MTH3D_M_vSetZofVector(p_stAngleVector,xTemp);
}
}
*/
unsigned char fn_ucIsThereFloatIfYesConvertItToInteger(tdstGetSetParam *p_stParam)
{
unsigned char ucIsThereFloat=(unsigned char) M_IsFloatType(p_stParam);
if (ucIsThereFloat)
{
long lValue;
if((M_GetSetParam_xValue(p_stParam)<MTH_C_MAX_LONG)&&
(M_GetSetParam_xValue(p_stParam)>(-MTH_C_MAX_LONG)))/*AR980325 Antibug U64*/
lValue=MTH_M_xRealToLong(M_GetSetParam_xValue(p_stParam));
else if (M_GetSetParam_xValue(p_stParam)>0)
lValue=MTH_C_MAX_LONG;
else
lValue=-MTH_C_MAX_LONG;
M_Full_GetSetParam_Integer(p_stParam,lValue);
}
return(ucIsThereFloat);
}
unsigned char fn_ucAreThereFloatIfYesConvertThem(tdstGetSetParam *p_stParam1,tdstGetSetParam *p_stParam2)
{
unsigned char ucIsThereFloat=(unsigned char) M_IsFloatType(p_stParam1);
if (ucIsThereFloat)
{
if (!M_IsFloatType(p_stParam2))
{
M_GetSetParam_xValue(p_stParam2)=MTH_M_xLongToReal(M_GetSetParam_lValue(p_stParam2)) ;
}
}
else
{
ucIsThereFloat=(unsigned char) M_IsFloatType(p_stParam2);
if (ucIsThereFloat)
{
M_GetSetParam_xValue(p_stParam1)=MTH_M_xLongToReal(M_GetSetParam_lValue(p_stParam1));
}
}
return(ucIsThereFloat);
}
#if defined(__DEBUG_AI__)
char *fn_szGetPersoName(HIE_tdxHandleToSuperObject hPerso)
{
return AI_M_szGetPersoName(AI_M_stGetMindOfSuperObj(hPerso));
}
#endif
/*************************************************************************************
* Set the position of p_SuperObjPerso to p_stVertex. Make the mecanic collision test.
**************************************************************************************/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
ACP_tdxBool fn_bSetPositionWithCollideTest(HIE_tdxHandleToSuperObject p_SuperObjPerso, MTH3D_tdstVector *p_stVertex)
{
/* MS_tdxHandleToDynam h_Dynam;
DNM_tdstDynamics *p_stDynamics;
if((h_Dynam = M_GetMSHandle(p_SuperObjPerso,Dynam)) == NULL )
return FALSE;
if((p_stDynamics = fn_p_stDynamGetDynamics(h_Dynam)) == NULL)
return FALSE;*/
/* Break the son-father link.*/
fn_vReputCharacterSuperObjectAtTheWorld(p_SuperObjPerso);
/* Set the new position*/
POS_fn_vSetTranslationVector(HIE_fn_hGetSuperObjectGlobalMatrix(p_SuperObjPerso),p_stVertex);
POS_fn_vSetTranslationVector(HIE_fn_hGetSuperObjectMatrix(p_SuperObjPerso),p_stVertex);
/* DNM_fn_vDynamicsSetFromHiePositionByTakingIntoAccountTheObstaclesOfTheWayCoveredByTheObject(p_stDynamics, p_SuperObjPerso);*/
/* LRM_fn_xBoolInitListOfRequests(fn_pDynamGetListOfRequests(h_Dynam));*/
return TRUE;
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
/*ANNECY BBB { parti dans GAM\actions\Dynam.c*/
/********************************************************************************************
* Set the position of p_SuperObjPerso to p_stVertex. Do not make the mecanic collision test.
*********************************************************************************************/
/*ACP_tdxBool fn_bSetPositionWithoutCollideTest(HIE_tdxHandleToSuperObject p_SuperObjPerso, MTH3D_tdstVector *p_stVertex)*/
/*ANNECY BBB } parti dans GAM\actions\Dynam.c*/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
unsigned char fn_bGethDynamAndMACDPIDPointers(HIE_tdxHandleToSuperObject p_SuperObjPerso, MS_tdxHandleToDynam *p_h_Dynam, tdstMACDPID **p_p_stMACDPID)
{
DNM_tdstDynamics *p_stDynamics;
if((*p_h_Dynam = M_GetMSHandle(p_SuperObjPerso,Dynam)) != NULL )
{
if((p_stDynamics = fn_p_stDynamGetDynamics(*p_h_Dynam)) != NULL)
{
*p_p_stMACDPID = DNM_M_p_stDynamicsGetExternalDatas(p_stDynamics);
return(TRUE);
}
}
return(FALSE);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
unsigned char fn_ucInternalTurn(HIE_tdxHandleToSuperObject p_SuperObjPerso,MTH_tdxReal xAngle)
{
struct DNM_stDynamics* pstDynamic;
MS_tdxHandleToDynam h_Dynam;
/* Get Dynamics structure*/
h_Dynam = M_GetMSHandle(p_SuperObjPerso,Dynam);
if (h_Dynam)
{
pstDynamic = fn_p_stDynamGetDynamics(h_Dynam);
if (pstDynamic)
{
MEC_vTurnAroundZAxis ( pstDynamic, xAngle );
return TRUE;
}
}
return FALSE;
}
void fn_vConvertParamToColor(struct tdstGetSetParam_ *p_stParam,struct GEO_tdstColor_ *p_stColor)
{
/* don't use MTH because this is real float*/
float lValue;
float fValue=0.0f;
float fFactor=0.01f;
lValue=M_GetSetParam_RedValue(p_stParam);
if (lValue<0) fValue=0.0f; else if (lValue>100) fValue=1.0f; else fValue=lValue*fFactor;
p_stColor->xR=fValue;
lValue=M_GetSetParam_GreenValue(p_stParam);
if (lValue<0) fValue=0.0f; else if (lValue>100) fValue=1.0f; else fValue=lValue*fFactor;
p_stColor->xG=fValue;
lValue=M_GetSetParam_BlueValue(p_stParam);
if (lValue<0) fValue=0.0f; else if (lValue>100) fValue=1.0f; else fValue=lValue*fFactor;
p_stColor->xB=fValue;
lValue=M_GetSetParam_AlphaValue(p_stParam);
if (lValue<0) fValue=0.0f; else if (lValue>100) fValue=1.0f; else fValue=lValue*fFactor;
p_stColor->xA=fValue;
}
void fn_vConvertColorToParam(struct GEO_tdstColor_ *p_stColor,struct tdstGetSetParam_ *p_stParam)
{
M_GetSetParam_RedValue(p_stParam) =(unsigned char) (100*p_stColor->xR);
M_GetSetParam_GreenValue(p_stParam) =(unsigned char) (100*p_stColor->xG);
M_GetSetParam_BlueValue(p_stParam) =(unsigned char) (100*p_stColor->xB);
M_GetSetParam_AlphaValue(p_stParam) =(unsigned char) (100*p_stColor->xA);
M_GetSetParam_Type(p_stParam)=E_vt_Color;
}

View File

@@ -0,0 +1,188 @@
#include "AIUseCPA.h"
#include "specif/AIOption.h"
#include "AIMacros.h"
#include "AI_Erm.h"
#include "ActParam.h"
#include "Action.h"
#include "Intell.h"
#include "WPWayPt.h"
#include "specif/AITools.h"
#include "Procedur.h"
#include "EnumProc.h"
#include "safe.h"
/*
*=================================================================================================
*=================================================================================================
*/
tdstNodeInterpret *fn_p_stExecuteActionInit(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree)
{
tdxHandleToState h_WantedState;
p_stTree = fn_p_stDefaultActionInit(p_SuperObjPerso, p_stTree);
h_WantedState = fn_xGetActionParamStateValue(0, p_SuperObjPerso);
/* Force the state to be changed by setting it with a dummy value */
fn_v3dDataSetFirstStateOfAction(M_GetMSHandle(p_SuperObjPerso,3dData), NULL);
#if defined(__DEBUG_AI__)
if (!PLA_fn_bSetNewState(p_SuperObjPerso, h_WantedState, FALSE,FALSE))
{
fn_vSetActionParamlValue(0, p_SuperObjPerso, 0);
}
else
{
fn_vSetActionParamlValue(0, p_SuperObjPerso, 1);
}
#else
fn_vSetActionParamlValue(0, p_SuperObjPerso, (long) (PLA_fn_bSetNewState(p_SuperObjPerso, h_WantedState, FALSE,FALSE) ) );
#endif
/* Put the action in the stack parameters */
fn_vSetActionParamStateValue(1, p_SuperObjPerso, h_WantedState);
return(p_stTree);
}
/*===============================================================================================*/
tducActionReturn fn_ucExecuteAction(HIE_tdxHandleToSuperObject p_SuperObjPerso)
{
tdxHandleToState h_WantedState = fn_xGetActionParamStateValue(1, p_SuperObjPerso);
/* Test if SetNewState has work */
if (fn_lGetActionParamlValue(0, p_SuperObjPerso) == 0)
return C_DefaultMetaActionFinished;
/* Test if this the same action */
if (!PLA_fn_bTestCurrentAction(p_SuperObjPerso, h_WantedState))
{
#if defined(__DEBUG_AI__)
char MyMsg[100];
sprintf(MyMsg,"");
M_AIWarningErrorAndNeverStopForDebug(E_uwAIWarningExecuteActionInt, C_ucErmNoOpenInfoWindow,MyMsg);
#endif
return C_DefaultMetaActionFinished;
}
/* Test if animation is finished */
if (PLA_fn_bTestIfEndOfAction(p_SuperObjPerso))
return C_DefaultMetaActionFinished;
return C_DefaultMetaActionNotFinished;
}
/*
*=================================================================================================
*=================================================================================================
*/
#ifdef D_USE_LIPSYNC
tdstNodeInterpret *fn_p_stSpeakAndWaitEndInit(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree)
{
p_stTree = fn_p_stDefaultActionInit(p_SuperObjPerso,p_stTree);
if(fn_bIsDiscussionOver(p_SuperObjPerso))
{
fn_vStartLipsSynchro(p_SuperObjPerso,fn_p_stGetActionParamhLipsSynchro(0, p_SuperObjPerso));
}
return p_stTree;
}
#endif /* D_USE_LIPSYNC*/
/*===============================================================================================*/
#ifdef D_USE_LIPSYNC
tducActionReturn fn_ucSpeakAndWaitEnd(HIE_tdxHandleToSuperObject p_SuperObjPerso)
{
if(fn_bIsDiscussionOver(p_SuperObjPerso))
return C_DefaultMetaActionFinished;
return C_DefaultMetaActionNotFinished;
}
#endif /* D_USE_LIPSYNC*/
/*
*=================================================================================================
*=================================================================================================
*/
tducActionReturn fn_ucWaitEndOfAction(HIE_tdxHandleToSuperObject p_SuperObjPerso)
{
if (PLA_fn_bTestIfEndOfAction(p_SuperObjPerso))
return C_DefaultMetaActionFinished;
return C_DefaultMetaActionNotFinished;
}
/*
*=================================================================================================
*=================================================================================================
*/
tducActionReturn fn_ucWaitEndOfAnim(HIE_tdxHandleToSuperObject p_SuperObjPerso)
{
if (PLA_fn_bTestIfEndOfAnim(p_SuperObjPerso))
return C_DefaultMetaActionFinished;
return C_DefaultMetaActionNotFinished;
}
/*
*=================================================================================================
*=================================================================================================
*/
#define D_FrozenWaitWarn 0
#define D_FrozenWaitForce 0
tdstNodeInterpret *fn_p_stFrozenWaitInit(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree)
{
/* read the meta-action arguments */
p_stTree = fn_p_stDefaultActionInit(p_SuperObjPerso,p_stTree);
#if D_FrozenWaitWarn && defined(ACTIVE_EDITOR)
SAF_M_AssertWithMsg(
( fn_uc3dDataGetBrainComputationFrequency(M_GetMSHandle(p_SuperObjPerso,3dData)) == 1 )
|| M_IsTheEndOfTree(p_stTree)
||
(
( M_GetTypeInterpret(p_stTree) == E_ti_Procedure )
&&
(
( M_eProcedureIdInterpret(p_stTree) == eProc_ChangeMyComportAndMyReflex )
|| ( M_eProcedureIdInterpret(p_stTree) == ( AI_M_bGetDoingIntel(AI_M_stGetMindOfSuperObj(p_SuperObjPerso)) ? eProc_ChangeMyComport : eProc_ChangeMyComportReflex ) )
)
),
"il est fortement d<>conseill<6C> d'appeler cette m<>ta-action <20> l'int<6E>rieur d'un comportement\n"
"dans une IA qui n'est pas trait<69>e toutes les trames!"
);
#endif
#if D_FrozenWaitForce
/* remember the AI computation frequency */
fn_vSetActionParamlValue(
1,
p_SuperObjPerso,
fn_uc3dDataGetBrainComputationFrequency(M_GetMSHandle(p_SuperObjPerso,3dData))
);
/* and force it to 1, to make sure the meta action does not last longer than planned */
fn_v3dDataSetBrainComputationFrequency(M_GetMSHandle(p_SuperObjPerso,3dData), 1) ;
#endif
/*remember the time at which the metaaction is to end*/
fn_vSetActionParamlValue(
0,
p_SuperObjPerso,
g_stEngineStructure.stEngineTimer.ulCurrentTimerCount + fn_lGetActionParamlValue(0, p_SuperObjPerso)
);
return p_stTree;
}
/*===============================================================================================*/
tducActionReturn fn_ucFrozenWait(HIE_tdxHandleToSuperObject p_SuperObjPerso)
{
tducActionReturn ucReturn ;
/*the meta action ends when the time is later than the specified one*/
ucReturn = (g_stEngineStructure.stEngineTimer.ulCurrentTimerCount < (unsigned long) fn_lGetActionParamlValue(0, p_SuperObjPerso))
? C_DefaultMetaActionNotFinished
: C_DefaultMetaActionFinished ;
#if D_FrozenWaitForce
/* if it is over, restore the brain computation frequency */
if ( ucReturn == C_DefaultMetaActionFinished )
{
fn_v3dDataSetBrainComputationFrequency(M_GetMSHandle(p_SuperObjPerso,3dData), fn_lGetActionParamlValue(1, p_SuperObjPerso)) ;
}
#endif
return ucReturn ;
}

View File

@@ -0,0 +1,733 @@
/*
**************************************************************************************************
**************************************************************************************************
**************************************************************************************************
**************************************************************************************************
*/
extern
#ifdef _DEBUG
"C"
#endif
unsigned long fn_ulDetermineUsefulDT();
#define D_CineInfo_StructureDefine
#include "AIUseCPA.h"
#include "AIMacros.h"
#include "StrIntel.h"
#include "Intell.h"
#include "ActParam.h"
#include "Action.h"
#include "Convert.h"
#include "EnumAct.h"
#include "Gam.h"
#include "specif/AITools.h"
#include "CAM_Base.h"
#include "CAM_Tool.h"
/*
*=================================================================================================
*=================================================================================================
*/
void fnv_MoveAToB
(
HIE_tdxHandleToSuperObject p_SuperObjPerso,
MTH3D_tdstVector *_p_stSource,
MTH3D_tdstVector *_p_stDest,
MTH3D_tdstVector *_p_stCurrent,
int _iTime,
int _iAccel
)
{
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
MTH_tdxReal xDist, xActDist, xSpeed, xTemp;
long lTime;
MTH3D_tdstVector stTempVector;
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/* Total dist to move */
MTH3D_M_vSubVector(&stTempVector, _p_stDest, _p_stSource);
xDist = MTH3D_M_xNormVector(&stTempVector);
/* Dist already moved */
MTH3D_M_vSubVector(&stTempVector, _p_stCurrent, _p_stSource);
xActDist = MTH3D_M_xNormVector(&stTempVector);
/* Max speed depending on total time and distance */
xSpeed = MTH_M_xDiv(xDist, MTH_M_xLongToReal(_iTime));
/* Time elapsed since beginning */
lTime = g_stEngineStructure.stEngineTimer.ulCurrentTimerCount - fn_lGetActionParamlValue(5, p_SuperObjPerso);
/* Accel */
if(lTime < _iAccel)
{
xSpeed = MTH_M_xMul(MTH_M_xDiv(xSpeed, MTH_M_xLongToReal(_iAccel)), lTime);
}
/* Decel */
if(lTime > _iTime - _iAccel)
{
xTemp = MTH_M_xMul(MTH_M_xLongToReal(lTime), -MTH_M_xDiv(xSpeed, MTH_M_xLongToReal(_iAccel)));
xSpeed = MTH_M_xAdd(xTemp, MTH_M_xDiv(MTH_M_xMul(MTH_M_xLongToReal(_iTime), xSpeed), MTH_M_xFloatToReal(_iAccel)));
}
/* New pos */
MTH3D_M_vSubVector(&stTempVector, _p_stDest, _p_stSource);
MTH3D_M_vNormalizeVector(&stTempVector, &stTempVector);
xSpeed = MTH_M_xMul(xSpeed, fn_ulDetermineUsefulDT());
MTH3D_M_vMulScalarVector(&stTempVector, xSpeed, &stTempVector);
MTH3D_M_vAddVector(_p_stDest, &stTempVector, _p_stCurrent);
}
/*
*=================================================================================================
*=================================================================================================
*/
void fnv_TurnAWithB
(
HIE_tdxHandleToSuperObject p_SuperObjPerso,
MTH3D_tdstVector *_p_stSource,
MTH3D_tdstVector *_p_stPointAxis,
MTH3D_tdstVector *_p_stAxis,
MTH3D_tdstVector *_p_stCurrent,
MTH_tdxReal _xAngle,
int _iTime,
int _iAccel
)
{
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
MTH_tdxReal xActAngle, xSpeed, xTemp;
long lTime;
MTH3D_tdstVector stTempVector, stTempVector1;
MTH_tdstRotation stRotation;
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/* Angle already move */
MTH3D_M_vSubVector(&stTempVector, _p_stCurrent, _p_stPointAxis);
CAM_fn_vComputeProjection(&stTempVector, &stTempVector, _p_stAxis);
MTH3D_M_vSubVector(&stTempVector1, _p_stSource, _p_stPointAxis);
CAM_fn_vComputeProjection(&stTempVector1, &stTempVector1, _p_stAxis);
xActAngle = CAM_fn_xComputeRotation(&stTempVector1, &stTempVector, NULL);
/* Max speed depending on total time and distance */
xSpeed = MTH_M_xDiv(_xAngle, MTH_M_xLongToReal(_iTime));
/* Time elapsed since beginning */
lTime = g_stEngineStructure.stEngineTimer.ulCurrentTimerCount - fn_lGetActionParamlValue(5, p_SuperObjPerso);
/* Accel */
if(lTime < _iAccel)
{
xSpeed = MTH_M_xMul(MTH_M_xDiv(xSpeed, MTH_M_xLongToReal(_iAccel)), lTime);
}
/* Decel */
if(lTime > _iTime - _iAccel)
{
xTemp = MTH_M_xMul(MTH_M_xLongToReal(lTime), -MTH_M_xDiv(xSpeed, MTH_M_xLongToReal(_iAccel)));
xSpeed = MTH_M_xAdd(xTemp, MTH_M_xDiv(MTH_M_xMul(MTH_M_xLongToReal(_iTime), xSpeed), MTH_M_xFloatToReal(_iAccel)));
}
/* New pos */
MTH3D_M_vCopyVector(&stRotation.m_stAxis, _p_stAxis);
xSpeed = MTH_M_xMul(xSpeed, fn_ulDetermineUsefulDT());
stRotation.m_xAngle = xSpeed;
MTH3D_M_vSubVector(&stTempVector, _p_stCurrent, _p_stPointAxis);
MTH_p_stRotationMulVector(&stRotation, &stTempVector, _p_stSource);
MTH3D_M_vAddVector(_p_stSource, _p_stSource, _p_stPointAxis);
}
/*
**************************************************************************************************
**************************************************************************************************
**************************************************************************************************
**************************************************************************************************
*/
/*
*=================================================================================================
*=================================================================================================
*/
#if !defined(_AI_EXCLUDE_NEVER_USED_) /* MT {*/
tdstNodeInterpret *fn_p_stCamCineInit(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree)
{
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
MS_tdxHandleToCineinfo hCineinfo;
MTH3D_tdstVector stTempVector;
enum tdeMetaActionId_ eMetaActionId = M_eMetaActionIdInterpret(p_stTree-1);
tdstGetSetParam stParam;
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
hCineinfo = M_GetMSHandle(p_SuperObjPerso, Cineinfo);
#if defined(__DEBUG_AI__)
if (hCineinfo == NULL)
M_AIFatalError(E_uwAIFatalNotMSCamera);
#endif
/* No meca */
M_GetMSHandle(p_SuperObjPerso, StandardGame)->ulCustomBits |= 0x8000;
MTH3D_M_vSetVectorElements(&stTempVector, MTH_C_ZERO, MTH_C_ZERO, MTH_C_ONE);
switch(eMetaActionId)
{
case eMetaAction_CamCineMoveAToBTgtC:
case eMetaAction_CamCineMoveAToBTgtAC:
case eMetaAction_CamCinePosAMoveTgtBToC:
M_EvalNextParameter(&stParam);
fn_vSetActionParamp_stVertex(0, p_SuperObjPerso, &M_GetSetParam_stVertexValue(&stParam));
M_EvalNextParameter(&stParam);
fn_vSetActionParamp_stVertex(1, p_SuperObjPerso, &M_GetSetParam_stVertexValue(&stParam));
M_EvalNextParameter(&stParam);
fn_vSetActionParamp_stVertex(2, p_SuperObjPerso, &M_GetSetParam_stVertexValue(&stParam));
M_EvalNextParameter(&stParam);
fn_vSetActionParamlValue(3, p_SuperObjPerso, M_ReturnParam_lValue(&stParam));
M_EvalNextParameter(&stParam);
fn_vSetActionParamlValue(4, p_SuperObjPerso, M_ReturnParam_lValue(&stParam));
fn_vSetActionParamlValue(5, p_SuperObjPerso, g_stEngineStructure.stEngineTimer.ulCurrentTimerCount);
CAM_fn_vForceCameraPos(p_SuperObjPerso, fn_p_stGetActionParamp_stVertex(0,p_SuperObjPerso));
if(eMetaActionId == eMetaAction_CamCinePosAMoveTgtBToC)
{
CAM_fn_vForceCameraTgt(p_SuperObjPerso, fn_p_stGetActionParamp_stVertex(1,p_SuperObjPerso), &stTempVector);
/* To remember actual target */
fn_vSetActionParamp_stVertex(0, p_SuperObjPerso, fn_p_stGetActionParamp_stVertex(1,p_SuperObjPerso));
}
else
CAM_fn_vForceCameraTgt(p_SuperObjPerso, fn_p_stGetActionParamp_stVertex(2,p_SuperObjPerso), &stTempVector);
break;
case eMetaAction_CamCinePosATgtB:
M_EvalNextParameter(&stParam);
fn_vSetActionParamp_stVertex(0, p_SuperObjPerso, &M_GetSetParam_stVertexValue(&stParam));
M_EvalNextParameter(&stParam);
fn_vSetActionParamp_stVertex(1, p_SuperObjPerso, &M_GetSetParam_stVertexValue(&stParam));
M_EvalNextParameter(&stParam);
fn_vSetActionParamlValue(2, p_SuperObjPerso, M_ReturnParam_lValue(&stParam));
fn_vSetActionParamlValue(3, p_SuperObjPerso, g_stEngineStructure.stEngineTimer.ulCurrentTimerCount);
CAM_fn_vForceCameraPos(p_SuperObjPerso, fn_p_stGetActionParamp_stVertex(0,p_SuperObjPerso));
CAM_fn_vForceCameraTgt(p_SuperObjPerso, fn_p_stGetActionParamp_stVertex(1,p_SuperObjPerso), &stTempVector);
break;
case eMetaAction_CamCinePosATgtBTurnPosH:
case eMetaAction_CamCinePosATgtBTurnTgtH:
case eMetaAction_CamCinePosATgtBTurnPosV:
case eMetaAction_CamCinePosATgtBTurnTgtV:
M_EvalNextParameter(&stParam);
fn_vSetActionParamp_stVertex(0, p_SuperObjPerso, &M_GetSetParam_stVertexValue(&stParam));
M_EvalNextParameter(&stParam);
fn_vSetActionParamp_stVertex(1, p_SuperObjPerso, &M_GetSetParam_stVertexValue(&stParam));
M_EvalNextParameter(&stParam);
fn_vSetActionParamxValue(2, p_SuperObjPerso, M_GetSetParam_xValue(&stParam));
M_EvalNextParameter(&stParam);
fn_vSetActionParamlValue(3, p_SuperObjPerso, M_ReturnParam_lValue(&stParam));
M_EvalNextParameter(&stParam);
fn_vSetActionParamlValue(4, p_SuperObjPerso, M_ReturnParam_lValue(&stParam));
fn_vSetActionParamlValue(5, p_SuperObjPerso, g_stEngineStructure.stEngineTimer.ulCurrentTimerCount);
CAM_fn_vForceCameraPos(p_SuperObjPerso, fn_p_stGetActionParamp_stVertex(0,p_SuperObjPerso));
CAM_fn_vForceCameraTgt(p_SuperObjPerso, fn_p_stGetActionParamp_stVertex(1,p_SuperObjPerso), &stTempVector);
if((eMetaActionId == eMetaAction_CamCinePosATgtBTurnTgtH) || (eMetaActionId == eMetaAction_CamCinePosATgtBTurnTgtV))
{
/* To remember actual target */
fn_vSetActionParamp_stVertex(0, p_SuperObjPerso, fn_p_stGetActionParamp_stVertex(1,p_SuperObjPerso));
}
break;
default:
break;
}
return p_stTree;
}
#endif /* _AI_EXCLUDE_NEVER_USED_ }*/
/*
**************************************************************************************************
**************************************************************************************************
**************************************************************************************************
**************************************************************************************************
*/
/*
*=================================================================================================
*=================================================================================================
*/
#if !defined(_AI_EXCLUDE_NEVER_USED_) /* MT {*/
tducActionReturn fn_ucCamCineMoveAToBTgtC(HIE_tdxHandleToSuperObject p_SuperObjPerso)
{
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
MS_tdxHandleToCineinfo hCineinfo;
MTH3D_tdstVector stTempVector, stCurrentCameraPos;
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
hCineinfo = M_GetMSHandle(p_SuperObjPerso, Cineinfo);
#if defined(__DEBUG_AI__)
if (hCineinfo == NULL)
M_AIFatalError(E_uwAIFatalNotMSCamera);
#endif
/* Test end of meta action */
if
(
g_stEngineStructure.stEngineTimer.ulCurrentTimerCount >=
((unsigned long) fn_lGetActionParamlValue(5, p_SuperObjPerso)+(unsigned long) fn_lGetActionParamlValue(3, p_SuperObjPerso))
)
{
CAM_fn_vForceCameraPos(p_SuperObjPerso, fn_p_stGetActionParamp_stVertex(1,p_SuperObjPerso));
MTH3D_M_vSetVectorElements(&stTempVector, MTH_C_ZERO, MTH_C_ZERO, MTH_C_ONE);
CAM_fn_vForceCameraTgt(p_SuperObjPerso, fn_p_stGetActionParamp_stVertex(2,p_SuperObjPerso), &stTempVector);
/* Meca */
M_GetMSHandle(p_SuperObjPerso, StandardGame)->ulCustomBits &= ~0x8000;
return C_DefaultMetaActionFinished;
}
/* Actual camera pos */
POS_fn_vGetTranslationVector
(
HIE_fn_hGetSuperObjectGlobalMatrix(p_SuperObjPerso),
&stCurrentCameraPos
);
MTH3D_M_vCopyVector(&stTempVector, fn_p_stGetActionParamp_stVertex(1,p_SuperObjPerso));
fnv_MoveAToB
(
p_SuperObjPerso,
fn_p_stGetActionParamp_stVertex(0,p_SuperObjPerso),
&stTempVector,
&stCurrentCameraPos,
fn_lGetActionParamlValue(3, p_SuperObjPerso),
fn_lGetActionParamlValue(4, p_SuperObjPerso)
);
CAM_fn_vForceCameraPos(p_SuperObjPerso, &stTempVector);
MTH3D_M_vSetVectorElements(&stTempVector, MTH_C_ZERO, MTH_C_ZERO, MTH_C_ONE);
CAM_fn_vForceCameraTgt(p_SuperObjPerso, fn_p_stGetActionParamp_stVertex(2,p_SuperObjPerso), &stTempVector);
return C_DefaultMetaActionNotFinished;
}
#endif /* _AI_EXCLUDE_NEVER_USED_ }*/
/*
*=================================================================================================
*=================================================================================================
*/
#if !defined(_AI_EXCLUDE_NEVER_USED_) /* MT {*/
tducActionReturn fn_ucCamCineMoveAToBTgtAC(HIE_tdxHandleToSuperObject p_SuperObjPerso)
{
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
MS_tdxHandleToCineinfo hCineinfo;
MTH3D_tdstVector stTempVector, stTempVector1, stCurrentCameraPos;
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
hCineinfo = M_GetMSHandle(p_SuperObjPerso, Cineinfo);
#if defined(__DEBUG_AI__)
if (hCineinfo == NULL)
M_AIFatalError(E_uwAIFatalNotMSCamera);
#endif
/* Test end of meta action */
if
(
g_stEngineStructure.stEngineTimer.ulCurrentTimerCount >=
((unsigned long) fn_lGetActionParamlValue(5, p_SuperObjPerso)+(unsigned long) fn_lGetActionParamlValue(3, p_SuperObjPerso))
)
{
CAM_fn_vForceCameraPos(p_SuperObjPerso, fn_p_stGetActionParamp_stVertex(1,p_SuperObjPerso));
MTH3D_M_vSubVector(&stTempVector1, fn_p_stGetActionParamp_stVertex(2,p_SuperObjPerso), fn_p_stGetActionParamp_stVertex(0,p_SuperObjPerso));
MTH3D_M_vAddVector(&stTempVector1, &stTempVector1, fn_p_stGetActionParamp_stVertex(1,p_SuperObjPerso));
MTH3D_M_vSetVectorElements(&stTempVector, MTH_C_ZERO, MTH_C_ZERO, MTH_C_ONE);
CAM_fn_vForceCameraTgt(p_SuperObjPerso, &stTempVector1, &stTempVector);
/* Meca */
M_GetMSHandle(p_SuperObjPerso, StandardGame)->ulCustomBits &= ~0x8000;
return C_DefaultMetaActionFinished;
}
/* Actual camera pos */
POS_fn_vGetTranslationVector
(
HIE_fn_hGetSuperObjectGlobalMatrix(p_SuperObjPerso),
&stCurrentCameraPos
);
MTH3D_M_vCopyVector(&stTempVector, fn_p_stGetActionParamp_stVertex(1,p_SuperObjPerso));
fnv_MoveAToB
(
p_SuperObjPerso,
fn_p_stGetActionParamp_stVertex(0,p_SuperObjPerso),
&stTempVector,
&stCurrentCameraPos,
fn_lGetActionParamlValue(3, p_SuperObjPerso),
fn_lGetActionParamlValue(4, p_SuperObjPerso)
);
CAM_fn_vForceCameraPos(p_SuperObjPerso, &stTempVector);
MTH3D_M_vSubVector(&stTempVector1, fn_p_stGetActionParamp_stVertex(2,p_SuperObjPerso), fn_p_stGetActionParamp_stVertex(0,p_SuperObjPerso));
MTH3D_M_vAddVector(&stTempVector1, &stTempVector1, &stTempVector);
MTH3D_M_vSetVectorElements(&stTempVector, MTH_C_ZERO, MTH_C_ZERO, MTH_C_ONE);
CAM_fn_vForceCameraTgt(p_SuperObjPerso, &stTempVector1, &stTempVector);
return C_DefaultMetaActionNotFinished;
}
#endif /* _AI_EXCLUDE_NEVER_USED_ }*/
/*
*=================================================================================================
*=================================================================================================
*/
#if !defined(_AI_EXCLUDE_NEVER_USED_) /* MT {*/
tducActionReturn fn_ucCamCinePosATgtB(HIE_tdxHandleToSuperObject p_SuperObjPerso)
{
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
MS_tdxHandleToCineinfo hCineinfo;
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
hCineinfo = M_GetMSHandle(p_SuperObjPerso, Cineinfo);
#if defined(__DEBUG_AI__)
if (hCineinfo == NULL)
M_AIFatalError(E_uwAIFatalNotMSCamera);
#endif
/* Test end of meta action */
if
(
g_stEngineStructure.stEngineTimer.ulCurrentTimerCount >=
((unsigned long) fn_lGetActionParamlValue(3, p_SuperObjPerso)+(unsigned long) fn_lGetActionParamlValue(2, p_SuperObjPerso))
)
{
/* Meca */
M_GetMSHandle(p_SuperObjPerso, StandardGame)->ulCustomBits &= ~0x8000;
return C_DefaultMetaActionFinished;
}
return C_DefaultMetaActionNotFinished;
}
#endif /* _AI_EXCLUDE_NEVER_USED_ }*/
/*
*=================================================================================================
*=================================================================================================
*/
#if !defined(_AI_EXCLUDE_NEVER_USED_) /* MT {*/
tducActionReturn fn_ucCamCinePosAMoveTgtBToC(HIE_tdxHandleToSuperObject p_SuperObjPerso)
{
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
MS_tdxHandleToCineinfo hCineinfo;
MTH3D_tdstVector stTempVector, stTempVector1, stCurrentTarget;
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
hCineinfo = M_GetMSHandle(p_SuperObjPerso, Cineinfo);
#if defined(__DEBUG_AI__)
if (hCineinfo == NULL)
M_AIFatalError(E_uwAIFatalNotMSCamera);
#endif
/* Test end of meta action */
if
(
g_stEngineStructure.stEngineTimer.ulCurrentTimerCount >=
((unsigned long) fn_lGetActionParamlValue(5, p_SuperObjPerso)+(unsigned long) fn_lGetActionParamlValue(3, p_SuperObjPerso))
)
{
MTH3D_M_vSetVectorElements(&stTempVector1, MTH_C_ZERO, MTH_C_ZERO, MTH_C_ONE);
CAM_fn_vForceCameraTgt(p_SuperObjPerso, fn_p_stGetActionParamp_stVertex(2,p_SuperObjPerso), &stTempVector1);
/* Meca */
M_GetMSHandle(p_SuperObjPerso, StandardGame)->ulCustomBits &= ~0x8000;
return C_DefaultMetaActionFinished;
}
/* Current target */
MTH3D_M_vCopyVector(&stCurrentTarget, fn_p_stGetActionParamp_stVertex(0,p_SuperObjPerso));
MTH3D_M_vCopyVector(&stTempVector, fn_p_stGetActionParamp_stVertex(2,p_SuperObjPerso));
fnv_MoveAToB
(
p_SuperObjPerso,
fn_p_stGetActionParamp_stVertex(1,p_SuperObjPerso),
&stTempVector,
&stCurrentTarget,
fn_lGetActionParamlValue(3, p_SuperObjPerso),
fn_lGetActionParamlValue(4, p_SuperObjPerso)
);
MTH3D_M_vSetVectorElements(&stTempVector1, MTH_C_ZERO, MTH_C_ZERO, MTH_C_ONE);
CAM_fn_vForceCameraTgt(p_SuperObjPerso, &stTempVector, &stTempVector1);
/* Remember actual target */
fn_vSetActionParamp_stVertex(0, p_SuperObjPerso, &stTempVector);
return C_DefaultMetaActionNotFinished;
}
#endif /* _AI_EXCLUDE_NEVER_USED_ }*/
/*
*=================================================================================================
*=================================================================================================
*/
#if !defined(_AI_EXCLUDE_NEVER_USED_) /* MT {*/
tducActionReturn fn_ucCamCinePosATgtBTurnPosH(HIE_tdxHandleToSuperObject p_SuperObjPerso)
{
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
MS_tdxHandleToCineinfo hCineinfo;
MTH3D_tdstVector stTempVector, stCurrentCameraPos, stAxis;
POS_tdstCompletePosition *p_stPersoGlobalMatrix;
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
hCineinfo = M_GetMSHandle(p_SuperObjPerso, Cineinfo);
#if defined(__DEBUG_AI__)
if (hCineinfo == NULL)
M_AIFatalError(E_uwAIFatalNotMSCamera);
#endif
/* Test end of meta action */
if
(
g_stEngineStructure.stEngineTimer.ulCurrentTimerCount >=
((unsigned long) fn_lGetActionParamlValue(5, p_SuperObjPerso)+(unsigned long) fn_lGetActionParamlValue(3, p_SuperObjPerso))
)
{
/* Meca */
M_GetMSHandle(p_SuperObjPerso, StandardGame)->ulCustomBits &= ~0x8000;
return C_DefaultMetaActionFinished;
}
/* Actual camera pos */
POS_fn_vGetTranslationVector
(
HIE_fn_hGetSuperObjectGlobalMatrix(p_SuperObjPerso),
&stCurrentCameraPos
);
/* Rotation axis is camera Z */
p_stPersoGlobalMatrix = HIE_fn_hGetSuperObjectGlobalMatrix(p_SuperObjPerso);
POS_fn_vGetRotationMatrix(p_stPersoGlobalMatrix, &stTempVector, &stTempVector, &stAxis);
MTH3D_M_vCopyVector(&stTempVector, fn_p_stGetActionParamp_stVertex(0,p_SuperObjPerso));
fnv_TurnAWithB
(
p_SuperObjPerso,
&stTempVector,
fn_p_stGetActionParamp_stVertex(1,p_SuperObjPerso),
&stAxis,
&stCurrentCameraPos,
fn_xGetActionParamxValue(2, p_SuperObjPerso),
fn_lGetActionParamlValue(3, p_SuperObjPerso),
fn_lGetActionParamlValue(4, p_SuperObjPerso)
);
CAM_fn_vForceCameraPos(p_SuperObjPerso, &stTempVector);
MTH3D_M_vSetVectorElements(&stTempVector, MTH_C_ZERO, MTH_C_ZERO, MTH_C_ONE);
CAM_fn_vForceCameraTgt(p_SuperObjPerso, fn_p_stGetActionParamp_stVertex(1,p_SuperObjPerso), &stTempVector);
return C_DefaultMetaActionNotFinished;
}
#endif /* _AI_EXCLUDE_NEVER_USED_ }*/
/*
*=================================================================================================
*=================================================================================================
*/
#if !defined(_AI_EXCLUDE_NEVER_USED_) /* MT {*/
tducActionReturn fn_ucCamCinePosATgtBTurnPosV(HIE_tdxHandleToSuperObject p_SuperObjPerso)
{
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
MS_tdxHandleToCineinfo hCineinfo;
MTH3D_tdstVector stTempVector, stCurrentCameraPos, stAxis;
POS_tdstCompletePosition *p_stPersoGlobalMatrix;
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
hCineinfo = M_GetMSHandle(p_SuperObjPerso, Cineinfo);
#if defined(__DEBUG_AI__)
if (hCineinfo == NULL)
M_AIFatalError(E_uwAIFatalNotMSCamera);
#endif
/* Test end of meta action */
if
(
g_stEngineStructure.stEngineTimer.ulCurrentTimerCount >=
((unsigned long) fn_lGetActionParamlValue(5, p_SuperObjPerso)+(unsigned long) fn_lGetActionParamlValue(3, p_SuperObjPerso))
)
{
/* Meca */
M_GetMSHandle(p_SuperObjPerso, StandardGame)->ulCustomBits &= ~0x8000;
return C_DefaultMetaActionFinished;
}
/* Actual camera pos */
POS_fn_vGetTranslationVector
(
HIE_fn_hGetSuperObjectGlobalMatrix(p_SuperObjPerso),
&stCurrentCameraPos
);
/* Rotation axis is camera X */
p_stPersoGlobalMatrix = HIE_fn_hGetSuperObjectGlobalMatrix(p_SuperObjPerso);
POS_fn_vGetRotationMatrix(p_stPersoGlobalMatrix, &stAxis, &stTempVector, &stTempVector);
MTH3D_M_vCopyVector(&stTempVector, fn_p_stGetActionParamp_stVertex(0,p_SuperObjPerso));
fnv_TurnAWithB
(
p_SuperObjPerso,
&stTempVector,
fn_p_stGetActionParamp_stVertex(1,p_SuperObjPerso),
&stAxis,
&stCurrentCameraPos,
fn_xGetActionParamxValue(2, p_SuperObjPerso),
fn_lGetActionParamlValue(3, p_SuperObjPerso),
fn_lGetActionParamlValue(4, p_SuperObjPerso)
);
CAM_fn_vForceCameraPos(p_SuperObjPerso, &stTempVector);
MTH3D_M_vSetVectorElements(&stTempVector, MTH_C_ZERO, MTH_C_ZERO, MTH_C_ONE);
CAM_fn_vForceCameraTgt(p_SuperObjPerso, fn_p_stGetActionParamp_stVertex(1,p_SuperObjPerso), &stTempVector);
return C_DefaultMetaActionNotFinished;
}
#endif /* _AI_EXCLUDE_NEVER_USED_ }*/
/*
*=================================================================================================
*=================================================================================================
*/
#if !defined(_AI_EXCLUDE_NEVER_USED_) /* MT {*/
tducActionReturn fn_ucCamCinePosATgtBTurnTgtH(HIE_tdxHandleToSuperObject p_SuperObjPerso)
{
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
MS_tdxHandleToCineinfo hCineinfo;
MTH3D_tdstVector stCurrentCameraPos, stTempVector, stTempVector1, stAxis;
POS_tdstCompletePosition *p_stPersoGlobalMatrix;
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
hCineinfo = M_GetMSHandle(p_SuperObjPerso, Cineinfo);
#if defined(__DEBUG_AI__)
if (hCineinfo == NULL)
M_AIFatalError(E_uwAIFatalNotMSCamera);
#endif
/* Test end of meta action */
if
(
g_stEngineStructure.stEngineTimer.ulCurrentTimerCount >=
((unsigned long) fn_lGetActionParamlValue(5, p_SuperObjPerso)+(unsigned long) fn_lGetActionParamlValue(3, p_SuperObjPerso))
)
{
/* Meca */
M_GetMSHandle(p_SuperObjPerso, StandardGame)->ulCustomBits &= ~0x8000;
return C_DefaultMetaActionFinished;
}
/* Actual camera pos */
POS_fn_vGetTranslationVector
(
HIE_fn_hGetSuperObjectGlobalMatrix(p_SuperObjPerso),
&stCurrentCameraPos
);
/* Rotation axis is camera Z */
p_stPersoGlobalMatrix = HIE_fn_hGetSuperObjectGlobalMatrix(p_SuperObjPerso);
POS_fn_vGetRotationMatrix(p_stPersoGlobalMatrix, &stTempVector, &stTempVector, &stAxis);
MTH3D_M_vCopyVector(&stTempVector, fn_p_stGetActionParamp_stVertex(1,p_SuperObjPerso));
fnv_TurnAWithB
(
p_SuperObjPerso,
&stTempVector,
&stCurrentCameraPos,
&stAxis,
fn_p_stGetActionParamp_stVertex(0,p_SuperObjPerso),
fn_xGetActionParamxValue(2, p_SuperObjPerso),
fn_lGetActionParamlValue(3, p_SuperObjPerso),
fn_lGetActionParamlValue(4, p_SuperObjPerso)
);
MTH3D_M_vSetVectorElements(&stTempVector1, MTH_C_ZERO, MTH_C_ZERO, MTH_C_ONE);
CAM_fn_vForceCameraTgt(p_SuperObjPerso, &stTempVector, &stTempVector1);
/* Remember actual target */
fn_vSetActionParamp_stVertex(0, p_SuperObjPerso, &stTempVector);
return C_DefaultMetaActionNotFinished;
}
#endif /* _AI_EXCLUDE_NEVER_USED_ }*/
/*
*=================================================================================================
*=================================================================================================
*/
#if !defined(_AI_EXCLUDE_NEVER_USED_) /* MT {*/
tducActionReturn fn_ucCamCinePosATgtBTurnTgtV(HIE_tdxHandleToSuperObject p_SuperObjPerso)
{
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
MS_tdxHandleToCineinfo hCineinfo;
MTH3D_tdstVector stCurrentCameraPos, stTempVector, stTempVector1, stAxis;
POS_tdstCompletePosition *p_stPersoGlobalMatrix;
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
hCineinfo = M_GetMSHandle(p_SuperObjPerso, Cineinfo);
#if defined(__DEBUG_AI__)
if (hCineinfo == NULL)
M_AIFatalError(E_uwAIFatalNotMSCamera);
#endif
/* Test end of meta action */
if
(
g_stEngineStructure.stEngineTimer.ulCurrentTimerCount >=
((unsigned long) fn_lGetActionParamlValue(5, p_SuperObjPerso)+(unsigned long) fn_lGetActionParamlValue(3, p_SuperObjPerso))
)
{
/* Meca */
M_GetMSHandle(p_SuperObjPerso, StandardGame)->ulCustomBits &= ~0x8000;
return C_DefaultMetaActionFinished;
}
/* Actual camera pos */
POS_fn_vGetTranslationVector
(
HIE_fn_hGetSuperObjectGlobalMatrix(p_SuperObjPerso),
&stCurrentCameraPos
);
/* Rotation axis is camera X */
p_stPersoGlobalMatrix = HIE_fn_hGetSuperObjectGlobalMatrix(p_SuperObjPerso);
POS_fn_vGetRotationMatrix(p_stPersoGlobalMatrix, &stAxis, &stTempVector, &stTempVector);
MTH3D_M_vCopyVector(&stTempVector, fn_p_stGetActionParamp_stVertex(1,p_SuperObjPerso));
fnv_TurnAWithB
(
p_SuperObjPerso,
&stTempVector,
&stCurrentCameraPos,
&stAxis,
fn_p_stGetActionParamp_stVertex(0,p_SuperObjPerso),
fn_xGetActionParamxValue(2, p_SuperObjPerso),
fn_lGetActionParamlValue(3, p_SuperObjPerso),
fn_lGetActionParamlValue(4, p_SuperObjPerso)
);
MTH3D_M_vSetVectorElements(&stTempVector1, MTH_C_ZERO, MTH_C_ZERO, MTH_C_ONE);
CAM_fn_vForceCameraTgt(p_SuperObjPerso, &stTempVector, &stTempVector1);
/* Remember actual target */
fn_vSetActionParamp_stVertex(0, p_SuperObjPerso, &stTempVector);
return C_DefaultMetaActionNotFinished;
}
#endif /* _AI_EXCLUDE_NEVER_USED_ }*/

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,111 @@
#ifndef __CAM_BASE_H__
#define __CAM_BASE_H__
extern char cLastCutAngleSens;
extern char cJustBetterPos;
/*
*************************************************************************************************
*************************************************************************************************
*************************************************************************************************
*************************************************************************************************
*/
/*
* Structure to update position of camera.
* The fileds of that structure are passed to meca parsing.
*/
typedef struct CAM_tdstComputedPosition_
{
MTH3D_tdstVector stTarget;
MTH3D_tdstVector stMovePos;
MTH3D_tdstVector stRefAxisZ;
MTH_tdxReal xLinearSpeed;
MTH_tdxReal xAngularSpeed;
MTH_tdxReal xTargetSpeed;
} CAM_tdstComputedPosition;
/*
* Structure to use for update actions of camera.
*/
typedef struct CAM_tdstUpdateCamera_
{
DNM_tdstReport *p_stReport;
DNM_tdstDynamics *p_stDynamics;
MS_tdxHandleToCineinfo hCineinfo;
MS_tdxHandleToInternalCineinfo hCineinfoWork;
MS_tdxHandleToInternalCineinfo hCineinfoCurrent;
MS_tdxHandleToInternalCineinfo hCineinfoInit;
MS_tdxHandleToInternalCineinfo hCineinfoVisibility;
HIE_tdxHandleToSuperObject hSuperObjCamera;
MTH3D_tdstVector stCurrentCameraPos;
MTH3D_tdstVector stWantedCameraPos;
MTH3D_tdstVector stRealWantedCameraPos;
MTH3D_tdstVector stTargetedPersoRealPos;
MTH3D_tdstVector stTargetedPersoPos;
MTH3D_tdstVector stSecondTargetedPersoRealPos;
MTH3D_tdstVector stSecondTargetedPersoPos;
char cHasCutAlpha;
MTH_tdxReal xAngleAlphaCut;
MTH_tdxReal xAngleDeltaAlphaCut;
char cTgtPersoIsMovingAbsolute;
MTH3D_tdstVector stTgtPersoMoveAbsolute;
char cTgtPersoIsMovingRelative;
MTH3D_tdstVector stTgtPersoMoveRelative;
CAM_tdstComputedPosition stCptPos;
} CAM_tdstUpdateCamera;
/*
*************************************************************************************************
*************************************************************************************************
*************************************************************************************************
*************************************************************************************************
*/
#define CONSTANT_CUT_COL (CAM_g_stCameraConstants.wFlags & 0x0001)
#define CONSTANT_RESETTEMP (CAM_g_stCameraConstants.wFlags & 0x0002)
#define CONSTANT_FORCEBESTPOS (CAM_g_stCameraConstants.wFlags & 0x0004)
#define CONSTANT_NOVISPROJ (CAM_g_stCameraConstants.wFlags & 0x0008)
#define CONSTANT_NORMALIFJOIN (CAM_g_stCameraConstants.wFlags & 0x0010)
#define CONSTANT_NOBETTERPOS (CAM_g_stCameraConstants.wFlags & 0x0020)
#define CONSTANT_NODISTVIS (CAM_g_stCameraConstants.wFlags & 0x0040)
/*
*************************************************************************************************
*************************************************************************************************
*************************************************************************************************
*************************************************************************************************
*/
extern void CAM_fn_vComputeRefAxis(CAM_tdstUpdateCamera *, MTH3D_tdstVector *);
extern void CAM_fn_vComputeTargetedPersoPos(CAM_tdstUpdateCamera *, HIE_tdxHandleToSuperObject, MTH3D_tdstVector *, MTH3D_tdstVector *);
extern void CAM_fn_vComputeReferencePoint(CAM_tdstUpdateCamera *);
extern void CAM_fn_vDynChangeTarget(CAM_tdstUpdateCamera *, MTH3D_tdstVector *);
extern void CAM_fn_vComputeTarget(CAM_tdstUpdateCamera *);
extern void CAM_fn_vBoundAngleWithTolerance(CAM_tdstUpdateCamera *, MTH_tdxReal *, MTH_tdxReal *, MTH_tdxReal *, MTH_tdxReal, MTH_tdxReal);
extern void CAM_fn_vComputeCameraAxisAngles(CAM_tdstUpdateCamera *, MTH3D_tdstVector *, MTH3D_tdstVector *, MTH_tdxReal *, MTH_tdxReal *);
extern void CAM_fn_vRotateCameraAxis( MTH3D_tdstVector *, MTH_tdxReal, MTH_tdxReal, MTH3D_tdstVector *);
extern void CAM_fn_vComputeRealWantedPos(CAM_tdstUpdateCamera *);
extern char CAM_fn_cDynChangeTheta(CAM_tdstUpdateCamera *, MTH3D_tdstVector *);
extern void CAM_fn_vTakeCareOfCameraAltitude(MS_tdxHandleToCineinfo, MTH3D_tdstVector *);
extern void CAM_fn_vComputeMovePos(CAM_tdstUpdateCamera *);
extern void CAM_fn_vComputeMovePosWithDynTheta(CAM_tdstUpdateCamera *);
extern void CAM_fn_vComputeSpeed(CAM_tdstUpdateCamera *);
extern void CAM_fn_vConstraintMoveAfterVisFailure(CAM_tdstUpdateCamera *);
extern void CAM_fn_vConstraintMove(CAM_tdstUpdateCamera *);
extern void CAM_fn_vUpdateGeneralCamera(CAM_tdstUpdateCamera *);
#endif /* __CAM_BASE_H__ */

View File

@@ -0,0 +1,184 @@
/*
**************************************************************************************************
**************************************************************************************************
**************************************************************************************************
**************************************************************************************************
*/
#define D_CineInfo_StructureDefine
#include "AIUseCPA.h"
#include "specif/AIOption.h"
#include "AIMacros.h"
#include "AI_Erm.h"
#include "Intell.h"
#include "StrIntel.h"
#include "AI_Struc.h"
#include "EnumCond.h"
#include "Operator.h"
#include "Convert.h"
#include "CAM_Base.h"
#include "CAM_Tool.h"
#include "CAM_Vis.h"
/*
*=================================================================================================
* Is ... ?
*=================================================================================================
*/
tdstNodeInterpret *CAM_fn_p_stIs(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, long *p_lValue)
{
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
HIE_tdxHandleToSuperObject hCamera;
MS_tdxHandleToCineinfo hCineInfo;
MS_tdxHandleToInternalCineinfo hIntCineInfo;
tdstGetSetParam stValue;
long lCurrentValue;
long lViewport;
enum tdeCondId_ eCondId = M_eCondIdInterpret(p_stTree-1);
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/********************************************************************************/
/* BEWARE THE ULTRA OPERATOR : Must be at the beginning and respect this syntax */
/********************************************************************************/
fn_vGetUltraOperatorPerso(fn_ucGetConditionUltraOperator(eCondId),p_SuperObjPerso,&hCamera);
/********************************************************************************/
hCineInfo = M_GetMSHandle(hCamera, Cineinfo);
#if defined(__DEBUG_AI__)
if (hCineInfo == NULL)
M_AIFatalError(E_uwAIFatalNotMSCamera);
#endif
M_EvalNextParameter(&stValue);
lCurrentValue = M_GetSetParam_lValue(&stValue);
if (lCurrentValue == 1)
{
if (hCineInfo->ucVolIAFlags & C_VolIAFlags_CurrentAlreadyCopiedInWork)
{
hIntCineInfo = hCineInfo->hWork;
}
else
{
hIntCineInfo = hCineInfo->hCurrent;
}
}
else if(lCurrentValue == -1)
{
hIntCineInfo = hCineInfo->hInit;
}
else
{
if (hCineInfo->ucPerIAFlags & C_PerIAFlags_VisibilityCopied)
hIntCineInfo = hCineInfo->hVisibility;
else
hIntCineInfo = hCineInfo->hCurrent;
}
switch (eCondId)
{
#if !defined(_AI_EXCLUDE_NEVER_USED_) /* MT {*/
/*---------------------------------------------------------------------------------------*/
case eCond_Cam_IsActive :
*p_lValue=(long) hIntCineInfo->bIsActive;
return(p_stTree);
/*---------------------------------------------------------------------------------------*/
case eCond_Cam_IsViewportOwner :
M_EvalNextParameter(&stValue);
lViewport = M_GetSetParam_lValue(&stValue);
*p_lValue=(long) (lViewport == (long) hIntCineInfo->eTypeOfViewport);
return(p_stTree);
/*---------------------------------------------------------------------------------------*/
case eCond_Cam_IsFlagNoDynamicTarget :
*p_lValue=(long) (hIntCineInfo->uwIAFlags & C_IAFlags_NoDynamicTarget);
return(p_stTree);
/*---------------------------------------------------------------------------------------*/
case eCond_Cam_IsFlagNoAverageMoveTgtPerso:
*p_lValue=(long) (hIntCineInfo->uwIAFlags & C_IAFlags_NoAverageMoveTgtPerso);
return(p_stTree);
/*---------------------------------------------------------------------------------------*/
case eCond_Cam_IsFlagNoParseCutAngle :
*p_lValue=(long) (hIntCineInfo->uwIAFlags & C_IAFlags_NoParseCutAngle);
return(p_stTree);
/*---------------------------------------------------------------------------------------*/
case eCond_Cam_IsFlagNoVisibility :
*p_lValue=(long) (hIntCineInfo->uwIAFlags & C_IAFlags_NoVisibility);
return(p_stTree);
/*---------------------------------------------------------------------------------------*/
case eCond_Cam_IsFlagNoVisibilityWithDynHie :
*p_lValue=(long) (hIntCineInfo->uwIAFlags & C_IAFlags_NoVisibilityWithDynHie);
return(p_stTree);
/*---------------------------------------------------------------------------------------*/
case eCond_Cam_IsFlagNoDynChangeTheta :
*p_lValue=(long) (hIntCineInfo->uwIAFlags & C_IAFlags_NoDynChangeTheta);
return(p_stTree);
/*---------------------------------------------------------------------------------------*/
case eCond_Cam_IsFlagNoShiftUntilPosReached:
*p_lValue=(long) (hIntCineInfo->uwIAFlags & C_IAFlags_NoShiftUntilPosReached);
return(p_stTree);
/*---------------------------------------------------------------------------------------*/
case eCond_Cam_IsFlagNoDynSpeed:
*p_lValue=(long) (hIntCineInfo->uwIAFlags & C_IAFlags_NoDynSpeed);
return(p_stTree);
/*---------------------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------------------*/
case eCond_Cam_IsFlagNoLinearParsing :
*p_lValue=(long) (hIntCineInfo->uwDNMFlags & DNM_CAM_C_NoLinearParsing);
return(p_stTree);
/*---------------------------------------------------------------------------------------*/
case eCond_Cam_IsFlagNoLinearInertia :
*p_lValue=(long) (hIntCineInfo->uwDNMFlags & DNM_CAM_C_NoLinearInertia);
return(p_stTree);
/*---------------------------------------------------------------------------------------*/
case eCond_Cam_IsFlagNoAngularParsing :
*p_lValue=(long) (hIntCineInfo->uwDNMFlags & DNM_CAM_C_NoAngularParsing);
return(p_stTree);
/*---------------------------------------------------------------------------------------*/
case eCond_Cam_IsFlagNoAngularInertia :
*p_lValue=(long) (hIntCineInfo->uwDNMFlags & DNM_CAM_C_NoAngularInertia);
return(p_stTree);
/*---------------------------------------------------------------------------------------*/
case eCond_Cam_IsFlagNoTargetParsing :
*p_lValue=(long) (hIntCineInfo->uwDNMFlags & DNM_CAM_C_NoTargetParsing);
return(p_stTree);
/*---------------------------------------------------------------------------------------*/
case eCond_Cam_IsFlagNoTargetInertia :
*p_lValue=(long) (hIntCineInfo->uwDNMFlags & DNM_CAM_C_NoTargetInertia);
return(p_stTree);
/*---------------------------------------------------------------------------------------*/
case eCond_Cam_IsFlagNoObstacle:
*p_lValue=(long) (hIntCineInfo->uwDNMFlags & DNM_CAM_C_NoObstacle);
return(p_stTree);
/*---------------------------------------------------------------------------------------*/
case eCond_Cam_IsFlagFixedOrientation :
*p_lValue=(long) (hIntCineInfo->uwDNMFlags & DNM_CAM_C_FixedOrientation);
return(p_stTree);
/*---------------------------------------------------------------------------------------*/
case eCond_Cam_IsFlagForcedTarget:
*p_lValue=(long) (hIntCineInfo->uwIAFlags & C_IAFlags_TargetIsAlreadyComputed);
return(p_stTree);
/*---------------------------------------------------------------------------------------*/
case eCond_Cam_IsFlagForcedAxis:
*p_lValue=(long) (hIntCineInfo->uwIAFlags & C_IAFlags_RefAxisIsAlreadyComputed);
return(p_stTree);
/*---------------------------------------------------------------------------------------*/
#endif /* _AI_EXCLUDE_NEVER_USED_ }*/
case eCond_Cam_IsFlagForcedPosition:
*p_lValue=(long) (hIntCineInfo->uwIAFlags & C_IAFlags_PositionIsAlreadyComputed);
return(p_stTree);
/*---------------------------------------------------------------------------------------*/
default:
break;
}
M_AIFatalError(E_uwAIFatalNotValidCondition);
return p_stTree;
}

View File

@@ -0,0 +1,850 @@
/*
**************************************************************************************************
**************************************************************************************************
**************************************************************************************************
**************************************************************************************************
*/
#define D_CineInfo_StructureDefine
#include "AIUseCPA.h"
#include "specif/AIOption.h"
#include "AIMacros.h"
#include "AI_Erm.h"
#include "Intell.h"
#include "StrIntel.h"
#include "AI_Struc.h"
#include "EnumFunc.h"
#include "Operator.h"
#include "Convert.h"
#include "CAM_Base.h"
#include "CAM_Tool.h"
#include "Cam_Vis.h"
/*
**************************************************************************************************
**************************************************************************************************
**************************************************************************************************
**************************************************************************************************
*/
/*
*=================================================================================================
* To retrieve a real.
* _lCurrentValue : -1 Initial
* 0 Actual current (current or visibility)
* 1 The actual one (current or work)
*=================================================================================================
*/
MTH_tdxReal CAM_fn_xGetARealParameter
(
MS_tdxHandleToCineinfo _hCineInfo,
MTH_tdxReal *_p_xInitialValue,
MTH_tdxReal *_p_xCurrentValue,
MTH_tdxReal *_p_xWorkValue,
MTH_tdxReal *_p_xVisValue,
long _lCurrentValue
)
{
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
MTH_tdxReal xValue = MTH_C_ZERO;
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
if (_lCurrentValue == 1)
{
if (_hCineInfo->ucVolIAFlags & C_VolIAFlags_CurrentAlreadyCopiedInWork)
xValue = *_p_xWorkValue;
else
xValue = *_p_xCurrentValue;
}
else if (_lCurrentValue == -1)
{
xValue = *_p_xInitialValue;
}
else
{
if (_hCineInfo->ucPerIAFlags & C_PerIAFlags_VisibilityCopied)
xValue = *_p_xVisValue;
else
xValue = *_p_xCurrentValue;
}
return xValue;
}
/*
*=================================================================================================
* To retrieve a vector.
* _lCurrentValue : -1 Initial
* 0 Actual current (current or visibility)
* 1 The actual one (current or work)
*=================================================================================================
*/
MTH3D_tdstVector *CAM_fn_p_stGetAVectorParameter
(
MS_tdxHandleToCineinfo _hCineInfo,
MTH3D_tdstVector *_p_stInitialValue,
MTH3D_tdstVector *_p_stCurrentValue,
MTH3D_tdstVector *_p_stWorkValue,
MTH3D_tdstVector *_p_stVisValue,
long _lCurrentValue
)
{
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
MTH3D_tdstVector *p_stValue = NULL;
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
if (_lCurrentValue == 1)
{
if (_hCineInfo->ucVolIAFlags & C_VolIAFlags_CurrentAlreadyCopiedInWork)
p_stValue = _p_stWorkValue;
else
p_stValue = _p_stCurrentValue;
}
else if (_lCurrentValue == -1)
{
p_stValue = _p_stInitialValue;
}
else
{
if (_hCineInfo->ucPerIAFlags & C_PerIAFlags_VisibilityCopied)
p_stValue = _p_stVisValue;
else
p_stValue = _p_stCurrentValue;
}
return p_stValue;
}
/*
**************************************************************************************************
**************************************************************************************************
**************************************************************************************************
**************************************************************************************************
*/
/*
*=================================================================================================
* Get a vector parameter.
*=================================================================================================
*/
tdstNodeInterpret *CAM_fn_p_stGetVectorParameter(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, tdstGetSetParam *p_stValue)
{
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
HIE_tdxHandleToSuperObject hCamera;
MS_tdxHandleToCineinfo hCineInfo;
long lCurrentValue;
MTH3D_tdstVector *p_stInitialValue = NULL;
MTH3D_tdstVector *p_stCurrentValue = NULL;
MTH3D_tdstVector *p_stWorkValue = NULL;
MTH3D_tdstVector *p_stVisValue = NULL;
enum tdeFuncId_ eFuncId = M_eFuncIdInterpret(p_stTree-1);
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/********************************************************************************/
/* BEWARE THE ULTRA OPERATOR : Must be at the beginning and respect this syntax */
/********************************************************************************/
fn_vGetUltraOperatorPerso(fn_ucGetFunctionUltraOperator(eFuncId),p_SuperObjPerso,&hCamera);
/********************************************************************************/
hCineInfo = M_GetMSHandle(hCamera, Cineinfo);
#if defined(__DEBUG_AI__)
if (hCineInfo == NULL)
M_AIFatalError(E_uwAIFatalNotMSCamera);
#endif
M_EvalNextParameter(p_stValue);
lCurrentValue = M_GetSetParam_lValue(p_stValue);
switch(eFuncId)
{
/*---------------------------------------------------------------------------------------*/
case eFct_Cam_GetShiftTarget:
p_stInitialValue = &(hCineInfo->hInit->stShiftTarget);
p_stCurrentValue = &(hCineInfo->hCurrent->stShiftTarget);
p_stWorkValue = &(hCineInfo->hWork->stShiftTarget);
p_stVisValue = &(hCineInfo->hVisibility->stShiftTarget);
break;
/*---------------------------------------------------------------------------------------*/
case eFct_Cam_GetShiftPos:
p_stInitialValue = &(hCineInfo->hInit->stShiftPos);
p_stCurrentValue = &(hCineInfo->hCurrent->stShiftPos);
p_stWorkValue = &(hCineInfo->hWork->stShiftPos);
p_stVisValue = &(hCineInfo->hVisibility->stShiftPos);
break;
/*---------------------------------------------------------------------------------------*/
default:
break;
}
M_Full_GetSetParam_p_stVertex
(
p_stValue,
CAM_fn_p_stGetAVectorParameter
(
hCineInfo,
p_stInitialValue,
p_stCurrentValue,
p_stWorkValue,
p_stVisValue,
lCurrentValue
)
);
return(p_stTree);
}
/*
*=================================================================================================
* Get a Real Parameter.
*=================================================================================================
*/
tdstNodeInterpret *CAM_fn_p_stGetRealParameter(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, tdstGetSetParam *p_stValue)
{
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
HIE_tdxHandleToSuperObject hCamera;
MS_tdxHandleToCineinfo hCineInfo;
long lCurrentValue;
MTH_tdxReal *p_xInitialValue = NULL;
MTH_tdxReal *p_xCurrentValue = NULL;
MTH_tdxReal *p_xWorkValue = NULL;
MTH_tdxReal *p_xVisValue = NULL;
enum tdeFuncId_ eFuncId = M_eFuncIdInterpret(p_stTree-1);
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/********************************************************************************/
/* BEWARE THE ULTRA OPERATOR : Must be at the beginning and respect this syntax */
/********************************************************************************/
fn_vGetUltraOperatorPerso(fn_ucGetFunctionUltraOperator(eFuncId),p_SuperObjPerso,&hCamera);
/********************************************************************************/
hCineInfo = M_GetMSHandle(hCamera, Cineinfo);
#if defined(__DEBUG_AI__)
if (hCineInfo == NULL)
M_AIFatalError(E_uwAIFatalNotMSCamera);
#endif
M_EvalNextParameter(p_stValue);
lCurrentValue = M_GetSetParam_lValue(p_stValue);
switch(eFuncId)
{
/*---------------------------------------------------------------------------------------*/
case eFct_Cam_GetDistMin :
p_xInitialValue = &(hCineInfo->hInit->xDistMin);
p_xCurrentValue = &(hCineInfo->hCurrent->xDistMin);
p_xWorkValue = &(hCineInfo->hWork->xDistMin);
p_xVisValue = &(hCineInfo->hVisibility->xDistMin);
break;
/*---------------------------------------------------------------------------------------*/
case eFct_Cam_GetDistMax :
p_xInitialValue = &(hCineInfo->hInit->xDistMax);
p_xCurrentValue = &(hCineInfo->hCurrent->xDistMax);
p_xWorkValue = &(hCineInfo->hWork->xDistMax);
p_xVisValue = &(hCineInfo->hVisibility->xDistMax);
break;
#if !defined(_AI_EXCLUDE_NEVER_USED_) /* MT {*/
/*---------------------------------------------------------------------------------------*/
case eFct_Cam_GetBoundDistMin :
p_xInitialValue = &(hCineInfo->hInit->xBoundDistMin);
p_xCurrentValue = &(hCineInfo->hCurrent->xBoundDistMin);
p_xWorkValue = &(hCineInfo->hWork->xBoundDistMin);
p_xVisValue = &(hCineInfo->hVisibility->xBoundDistMin);
break;
/*---------------------------------------------------------------------------------------*/
case eFct_Cam_GetBoundDistMax :
p_xInitialValue = &(hCineInfo->hInit->xBoundDistMax);
p_xCurrentValue = &(hCineInfo->hCurrent->xBoundDistMax);
p_xWorkValue = &(hCineInfo->hWork->xBoundDistMax);
p_xVisValue = &(hCineInfo->hVisibility->xBoundDistMax);
break;
/*---------------------------------------------------------------------------------------*/
case eFct_Cam_GetAngleAlpha :
p_xInitialValue = &(hCineInfo->hInit->xAngleAlpha);
p_xCurrentValue = &(hCineInfo->hCurrent->xAngleAlpha);
p_xWorkValue = &(hCineInfo->hWork->xAngleAlpha);
p_xVisValue = &(hCineInfo->hVisibility->xAngleAlpha);
break;
/*---------------------------------------------------------------------------------------*/
case eFct_Cam_GetAngleShiftAlpha :
p_xInitialValue = &(hCineInfo->hInit->xAngleShiftAlpha);
p_xCurrentValue = &(hCineInfo->hCurrent->xAngleShiftAlpha);
p_xWorkValue = &(hCineInfo->hWork->xAngleShiftAlpha);
p_xVisValue = &(hCineInfo->hVisibility->xAngleShiftAlpha);
break;
#endif /* _AI_EXCLUDE_NEVER_USED_ }*/
/*---------------------------------------------------------------------------------------*/
case eFct_Cam_GetAngleTheta :
p_xInitialValue = &(hCineInfo->hInit->xAngleTheta);
p_xCurrentValue = &(hCineInfo->hCurrent->xAngleTheta);
p_xWorkValue = &(hCineInfo->hWork->xAngleTheta);
p_xVisValue = &(hCineInfo->hVisibility->xAngleTheta);
break;
#if !defined(_AI_EXCLUDE_NEVER_USED_) /* MT {*/
/*---------------------------------------------------------------------------------------*/
case eFct_Cam_GetAngleShiftTheta :
p_xInitialValue = &(hCineInfo->hInit->xAngleShiftTheta);
p_xCurrentValue = &(hCineInfo->hCurrent->xAngleShiftTheta);
p_xWorkValue = &(hCineInfo->hWork->xAngleShiftTheta);
p_xVisValue = &(hCineInfo->hVisibility->xAngleShiftTheta);
break;
/*---------------------------------------------------------------------------------------*/
case eFct_Cam_GetLinearSpeed:
p_xInitialValue = &(hCineInfo->hInit->xLinearSpeed);
p_xCurrentValue = &(hCineInfo->hCurrent->xLinearSpeed);
p_xWorkValue = &(hCineInfo->hWork->xLinearSpeed);
p_xVisValue = &(hCineInfo->hVisibility->xLinearSpeed);
break;
/*---------------------------------------------------------------------------------------*/
case eFct_Cam_GetLinearIncreaseSpeed :
p_xInitialValue = &(hCineInfo->hInit->xLinearIncreaseSpeed);
p_xCurrentValue = &(hCineInfo->hCurrent->xLinearIncreaseSpeed);
p_xWorkValue = &(hCineInfo->hWork->xLinearIncreaseSpeed);
p_xVisValue = &(hCineInfo->hVisibility->xLinearIncreaseSpeed);
break;
/*---------------------------------------------------------------------------------------*/
case eFct_Cam_GetLinearDecreaseSpeed :
p_xInitialValue = &(hCineInfo->hInit->xLinearDecreaseSpeed);
p_xCurrentValue = &(hCineInfo->hCurrent->xLinearDecreaseSpeed);
p_xWorkValue = &(hCineInfo->hWork->xLinearDecreaseSpeed);
p_xVisValue = &(hCineInfo->hVisibility->xLinearDecreaseSpeed);
break;
/*---------------------------------------------------------------------------------------*/
case eFct_Cam_GetAngularSpeed:
p_xInitialValue = &(hCineInfo->hInit->xAngularSpeed);
p_xCurrentValue = &(hCineInfo->hCurrent->xAngularSpeed);
p_xWorkValue = &(hCineInfo->hWork->xAngularSpeed);
p_xVisValue = &(hCineInfo->hVisibility->xAngularSpeed);
break;
/*---------------------------------------------------------------------------------------*/
case eFct_Cam_GetAngularIncreaseSpeed :
p_xInitialValue = &(hCineInfo->hInit->xAngularIncreaseSpeed);
p_xCurrentValue = &(hCineInfo->hCurrent->xAngularIncreaseSpeed);
p_xWorkValue = &(hCineInfo->hWork->xAngularIncreaseSpeed);
p_xVisValue = &(hCineInfo->hVisibility->xAngularIncreaseSpeed);
break;
/*---------------------------------------------------------------------------------------*/
case eFct_Cam_GetAngularDecreaseSpeed :
p_xInitialValue = &(hCineInfo->hInit->xAngularDecreaseSpeed);
p_xCurrentValue = &(hCineInfo->hCurrent->xAngularDecreaseSpeed);
p_xWorkValue = &(hCineInfo->hWork->xAngularDecreaseSpeed);
p_xVisValue = &(hCineInfo->hVisibility->xAngularDecreaseSpeed);
break;
/*---------------------------------------------------------------------------------------*/
case eFct_Cam_GetTargetSpeed:
p_xInitialValue = &(hCineInfo->hInit->xTargetSpeed);
p_xCurrentValue = &(hCineInfo->hCurrent->xTargetSpeed);
p_xWorkValue = &(hCineInfo->hWork->xTargetSpeed);
p_xVisValue = &(hCineInfo->hVisibility->xTargetSpeed);
break;
/*---------------------------------------------------------------------------------------*/
case eFct_Cam_GetTargetIncreaseSpeed :
p_xInitialValue = &(hCineInfo->hInit->xTargetIncreaseSpeed);
p_xCurrentValue = &(hCineInfo->hCurrent->xTargetIncreaseSpeed);
p_xWorkValue = &(hCineInfo->hWork->xTargetIncreaseSpeed);
p_xVisValue = &(hCineInfo->hVisibility->xTargetIncreaseSpeed);
break;
/*---------------------------------------------------------------------------------------*/
case eFct_Cam_GetTargetDecreaseSpeed :
p_xInitialValue = &(hCineInfo->hInit->xTargetDecreaseSpeed);
p_xCurrentValue = &(hCineInfo->hCurrent->xTargetDecreaseSpeed);
p_xWorkValue = &(hCineInfo->hWork->xTargetDecreaseSpeed);
p_xVisValue = &(hCineInfo->hVisibility->xTargetDecreaseSpeed);
break;
#endif /* _AI_EXCLUDE_NEVER_USED_ }*/
/*---------------------------------------------------------------------------------------*/
case eFct_Cam_GetFocal :
p_xInitialValue = &(hCineInfo->hInit->xFocal);
p_xCurrentValue = &(hCineInfo->hCurrent->xFocal);
p_xWorkValue = &(hCineInfo->hWork->xFocal);
p_xVisValue = &(hCineInfo->hVisibility->xFocal);
break;
#if !defined(_AI_EXCLUDE_NEVER_USED_) /* MT {*/
/*---------------------------------------------------------------------------------------*/
case eFct_Cam_GetZMin:
p_xInitialValue = &(hCineInfo->hInit->xZMin);
p_xCurrentValue = &(hCineInfo->hCurrent->xZMin);
p_xWorkValue = &(hCineInfo->hWork->xZMin);
p_xVisValue = &(hCineInfo->hVisibility->xZMin);
break;
/*---------------------------------------------------------------------------------------*/
case eFct_Cam_GetZMax:
p_xInitialValue = &(hCineInfo->hInit->xZMax);
p_xCurrentValue = &(hCineInfo->hCurrent->xZMax);
p_xWorkValue = &(hCineInfo->hWork->xZMax);
p_xVisValue = &(hCineInfo->hVisibility->xZMax);
break;
#endif /* _AI_EXCLUDE_NEVER_USED_ }*/
/*---------------------------------------------------------------------------------------*/
default:
break;
}
M_Full_GetSetParam_Float
(
p_stValue,
CAM_fn_xGetARealParameter
(
hCineInfo,
p_xInitialValue,
p_xCurrentValue,
p_xWorkValue,
p_xVisValue,
lCurrentValue
)
);
return(p_stTree);
}
/*
*=================================================================================================
* Get Super Object Targeted.
*=================================================================================================
*/
#if !defined(_AI_EXCLUDE_NEVER_USED_) /* MT {*/
tdstNodeInterpret *CAM_fn_p_stGetTargetedSuperObject
(
HIE_tdxHandleToSuperObject p_SuperObjPerso,
tdstNodeInterpret *p_stTree,
tdstGetSetParam *p_stValue
)
{
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
HIE_tdxHandleToSuperObject hCamera;
MS_tdxHandleToCineinfo hCineInfo;
HIE_tdxHandleToSuperObject hSuperObjectTargeted;
long lCurrentValue;
enum tdeFuncId_ eFuncId=M_eFuncIdInterpret(p_stTree-1);
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/********************************************************************************/
/* BEWARE THE ULTRA OPERATOR : Must be at the beginning and respect this syntax */
/********************************************************************************/
fn_vGetUltraOperatorPerso(fn_ucGetFunctionUltraOperator(eFuncId),p_SuperObjPerso,&hCamera);
/********************************************************************************/
hCineInfo = M_GetMSHandle(hCamera, Cineinfo);
#if defined(__DEBUG_AI__)
if (hCineInfo == NULL)
M_AIFatalError(E_uwAIFatalNotMSCamera);
#endif
M_EvalNextParameter(p_stValue);
lCurrentValue = M_GetSetParam_lValue(p_stValue);
if (lCurrentValue == 1)
{
if (hCineInfo->ucVolIAFlags & C_VolIAFlags_CurrentAlreadyCopiedInWork)
hSuperObjectTargeted = hCineInfo->hWork->hSuperObjectTargeted;
else
hSuperObjectTargeted = hCineInfo->hCurrent->hSuperObjectTargeted;
}
else if(lCurrentValue == -1)
{
hSuperObjectTargeted = hCineInfo->hInit->hSuperObjectTargeted;
}
else
{
if (hCineInfo->ucPerIAFlags & C_PerIAFlags_VisibilityCopied)
hSuperObjectTargeted = hCineInfo->hVisibility->hSuperObjectTargeted;
else
hSuperObjectTargeted = hCineInfo->hCurrent->hSuperObjectTargeted;
}
M_Full_GetSetParam_Perso
(
p_stValue,
hSuperObjectTargeted
);
return(p_stTree);
}
#endif /* _AI_EXCLUDE_NEVER_USED_ }*/
/*
*=================================================================================================
* Get Type of Viewport.
*=================================================================================================
*/
#if !defined(_AI_EXCLUDE_NEVER_USED_) /* MT {*/
tdstNodeInterpret *CAM_fn_p_stGetTypeOfViewport
(
HIE_tdxHandleToSuperObject p_SuperObjPerso,
tdstNodeInterpret *p_stTree,
tdstGetSetParam *p_stValue
)
{
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
HIE_tdxHandleToSuperObject hCamera;
MS_tdxHandleToCineinfo hCineInfo;
long lTypeOfViewport;
long lCurrentValue;
enum tdeFuncId_ eFuncId=M_eFuncIdInterpret(p_stTree-1);
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/********************************************************************************/
/* BEWARE THE ULTRA OPERATOR : Must be at the beginning and respect this syntax */
/********************************************************************************/
fn_vGetUltraOperatorPerso(fn_ucGetFunctionUltraOperator(eFuncId),p_SuperObjPerso,&hCamera);
/********************************************************************************/
hCineInfo = M_GetMSHandle(hCamera, Cineinfo);
#if defined(__DEBUG_AI__)
if (hCineInfo == NULL)
M_AIFatalError(E_uwAIFatalNotMSCamera);
#endif
M_EvalNextParameter(p_stValue);
lCurrentValue = M_GetSetParam_lValue(p_stValue);
if (lCurrentValue == 1)
{
if (hCineInfo->ucVolIAFlags & C_VolIAFlags_CurrentAlreadyCopiedInWork)
lTypeOfViewport = (long)(hCineInfo->hWork->eTypeOfViewport);
else
lTypeOfViewport = (long)(hCineInfo->hCurrent->eTypeOfViewport);
}
else if(lCurrentValue == -1)
{
lTypeOfViewport = (long)(hCineInfo->hInit->eTypeOfViewport);
}
else
{
if (hCineInfo->ucPerIAFlags & C_PerIAFlags_VisibilityCopied)
lTypeOfViewport = (long)(hCineInfo->hVisibility->eTypeOfViewport);
else
lTypeOfViewport = (long)(hCineInfo->hCurrent->eTypeOfViewport);
}
M_Full_GetSetParam_Integer
(
p_stValue,
lTypeOfViewport
);
return(p_stTree);
}
#endif /* _AI_EXCLUDE_NEVER_USED_ }*/
/*
*=================================================================================================
* Get camera type in current camera sector.
*=================================================================================================
*/
#if !defined(_AI_EXCLUDE_NEVER_USED_) /* MT {*/
tdstNodeInterpret *CAM_fn_p_stGetSectorCameraType
(
HIE_tdxHandleToSuperObject p_SuperObjPerso,
tdstNodeInterpret *p_stTree,
tdstGetSetParam *p_stValue
)
{
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
HIE_tdxHandleToSuperObject hCamera;
long lType;
enum tdeFuncId_ eFuncId=M_eFuncIdInterpret(p_stTree-1);
MS_tdxHandleToSectInfo hCamCineinfo;
HIE_tdxHandleToSuperObject hCurrentSectorCamera;
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/********************************************************************************/
/* BEWARE THE ULTRA OPERATOR : Must be at the beginning and respect this syntax */
/********************************************************************************/
fn_vGetUltraOperatorPerso(fn_ucGetFunctionUltraOperator(eFuncId),p_SuperObjPerso,&hCamera);
/********************************************************************************/
hCamCineinfo = M_GetMSHandle(hCamera, SectInfo);
hCurrentSectorCamera = fn_h_SectInfoGetCurrentSector(hCamCineinfo);
lType = (long) fn_cGetSectorCameraType(hCurrentSectorCamera);
M_Full_GetSetParam_Integer
(
p_stValue,
lType
);
return(p_stTree);
}
#endif /* _AI_EXCLUDE_NEVER_USED_ }*/
/*
*=================================================================================================
* Get the camera handle
* Parameter :
* Constant : Viewport number (1 : Main Viewport, ...)
*=================================================================================================
*/
#if !defined(_AI_EXCLUDE_NEVER_USED_) /* MT {*/
tdstNodeInterpret *CAM_fn_p_stGetCameraOfViewport
(
HIE_tdxHandleToSuperObject p_SuperObjPerso,
tdstNodeInterpret *p_stTree,
tdstGetSetParam *p_stValue
)
{
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
enum tdeFuncId_ eFuncId = M_eFuncIdInterpret(p_stTree-1);
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
p_SuperObjPerso =p_SuperObjPerso;
switch(eFuncId)
{
/*---------------------------------------------------------------------------------------*/
case eFct_Cam_GetCameraOfViewport :
M_EvalNextParameter(p_stValue);
M_Full_GetSetParam_Perso(p_stValue, CAM_fn_hGetActiveCamera(M_GetSetParam_lValue(p_stValue)));
return(p_stTree);
/*---------------------------------------------------------------------------------------*/
case eFct_Cam_GetMainCamera :
M_Full_GetSetParam_Perso(p_stValue, CAM_fn_hGetActiveCamera(CAM_e_MainViewport));
return(p_stTree);
/*---------------------------------------------------------------------------------------*/
default :
break;
}
M_AIFatalError(E_uwAIFatalNotValidFunction);
return(p_stTree);
}
#endif /* _AI_EXCLUDE_NEVER_USED_ }*/
/*
**************************************************************************************************
**************************************************************************************************
**************************************************************************************************
**************************************************************************************************
*/
/*
*=================================================================================================
* Compute the target
*=================================================================================================
*/
tdstNodeInterpret *CAM_fn_p_stComputeTargetWithTgtPerso
(
HIE_tdxHandleToSuperObject p_SuperObjPerso,
tdstNodeInterpret *p_stTree,
tdstGetSetParam *p_stValue
)
{
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
HIE_tdxHandleToSuperObject hCamera;
MS_tdxHandleToCineinfo hCineInfo;
CAM_tdstUpdateCamera stStruct;
enum tdeFuncId_ eFuncId = M_eFuncIdInterpret(p_stTree-1);
unsigned short uwMemoFlags;
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/********************************************************************************/
/* BEWARE THE ULTRA OPERATOR : Must be at the beginning and respect this syntax */
/********************************************************************************/
fn_vGetUltraOperatorPerso(fn_ucGetFunctionUltraOperator(eFuncId),p_SuperObjPerso,&hCamera);
/********************************************************************************/
hCineInfo = M_GetMSHandle(hCamera, Cineinfo);
#if defined(__DEBUG_AI__)
if (hCineInfo == NULL)
M_AIFatalError(E_uwAIFatalNotMSCamera);
#endif
/*
* Else we copy current to work (basic function to compute target took their
* parameters in work cineinfo) and initialise a temporary structure.
*/
CAM_fn_vSetCineinfoWorkFromCurrent(hCineInfo);
CAM_fn_vInitCameraStructure(hCamera, &stStruct);
/*
* If no perso, no target...
*/
if(stStruct.hCineinfoCurrent->hSuperObjectTargeted == NULL)
{
M_Full_GetSetParam_p_stVertex
(
p_stValue,
NULL
);
return (p_stTree);
}
/*
* We doesn't want dynamic target, and we inhibit force target to force
* function to compute target with the targeted perso.
*/
uwMemoFlags = stStruct.hCineinfoWork->uwIAFlags;
stStruct.hCineinfoWork->uwIAFlags |= C_IAFlags_NoDynamicTarget;
stStruct.hCineinfoWork->uwIAFlags &= ~C_IAFlags_TargetIsAlreadyComputed;
/*
* Compute target.
*/
CAM_fn_vComputeReferencePoint(&stStruct);
CAM_fn_vComputeTarget(&stStruct);
/*
* Restore flags.
*/
stStruct.hCineinfoWork->uwIAFlags = uwMemoFlags;
/*
* Return value.
*/
M_Full_GetSetParam_p_stVertex
(
p_stValue,
&stStruct.stCptPos.stTarget
);
return(p_stTree);
}
/*
*=================================================================================================
* Get the current target Position
* No Parameter.
*=================================================================================================
*/
tdstNodeInterpret *CAM_fn_p_stComputeCurrentTarget
(
HIE_tdxHandleToSuperObject p_SuperObjPerso,
tdstNodeInterpret *p_stTree,
tdstGetSetParam *p_stValue
)
{
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
HIE_tdxHandleToSuperObject hCamera;
MS_tdxHandleToCineinfo hCineInfo;
MS_tdxHandleToDynam h_Dynam;
DNM_tdstParsingDatas *p_stParsingDatas;
enum tdeFuncId_ eFuncId=M_eFuncIdInterpret(p_stTree-1);
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/********************************************************************************/
/* BEWARE THE ULTRA OPERATOR : Must be at the beginning and respect this syntax */
/********************************************************************************/
fn_vGetUltraOperatorPerso(fn_ucGetFunctionUltraOperator(eFuncId),p_SuperObjPerso,&hCamera);
/********************************************************************************/
hCineInfo = M_GetMSHandle(hCamera, Cineinfo);
#if defined(__DEBUG_AI__)
if (hCineInfo == NULL)
M_AIFatalError(E_uwAIFatalNotMSCamera);
#endif
if((h_Dynam = M_GetMSHandle(hCamera, Dynam)) == NULL )
return (p_stTree);
if((p_stParsingDatas = fn_p_stDynamGetParsingDatas(h_Dynam)) == NULL)
return (p_stTree);
M_Full_GetSetParam_p_stVertex
(
p_stValue,
DNM_M_p_stCPDGetTarget(p_stParsingDatas)
);
return(p_stTree);
}
/*
*=================================================================================================
* Get the best pos for a camera.
* No Parameter.
*=================================================================================================
*/
extern char cRefAxisIsAlreadyComputed;
extern char cNoDynChangeTheta;
extern char cCanTestStatic;
tdstNodeInterpret *CAM_fn_p_stGetBestPos
(
HIE_tdxHandleToSuperObject p_SuperObjPerso,
tdstNodeInterpret *p_stTree,
tdstGetSetParam *p_stValue
)
{
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
HIE_tdxHandleToSuperObject hCamera;
MS_tdxHandleToCineinfo hCineinfo;
CAM_tdstUpdateCamera stStruct;
MTH3D_tdstVector stVec;
enum tdeFuncId_ eFuncId=M_eFuncIdInterpret(p_stTree-1);
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/********************************************************************************/
/* BEWARE THE ULTRA OPERATOR : Must be at the beginning and respect this syntax */
/********************************************************************************/
fn_vGetUltraOperatorPerso(fn_ucGetFunctionUltraOperator(eFuncId),p_SuperObjPerso,&hCamera);
/********************************************************************************/
hCineinfo = M_GetMSHandle(hCamera, Cineinfo);
#if defined(__DEBUG_AI__)
if (hCineinfo == NULL)
M_AIFatalError(E_uwAIFatalNotMSCamera);
#endif
/* ANNECY MT - 12/07/99 { */
if (!hCineinfo->bCanDoBestPos)
{
M_Full_GetSetParam_p_stVertex
(
p_stValue,
&(hCamera->hGlobalMatrix->stTranslationVector)
);
return(p_stTree);
}
/* END ANNECY MT } */
/*
* To have the actual good camera parameters.
*/
CAM_fn_vSetCineinfoWorkFromCurrent(hCineinfo);
CAM_fn_vInitCameraStructure(hCamera, &stStruct);
cRefAxisIsAlreadyComputed = stStruct.hCineinfoWork->uwIAFlags & C_IAFlags_RefAxisIsAlreadyComputed ? 1 : 0;
cNoDynChangeTheta = stStruct.hCineinfoWork->uwIAFlags & C_IAFlags_NoDynChangeTheta ? 1 : 0;
cCanTestStatic = 1;
/*
* Compute target and real wanted camera pos (this is necessary
* for failure when we want a more correct position.
*/
CAM_fn_vComputeReferencePoint(&stStruct);
CAM_fn_vComputeTarget(&stStruct);
CAM_fn_vComputeRealWantedPos(&stStruct);
CAM_fn_vComputeMovePosWithDynTheta(&stStruct);
/*
* If no perso, can't do it.
*/
if(stStruct.hCineinfoCurrent->hSuperObjectTargeted == NULL)
return(p_stTree);
/*
* Force visibility failure.
*/
CAM_fn_vForceFailureVisibility(&stStruct);
if(stStruct.hCineinfo->eState == CAM_e_State_FailureVisibility)
{
MTH3D_M_vCopyVector(&stVec, &stStruct.hCineinfo->stLastFailedWanted);
/* ANNECY MT - 12/07/99 { */
hCineinfo->bCanDoBestPos = FALSE;
/* END ANNECY MT } */
}
else
{
MTH3D_M_vNullVector(&stVec);
}
stStruct.hCineinfo->eState = CAM_e_State_GoToOptimal;
M_Full_GetSetParam_p_stVertex
(
p_stValue,
&stVec
);
return(p_stTree);
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,50 @@
#ifndef __CAM_TOOL_H__
#define __CAM_TOOL_H__
/*
#undef EXTERN
#undef extern
#if !defined(D_StdGame_VariableDefine)
#define EXTERN extern
#else
#define EXTERN
#endif*/ /* D_StdGame_VariableDefine */
#if defined(__cplusplus)
extern "C"
{
#endif /* __cplusplus */
extern void CAM_fn_vSetResetInternalFlag(MS_tdxHandleToCineinfo,unsigned short *,unsigned short *,unsigned short *,long,long,unsigned short);
extern void CAM_fn_vForceCameraPos(HIE_tdxHandleToSuperObject, MTH3D_tdstVector *);
extern void CAM_fn_vForceCameraTgt(HIE_tdxHandleToSuperObject, MTH3D_tdstVector *, MTH3D_tdstVector *);
extern ACP_tdxBool CAM_fn_bPersoIsMoving(CAM_tdstUpdateCamera *, MTH3D_tdstVector *);
extern ACP_tdxBool CAM_fn_bPersoIsTurning(HIE_tdxHandleToSuperObject, MTH_tdxReal *);
extern ACP_tdxBool CAM_fn_bPersoOnFace(HIE_tdxHandleToSuperObject, MTH3D_tdstVector *);
extern CPA_EXPORT HIE_tdxHandleToSuperObject CAM_fn_hGetFather(HIE_tdxHandleToSuperObject);
extern void CAM_fn_vComputeProjection(MTH3D_tdstVector *, MTH3D_tdstVector *, MTH3D_tdstVector *);
extern MTH_tdxReal CAM_fn_xComputeRotation(MTH3D_tdstVector *, MTH3D_tdstVector *, MTH3D_tdstVector *);
extern ACP_tdxBool CAM_fn_bEqualVectorWithEpsilon(MTH3D_tdstVector *, MTH3D_tdstVector *, MTH_tdxReal);
extern ACP_tdxBool CAM_fn_bPositionIsReached(HIE_tdxHandleToSuperObject, MTH3D_tdstVector *, MTH_tdxReal, MTH3D_tdstVector *);
extern void CAM_fn_vComputeAnglesBetweenTwoVectors(MS_tdxHandleToInternalCineinfo, MTH3D_tdstVector *, MTH3D_tdstVector *, MTH_tdxReal *, MTH_tdxReal *, MTH3D_tdstVector *);
extern MTH_tdxReal CAM_fn_xSetAngleInIntervalPiPi(MTH_tdxReal);
extern MTH_tdxReal CAM_fn_xSetAngleInInterval02Pi(MTH_tdxReal);
extern void CAM_fn_vGetPersoSightAxis(CAM_tdstUpdateCamera *, MTH3D_tdstVector *, MTH3D_tdstVector *);
extern void CAM_fn_vInitCameraStructure(HIE_tdxHandleToSuperObject, CAM_tdstUpdateCamera *);
extern void CAM_fn_vSendParametersToParsing(CAM_tdstUpdateCamera *);
extern void Cam_fn_vComputeMovingOnRail(CAM_tdstUpdateCamera *, MTH3D_tdstVector *, MTH3D_tdstVector *, MTH3D_tdstVector *, MTH_tdxReal);
extern MTH_tdxReal Cam_fn_xComputeProjectionRail(MTH3D_tdstVector *,MTH3D_tdstVector *,MTH3D_tdstVector *);
extern CPA_EXPORT void CAM_fn_vForceBestPosition(HIE_tdxHandleToSuperObject _hCamera);
#if defined(__cplusplus)
}
#endif /* __cplusplus */
#endif /* __CAM_TOOL_H__ */

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,56 @@
#ifndef __CAM_VIS_H__
#define __CAM_VIS_H__
/*
* For _cMode.
*/
#define C_mode_MUSTSEE 1
#define C_mode_MUSTGO 2
#define C_mode_FAILURE 4
#define C_mode_MORE_CORRECT 8
/*
* For cCantTest
*/
#define C_cantest_NOTEST_NORMAL 0
#define C_cantest_TEST_NORMAL 1
/*------------------------------------------------------------------------------------------*/
extern struct tdstInternalStructurCineinfo_ gst_Ideal;
/*------------------------------------------------------------------------------------------*/
extern char CAM_fn_cIsSectorInCollisionList(HIE_tdxHandleToSuperObject, HIE_tdxHandleToSuperObject);
extern char CAM_fn_cSendSegmentInDynamicWorld(MTH3D_tdstVector *, MTH3D_tdstVector *, HIE_tdxHandleToSuperObject, HIE_tdxHandleToSuperObject);
extern char CAM_fn_cSendSegment(CAM_tdstUpdateCamera *, MTH3D_tdstVector *, MTH3D_tdstVector *);
extern char CAM_fn_cSendMultiSegment(CAM_tdstUpdateCamera *, MTH3D_tdstVector *, MTH3D_tdstVector *, MTH_tdxReal, MTH_tdxReal, long);
extern char CAM_fn_cCameraCantGo(CAM_tdstUpdateCamera *, MTH3D_tdstVector *, MTH3D_tdstVector *);
extern char CAM_fn_cCameraCantSee(CAM_tdstUpdateCamera *, MTH3D_tdstVector *, MTH3D_tdstVector *);
extern char CAM_fn_cIsWantedPosIncorrect(CAM_tdstUpdateCamera *, MTH3D_tdstVector *, char);
extern MTH_tdxReal CAM_fnx_ComputePosPound(CAM_tdstUpdateCamera *, MTH3D_tdstVector *);
extern char CAM_fnc_IsDirectionCorrect(CAM_tdstUpdateCamera *, MTH3D_tdstVector *, MTH_tdxReal, MTH_tdxReal, char);
extern void CAM_fn_vFillVectorArray(CAM_tdstUpdateCamera *, char);
extern int CAM_fni_ComparePosition(void *_pv_Elem1, void *_pv_Elem2);
extern char CAM_fn_cFindCorrectPosWithDir(CAM_tdstUpdateCamera *, MTH3D_tdstVector *, MTH3D_tdstVector *, char);
extern char CAM_fn_cFindNewGoodIdealPos(CAM_tdstUpdateCamera *, MTH3D_tdstVector *, char);
extern void CAM_fn_vForceFailureVisibility(CAM_tdstUpdateCamera *);
extern void CAM_fn_vComputeFailureVisibility(CAM_tdstUpdateCamera *);
extern void CAM_fn_vTestBadDistance(CAM_tdstUpdateCamera *);
extern void CAM_fn_vTestBadVisibility(CAM_tdstUpdateCamera *);
extern void CAM_fn_vTestOppositeCollision(CAM_tdstUpdateCamera *);
extern void CAM_fn_vComputeCineinfoWorkForAPosition(CAM_tdstUpdateCamera *, MTH3D_tdstVector *);
extern void CAM_fn_vComputeCineinfoCurrentForAPosition(CAM_tdstUpdateCamera *, MTH3D_tdstVector *);
extern void CAM_fn_vMakeAsNewIdealPosition(CAM_tdstUpdateCamera *, MTH3D_tdstVector *);
extern char CAM_fn_cCanResetConstraintMoveVisFailure(CAM_tdstUpdateCamera *, MTH3D_tdstVector *);
extern void CAM_fn_vRestoreNormalState(CAM_tdstUpdateCamera *);
extern void CAM_fn_vCheckForABetterPos(CAM_tdstUpdateCamera *);
#endif /* __CAM_VIS_H__ */

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,26 @@
/*---------------------------------------------------------------------------*/
/* Cond.h : Definition of general Condition.*/
/* auteur : Olivier Didelot.*/
/* date : 07/10/1996*/
/* 970130 : O.C. conditions and keywords tables + beginning of Lint verification*/
/* modify : Olivier Couvreur*/
/* date : 18/02/1997 CPA_EXPORT + new functions for editor*/
/* modify : Olivier Couvreur*/
/* date : 21/02/1997 Add <= , >= conditions and some keywords for editor*/
/* modify : Olivier Couvreur*/
/* date : 03/04/1997 new button conditions*/
/*---------------------------------------------------------------------------*/
#if !defined(__CONDITION_H__)
#define __CONDITION_H__
ACP_tdxBool fn_bCanSwim(HIE_tdxHandleToSuperObject p_SuperObjPerso);
#include "specif/AiOption.h"
#if !defined(OPTIMIZED_COMMAND)
void fn_vInitConditionEntries(void);
#endif /* OPTIMIZED_COMMAND*/
#endif /* __CONDITION_H__*/

View File

@@ -0,0 +1,941 @@
/* Private functions */
/*
BOOL fn_bIsObstacleTypeOfGMT(HIE_tdxHandleToSuperObject p_SuperObjPerso, GMT_tdxMask xTestMask)
{
DNM_tdstReport *p_stDynamReport;
if ((p_stDynamReport = fn_pstGetDNMReport(p_SuperObjPerso)) == NULL)
return FALSE;
return fn_bTestTypeOfGameMaterial(DNM_M_hObstacleGetCollidedMaterial(DNM_M_p_stReportGetObstacle(p_stDynamReport)), xTestMask);
}
BOOL fn_bIsWallTypeOfGMT(HIE_tdxHandleToSuperObject p_SuperObjPerso, GMT_tdxMask xTestMask)
{
DNM_tdstReport *p_stDynamReport;
if ((p_stDynamReport = fn_pstGetDNMReport(p_SuperObjPerso)) == NULL)
return FALSE;
return fn_bTestTypeOfGameMaterial(DNM_M_hObstacleGetCollidedMaterial(DNM_M_p_stReportGetWall(p_stDynamReport)), xTestMask);
}
BOOL fn_bIsGroundTypeOfGMT(HIE_tdxHandleToSuperObject p_SuperObjPerso, GMT_tdxMask xTestMask)
{
DNM_tdstReport *p_stDynamReport;
if ((p_stDynamReport = fn_pstGetDNMReport(p_SuperObjPerso)) == NULL)
return FALSE;
return fn_bTestTypeOfGameMaterial(DNM_M_hObstacleGetCollidedMaterial(DNM_M_p_stReportGetGround(p_stDynamReport)), xTestMask);
}
BOOL fn_bIsCeilingTypeOfGMT(HIE_tdxHandleToSuperObject p_SuperObjPerso, GMT_tdxMask xTestMask)
{
DNM_tdstReport *p_stDynamReport;
if ((p_stDynamReport = fn_pstGetDNMReport(p_SuperObjPerso)) == NULL)
return FALSE;
return fn_bTestTypeOfGameMaterial(DNM_M_hObstacleGetCollidedMaterial(DNM_M_p_stReportGetCeil(p_stDynamReport)), xTestMask);
}
*/
/******************************************************************
* Condition : ZDMCollideWithObstacle *
* Use : ZDMCollisionAvecObstacle ("Type de mat<61>riau") *
* Use for : Return the collide type with OBSTACLES *
* Author : Jacques Th<54>noz *
* Date of last modification: 31/10/97 *
******************************************************************/
tdstNodeInterpret *fn_p_stZDMCollideWithObstacle(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, long *p_lValue)
{
tdstGetSetParam stParam;
GMT_tdxMask xTestMask;
unsigned long ulSurfState;
DNM_tdstReport *p_stDynamReport;
enum tdeCondId_ eCondId=M_eCondIdInterpret(p_stTree-1);
M_EvalNextParameter(&stParam);
if ((p_stDynamReport=fn_pstGetDNMReport(p_SuperObjPerso))==NULL)
{
*p_lValue = (long)FALSE;
return p_stTree;
}
ulSurfState = DNM_M_ulReportGetSurfaceState(p_stDynamReport);
xTestMask = (GMT_tdxMask) M_GetSetParam_xMaskValue(&stParam);
*p_lValue = FALSE;
switch (eCondId)
{
case eCond_IsZDMCollideWithObstacle :
if (ulSurfState!=C_WOT_ulNoObstacle)
/**p_lValue = fn_bIsObstacleTypeOfGMT(p_SuperObjPerso, xTestMask);*/
*p_lValue = (long)fn_bTestTypeOfGameMaterial(DNM_M_hObstacleGetCollidedMaterial(DNM_M_p_stReportGetObstacle(p_stDynamReport)), xTestMask);
break;
case eCond_IsZDMCollideWithWall :
if (ulSurfState & C_WOT_ulWall)
/**p_lValue = fn_bIsWallTypeOfGMT(p_SuperObjPerso, xTestMask);*/
*p_lValue = (long)fn_bTestTypeOfGameMaterial(DNM_M_hObstacleGetCollidedMaterial(DNM_M_p_stReportGetWall(p_stDynamReport)), xTestMask);
break;
case eCond_IsZDMCollideWithGround :
if (ulSurfState & (C_WOT_ulGround/*|C_WOT_ulSlope*/))
/**p_lValue = fn_bIsGroundTypeOfGMT(p_SuperObjPerso, xTestMask);*/
*p_lValue = (long)fn_bTestTypeOfGameMaterial(DNM_M_hObstacleGetCollidedMaterial(DNM_M_p_stReportGetGround(p_stDynamReport)), xTestMask);
break;
case eCond_IsZDMCollideWithCeiling :
if (ulSurfState & (/*C_WOT_ulAttic|*/C_WOT_ulCeiling))
/**p_lValue = fn_bIsCeilingTypeOfGMT(p_SuperObjPerso, xTestMask);*/
*p_lValue = (long)fn_bTestTypeOfGameMaterial(DNM_M_hObstacleGetCollidedMaterial(DNM_M_p_stReportGetCeil(p_stDynamReport)), xTestMask);
break;
default:
break;
}
return(p_stTree);
}
/******************************************************************
* Condition : Cond_IsCustomBitSet *
* : Cond_IsCurrentStateCustomBitSet *
* Use : ACT_TestCustomBit(numero_de_bit) *
* : ACT_TestCustomBitDEtatCourant(numero_de_bit) *
* Use for : Return the state of the bit *
* Author : B. Germain *
* Date of last modification: 25/11/98 MT *
******************************************************************/
/* ANNECY MT - 24/11/98 {*/
tdstNodeInterpret *fn_p_stCustomBitsCond(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, long *p_lValue)
{
tdstGetSetParam stParam;
HIE_tdxHandleToSuperObject hNewSuperObjPerso;
enum tdeCondId_ eCondId = M_eCondIdInterpret(p_stTree-1);
/********************************************************************************/
/* BEWARE THE ULTRA OPERATOR : Must be at the beginning and respect this syntax */
/********************************************************************************/
fn_vGetUltraOperatorPerso(fn_ucGetConditionUltraOperator(eCondId),p_SuperObjPerso,&hNewSuperObjPerso);
/*read the custom bit identifier*/
M_EvalNextParameter(&stParam);
switch ( eCondId )
{
case eCond_IsCustomBitSet:
{
unsigned long ulMask = (1 << (M_GetSetParam_lValue(&stParam) - 1));
*p_lValue = (fn_ulStandardGameGetCustomBits(M_GetMSHandle(hNewSuperObjPerso,StandardGame)) & ulMask) ? TRUE : FALSE;
}
break;
case eCond_IsCurrentStateCustomBitSet:
{
unsigned long ulMask;
tdxHandleToState h_State;
ulMask = (unsigned long)M_GetSetParam_CapsValue(&stParam);
#ifdef _DEBUG
SAF_M_AssertWithMsg(ulMask < 256, "Le masque est trop grand")
#endif
h_State = fn_h3dDataGetCurrentState(M_GetMSHandle(hNewSuperObjPerso,3dData));
*p_lValue = ( (h_State && (fn_ucGetStateCustomBits(h_State) & ulMask)) ? TRUE : FALSE);
}
break;
default:
*p_lValue = FALSE;
break;
}
return p_stTree;
}
/* END ANNECY MT }*/
/*=====================================================================================================================================
Name: CollisionWP( Perso, WP )
Author: yann le tensorer
Created: October 12,1998 (completely rewriten for optimisations)
Last modified:
=====================================================================================================================================*/
/*extern void fn_vRegisterTextToDraw (char * _szTextToDraw , long _lX , long _lY);*/
tdstNodeInterpret *fn_p_stCollisionWP(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, long *p_lValue)
{
tdstGetSetParam stParam;
HIE_tdxHandleToSuperObject hPerso;
WP_tdhWayPoint hWP;
MTH3D_tdstVector stPosWP;
/*
static char init=0;
static char text[100];
unsigned long ulTimerValue;
if (init==0)
{
init=1;
fn_vRegisterTextToDraw(text,10,450);
}
ulTimerValue = TMR_fn_ulFastGetInternalCounter();
*/
/* Get first parameter that is a type Perso*/
M_EvalNextParameter( &stParam );
hPerso = (HIE_tdxHandleToSuperObject) M_GetSetParam_p_stSupObjValue( &stParam );
/* Get second parameter that is a Waypoint*/
M_EvalNextParameter( &stParam );
hWP = M_GetSetParam_WayPointValue( &stParam );
/* if bad wp or perso given, ther is surely no collision !*/
if ((hPerso==0) || (hWP==0))
{
*p_lValue=FALSE;
return(p_stTree);
}
if (hWP->m_hSuperObject) /* does the waypoint have a superobject ?*/
{
WP_fnv_WayPoint_ComputeLocation(hWP,&stPosWP);
/*get vector between WP and Perso*/
MTH3D_M_vSubVector(&stPosWP,&stPosWP,&hPerso->hGlobalMatrix->stTranslationVector);
}
else
/* what almost always happens...*/
MTH3D_M_vSubVector(&stPosWP,&hWP->m_stVertex,&hPerso->hGlobalMatrix->stTranslationVector);
/*compare the square of its norm with the square of the radius*/
if MTH_M_bGreaterZero(MTH_M_xSub(MTH3D_M_xSqrVector(&stPosWP),MTH_M_xSqr(hWP->m_xRadius)))
*p_lValue=FALSE;
else
*p_lValue=TRUE;
/*
ulTimerValue=TMR_fn_ulFastGetInternalCounter()-ulTimerValue-30;
sprintf(text,"%ul",ulTimerValue);
*/
return(p_stTree);
}
/**********************************************************************
* Condition: IsGiBlock *
* Use : bool := GiBloque *
* true if Gi mechanic prevents Rayman from going out a Gi *
* collide set material *
* false *
* Author : Christophe Giraud *
* Date of last modification: 25/11/97 *
**********************************************************************/
/*tdstNodeInterpret *fn_p_stMechanicBlock(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, long *p_lValue)
{
enum tdeCondId_ eCondId = M_eCondIdInterpret(p_stTree-1);
switch ( eCondId )
{
case eCond_IsGiBlock:
case eCond_IsMechanicBlock:
{
DNM_tdstReport *p_stDynamReport;
BOOL bGiBlock = FALSE;
if ( (p_stDynamReport = fn_pstGetDNMReport(p_SuperObjPerso))!=NULL )
{
bGiBlock = DNM_M_bReportCollision(p_stDynamReport);
DNM_M_bReportSetCollisionFlagToFalse(p_stDynamReport);
}
*p_lValue = bGiBlock?TRUE:FALSE;
}
break;
default:
*p_lValue = FALSE;
break;
}
return(p_stTree);
}*/
/**********************************************************************
* Condition: IsVectorNul *
* Use : bool := VecteurNul ( vecteur ) *
* almost true if ||vecteur|| < epsilon *
* Author : Jacques Th<54>noz *
* Date of last modification: 22/04/98 *
* - no more BOOL variable *
* - epsilon changed from 1e-15 to 1e-5 *
* - test modified so that as soon as one compoent is too large, *
* the others are ignored *
**********************************************************************/
tdstNodeInterpret *fn_p_stNullVector(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, long *p_lValue)
{
tdstGetSetParam stParam;
/*
enum tdeCondId_ eCondId = M_eCondIdInterpret(p_stTree-1);
switch ( eCondId )
{
case eCond_IsNullVector:
{
*/
MTH3D_tdstVector *p_stVector;
/* read vector */
M_EvalNextParameter(&stParam);
p_stVector=&M_GetSetParam_stVectorValue(&stParam);
*p_lValue = ( MTH_M_bIsNullWithEpsilon(MTH3D_M_xGetXofVector(p_stVector), MTH_M_xDoubleToReal(1.0e-5)) && MTH_M_bIsNullWithEpsilon(MTH3D_M_xGetYofVector(p_stVector), MTH_M_xDoubleToReal(1.0e-5)) && MTH_M_bIsNullWithEpsilon(MTH3D_M_xGetZofVector(p_stVector), MTH_M_xDoubleToReal(1.0e-5)) )
? TRUE
: FALSE;
/* }
break;
default:
*p_lValue = FALSE;
break;
}
*/
return(p_stTree);
}
/**********************************************************************
* Condition: OptionTruc *
* Use : bool := OptionTruc () *
* true if Truc option is active in current mechanic *
* Author : Jacques Th<54>noz *
* Date of last modification: 16/12/97 *
**********************************************************************/
tdstNodeInterpret *fn_p_stMechanicOption(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, long *p_lValue)
{
struct DNM_stDynamics* pstDynamic;
MS_tdxHandleToDynam h_Dynam;
BOOL bOption;
HIE_tdxHandleToSuperObject hNewSuperObjPerso;
enum tdeCondId_ eCondId = M_eCondIdInterpret(p_stTree-1);
/********************************************************************************/
/* BEWARE THE ULTRA OPERATOR : Must be at the beginning and respect this syntax */
/********************************************************************************/
fn_vGetUltraOperatorPerso(fn_ucGetConditionUltraOperator(eCondId),p_SuperObjPerso,&hNewSuperObjPerso);
/* Get Dynamics structure*/
h_Dynam = M_GetMSHandle(hNewSuperObjPerso,Dynam);
if (!h_Dynam)
{
#if (defined(ACTIVE_EXEC_CHECKING) && defined(ACTIVE_EDITOR)) || defined(ACTIVE_AIDEBUG)
#if !defined(U64_AIDEBUG) /* Oliv' - 23/11/1998*/
Erm_M_UpdateLastError(AI, C_ucErmDefaultChannel, E_uwAIWarningScriptError , C_lErmNoDebugData,
C_ucErmOpenInfoWindow, C_ucNeverStopForDebug,
"You must allocate Dynamics.");
Erm_fn_iMessageBox ("You must allocate Dynamics.","STOP",MB_OK|MB_ICONERROR);
Erm_M_ClearLastError(C_ucErmDefaultChannel);
fn_vSetStopAIEngineFlag();
#endif /* !defined(U64_AIDEBUG) */
#endif /* (defined(ACTIVE_EXEC_CHECKING) && defined(ACTIVE_EDITOR)) || defined(ACTIVE_AIDEBUG) */
*p_lValue = FALSE;
return(p_stTree);
}
pstDynamic = fn_p_stDynamGetDynamics(h_Dynam);
switch ( eCondId )
{
#if !defined(_AI_EXCLUDE_NEVER_USED_) /* MT {*/
case eCond_IsMechanicAnimation :
bOption=DNM_M_bDynamicsIsAnimation (pstDynamic);
break;
case eCond_IsMechanicCollide :
bOption=DNM_M_bDynamicsIsCollide (pstDynamic);
break;
case eCond_IsMechanicGravity :
bOption=DNM_M_bDynamicsIsGravity (pstDynamic);
break;
case eCond_IsMechanicTilt :
bOption=DNM_M_bDynamicsIsTilt (pstDynamic);
break;
case eCond_IsMechanicGi :
bOption=DNM_M_bDynamicsIsGi (pstDynamic);
break;
case eCond_IsMechanicClimb :
bOption=DNM_M_bDynamicsIsClimb (pstDynamic);
break;
case eCond_IsMechanicOnGround :
bOption=DNM_M_bDynamicsIsOnGround (pstDynamic);
break;
case eCond_IsMechanicSpider :
bOption=DNM_M_bDynamicsIsSpider (pstDynamic);
break;
case eCond_IsMechanicShoot :
bOption=DNM_M_bDynamicsIsShoot (pstDynamic);
break;
case eCond_IsMechanicSwim :
bOption=DNM_M_bDynamicsIsShoot (pstDynamic);
break;
case eCond_IsMechanicNeverFall :
bOption=DNM_M_bDynamicsIsNeverFall (pstDynamic);
break;
case eCond_IsMechanicCollisionControl:
bOption=DNM_M_bDynamicsIsCollisionControl (pstDynamic);
break;
case eCond_IsMechanicKeepSpeedZ:
bOption=DNM_M_bDynamicsIsKeepWallSpeedZ (pstDynamic);
break;
case eCond_IsMechanicSpeedLimit:
bOption=DNM_M_bDynamicsIsSpeedLimit (pstDynamic);
break;
case eCond_IsMechanicInertia:
bOption=DNM_M_bDynamicsIsInertia (pstDynamic);
break;
#endif /* _AI_EXCLUDE_NEVER_USED_ }*/
case eCond_IsMechanicStream:
bOption=DNM_M_bDynamicsIsStream (pstDynamic);
break;
#if !defined(_AI_EXCLUDE_NEVER_USED_) /* MT {*/
case eCond_IsMechanicStickOnPlatform:
bOption=DNM_M_bDynamicsIsStickOnPlatform (pstDynamic);
break;
case eCond_IsMechanicPatformCrash:
bOption=DNM_M_bDynamicsIsPlatformCrash (pstDynamic);
break;
#endif /* _AI_EXCLUDE_NEVER_USED_ }*/
case eCond_CanFall:
/* if true, we store the fall direction in the specified vector dsgvar*/
if ( (bOption = DNM_M_bDynamicsIsCanFall (pstDynamic)) != 0 ) /*VOLUNTARY ASSIGNMENT!!!*/
{
tdstGetSetParam stParam;
AI_tdstMind *p_stMind; /* Mind of the dsgvar owning perso (used to return paramaters to dsgVars)*/
unsigned char ucVectorId; /* id of the vector dsgvar*/
/* get the vector identification in the argument*/
M_vEvalNextVarId(p_stMind, ucVectorId);
/*put the vector found in the mechanics into the dsgvar*/
M_GetSetParam_stVertexValue(&stParam) = *DNM_M_pDynamicsGetFallTranslation(pstDynamic);
M_GetSetParam_Type(&stParam) = E_vt_Vector;
ucVectorId = fn_ucSetDsgVar(ucVectorId, 0, p_stMind, &stParam);
SAF_M_AssertWithMsg(ucVectorId != C_INVALID_SET, "L'argument n'est pas de type vecteur!");
}
else /* no need to store the vector -> do not evaluate its id*/
p_stTree = fn_p_stSkipThisArgument(p_stTree);
break;
case eCond_IsGiBlock:
case eCond_IsMechanicBlock:
bOption=DNM_M_bDynamicsIsStop (pstDynamic);
DNM_M_vDynamicsSetStop (pstDynamic,FALSE);
break;
#if !defined(_AI_EXCLUDE_NEVER_USED_) /* MT {*/
case eCond_IsMechanicScale:
bOption = DNM_M_bDynamicsIsScale (pstDynamic);
break;
case eCond_IsMechanicExec:
bOption = DNM_M_bDynamicsIsExec (pstDynamic);
DNM_M_vDynamicsSetExec (pstDynamic,FALSE);
break;
#endif /* _AI_EXCLUDE_NEVER_USED_ }*/
case eCond_IsMechanicCrash:
bOption = DNM_M_bDynamicsIsCrash (pstDynamic);
break;
default:
bOption = FALSE;
break;
}
*p_lValue = bOption ? TRUE : FALSE;
return(p_stTree);
}
/*ANNECY CT 06/02/98{*/
/**********************************************************************
* Function: ANI_TestFinAnim *
* Function: ACT_TestFinAction *
* Use : Booleen = ANI_TestFinAnim() ou Perso.ANI_TestFinAnim() *
* Use : Booleen = ACT_TestFinAction() ou Perso.ACT_TestFinAction() *
* *
* Author : Carlos Torres *
* Date of last modification: 16/02/98 *
**********************************************************************/
tdstNodeInterpret * fn_p_stCheckAnimEnd(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, long *p_lValue) {
enum tdeCondId_ eCondId=M_eCondIdInterpret(p_stTree-1);
HIE_tdxHandleToSuperObject hNewSuperObjPerso;
/********************************************************************************/
/* BEWARE THE ULTRA OPERATOR : Must be at the beginning and respect this syntax */
/********************************************************************************/
fn_vGetUltraOperatorPerso(fn_ucGetConditionUltraOperator(eCondId),p_SuperObjPerso,&hNewSuperObjPerso);
if (eCondId == eCond_CheckAnimEnd) {
*p_lValue=PLA_fn_bTestIfEndOfAnim(hNewSuperObjPerso);
return (p_stTree);
}
else if (eCondId == eCond_CheckActionEnd) {
*p_lValue=PLA_fn_bTestIfEndOfAction(hNewSuperObjPerso);
return (p_stTree);
}
M_AIFatalError(E_uwAIFatalNotValidCondition);
return(p_stTree);
}
/*ENDANNECY CT}*/
/**********************************************************************
* Condition: HIER_EstFils_acteur ( toto ) *
* true if actor is a son of toto *
* Author : Jacques Th<54>noz *
* Date of last modification: 10/02/98 *
**********************************************************************/
tdstNodeInterpret *fn_p_stHierarchySon (HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, long *p_lValue)
{
tdstGetSetParam stParam;
HIE_tdxHandleToSuperObject hNewSuperObjPerso;
HIE_tdxHandleToSuperObject hFather;
HIE_tdxHandleToSuperObject hChild;
int i;
struct DNM_stDynamics* pstDynamic;
MS_tdxHandleToDynam h_Dynam;
enum tdeCondId_ eCondId = M_eCondIdInterpret(p_stTree-1);
/********************************************************************************/
/* BEWARE THE ULTRA OPERATOR : Must be at the beginning and respect this syntax */
/********************************************************************************/
fn_vGetUltraOperatorPerso(fn_ucGetConditionUltraOperator(eCondId),p_SuperObjPerso,&hNewSuperObjPerso);
*p_lValue = FALSE;
M_EvalNextParameter( &stParam );
hFather = (HIE_tdxHandleToSuperObject) M_GetSetParam_p_stSupObjValue( &stParam );
SAF_M_AssertWithMsg(hFather, "l'acteur sp<73>cifi<66> est nul");
h_Dynam = M_GetMSHandle(hNewSuperObjPerso,Dynam);
if (h_Dynam)
{
pstDynamic = fn_p_stDynamGetDynamics(h_Dynam);
if (DNM_M_bDynamicsIsComplexSize(pstDynamic))
{
if (DNM_M_hDynamicsGetPlatformSO(pstDynamic)==hFather) *p_lValue = TRUE;
return p_stTree;
}
}
HIE_M_ForEachChildOf (hFather,hChild,i)
{
if (hChild==hNewSuperObjPerso)
{
*p_lValue = TRUE;
return p_stTree;
}
}
return(p_stTree);
}
/*ANNECY Bart#01 13/02/98 {*/
/*
----------------------------------------------------------------------------------------
Description : *fn_p_stCheckCapabilities
p_SuperObjPerso ->
p_stTree ->
p_lValue ->
Returns (tdstNodeInterpret )
----------------------------------------------------------------------------------------
Author : Fred 'Bart#01' Compagnon
Date : 13/02/98
----------------------------------------------------------------------------------------
*/
tdstNodeInterpret *fn_p_stCheckCapabilities(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, long *p_lValue)
{
enum tdeCondId_ eCondId = M_eCondIdInterpret(p_stTree-1);
tdstGetSetParam stParam;
unsigned long ubf32CapabilityToTest = 0;
unsigned long ubf32BitOfCapability = 0;
unsigned char ucBitNumber;
struct tdstEngineObject_ * hEngineObj; /* there's no "tdhEngineObject" ? ? ? ? ? ? ! ! !*/
/********************************************************************************/
/* BEWARE THE ULTRA OPERATOR : Must be at the beginning and respect this syntax */
/********************************************************************************/
HIE_tdxHandleToSuperObject hNewSuperObjPerso;
fn_vGetUltraOperatorPerso(fn_ucGetConditionUltraOperator(eCondId),p_SuperObjPerso,&hNewSuperObjPerso);
*p_lValue = FALSE;
switch(eCondId)
{
case eCond_HasTheCapability:
#if !defined(_AI_EXCLUDE_NEVER_USED_) /* MT {*/
case eCond_HasOneOfTheCapabilities:
#endif /* _AI_EXCLUDE_NEVER_USED_ }*/
{
M_EvalNextParameter(&stParam);
ubf32CapabilityToTest = M_GetSetParam_CapsValue(&stParam);
M_EvalNextParameter(&stParam);
ubf32BitOfCapability = M_GetSetParam_CapsValue(&stParam);
break;
}
case eCond_HasTheCapabilityNumber:
{
M_EvalNextParameter(&stParam);
ubf32CapabilityToTest = M_GetSetParam_CapsValue(&stParam);
M_EvalNextParameter(&stParam);
ucBitNumber = (unsigned char) M_GetSetParam_lValue(&stParam);
if (ucBitNumber >= 32)
{
return(p_stTree); /* *p_lValue = FALSE;*/
break;
}
ubf32BitOfCapability = 1<<ucBitNumber;
break;
}
#if !defined(_AI_EXCLUDE_NEVER_USED_) /* MT {*/
case eCond_PersoHasTheCapability:
case eCond_PersoHasOneOfTheCapabilities:
{
/* get perso capacity */
hEngineObj = M_GetEngineObject(hNewSuperObjPerso);
ubf32CapabilityToTest = fn_ulGetCapabilities(hEngineObj);
M_EvalNextParameter(&stParam);
ubf32BitOfCapability = M_GetSetParam_CapsValue(&stParam);
break;
}
case eCond_PersoHasTheCapabilityNumber:
{
/* get perso capacity */
hEngineObj = M_GetEngineObject(hNewSuperObjPerso);
ubf32CapabilityToTest = fn_ulGetCapabilities(hEngineObj);
M_EvalNextParameter(&stParam);
ucBitNumber = (unsigned char) M_GetSetParam_lValue(&stParam);
if (ucBitNumber >= 32)
{
return(p_stTree); /* *p_lValue = FALSE;*/
break;
}
ubf32BitOfCapability = 1<<ucBitNumber;
break;
}
#endif /* _AI_EXCLUDE_NEVER_USED_ }*/
default:
break;
}
#if !defined(_AI_EXCLUDE_NEVER_USED_) /* MT {*/
if ( (eCondId == eCond_HasOneOfTheCapabilities) || (eCondId == eCond_PersoHasOneOfTheCapabilities) )
*p_lValue = ((ubf32CapabilityToTest & ubf32BitOfCapability) != 0);
else
#endif /* _AI_EXCLUDE_NEVER_USED_ }*/
*p_lValue = ((ubf32CapabilityToTest & ubf32BitOfCapability) == ubf32BitOfCapability);
return(p_stTree);
}
/*ENDANNECY Bart#01 }*/
/*ANNECY CT 02/03/98{*/
/**********************************************************************
* Function: ACT_EstActif *
* Use : Booleen = ACT_EstActif(perso) *
* *
* Author : Carlos Torres *
* Date of last modification: 04/03/98 *
**********************************************************************/
tdstNodeInterpret * fn_p_stIsPersoActive(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, long *p_lValue)
{
/* enum tdeCondId_ eCondId=M_eCondIdInterpret(p_stTree-1);
if (eCondId == eCond_IsPersoActive)
{
*/
tdstGetSetParam stParam;
M_EvalNextParameter(&stParam);
if ( M_GetSetParam_p_stEngineObjValue(&stParam)->h_StandardGame )
{
p_SuperObjPerso = M_GetSetParam_p_stSupObjValue(&stParam);
SAF_M_AssertWithMsg(p_SuperObjPerso, "l'acteur sp<73>cifi<66> est nul");
*p_lValue = GAM_fn_bIsCharacterActive(p_SuperObjPerso);
}
else
*p_lValue = 0; /* when actor is an always, its MS pointers are cleard when is is destroyed*/
return (p_stTree);
/* }
M_AIFatalError(E_uwAIFatalNotValidCondition);
return(p_stTree);
*/
}
/*ENDANNECY CT}*/
/**********************************************************************
* Condition: ACT_NEstPasEnCollisionAvecMap () *
* Condition: ACT_NEstPasEnCollisionAvecProjectiles () *
* Condition: ACT_NEstPasEnCollisionAvecActeursSecondaires () *
* Condition: ACT_NEstPasEnCollisionAvecActeurPrincipal () *
* true according Collision Flag in CollisionSet MS *
* *
* Author : Marc Trabucato *
* Date of last modification: 17/03/98 *
**********************************************************************/
#if !defined(_AI_EXCLUDE_NEVER_USED_) /* MT {*/
tdstNodeInterpret *fn_p_stIsCollisionFlag (HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, long *p_lValue)
{
HIE_tdxHandleToSuperObject hNewSuperObjPerso;
enum tdeCondId_ eCondId = M_eCondIdInterpret(p_stTree-1);
MS_tdxHandleToCollSet hCollSet;
/********************************************************************************/
/* BEWARE THE ULTRA OPERATOR : Must be at the beginning and respect this syntax */
/********************************************************************************/
fn_vGetUltraOperatorPerso(fn_ucGetConditionUltraOperator(eCondId),p_SuperObjPerso,&hNewSuperObjPerso);
hCollSet = M_GetMSHandle(hNewSuperObjPerso,CollSet);
switch( eCondId )
{
case eCond_NEstPasEnCollisionAvecMap:
*p_lValue = fn_bCollSetGetCharacterNoCollisionWithMap( hCollSet );
break;
case eCond_NEstPasEnCollisionAvecProjectile:
*p_lValue = fn_bCollSetGetCharacterNoCollisionWithProjectile( hCollSet );
break;
case eCond_NEstPasEnCollisionAvecSecondCharact:
*p_lValue = fn_bCollSetGetCharacterNoCollisionWithSecondaryCharacter( hCollSet );
break;
case eCond_NEstPasEnCollisionAvecMainCharact:
*p_lValue = fn_bCollSetGetCharacterNoCollisionWithMainCharacter( hCollSet );
break;
case eCond_NEstPasEnCollisionAvecAutresSecteurs:
*p_lValue = fn_bCollSetGetCharacterNoCollisionWithOtherSectors( hCollSet );
break;
default:
break;
}
return(p_stTree);
}
#endif /* _AI_EXCLUDE_NEVER_USED_ }*/
/**********************************************************************
* Function: ACT_EstDe *
* Use : Booleen = ULTRA.ACT_EstDeFamille(Famille) *
* Use : Booleen = ULTRA.ACT_EstDeModele(Modele) *
* *
* Author : Yann Le Guyader *
* Date of last modification: 24/03/98 *
**********************************************************************/
tdstNodeInterpret * fn_p_stIsOf(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, long *p_lValue) {
enum tdeCondId_ eCondId=M_eCondIdInterpret(p_stTree-1);
HIE_tdxHandleToSuperObject hNewSuperObjPerso;
tdstGetSetParam stParam;
/********************************************************************************/
/* BEWARE THE ULTRA OPERATOR : Must be at the beginning and respect this syntax */
/********************************************************************************/
fn_vGetUltraOperatorPerso(fn_ucGetConditionUltraOperator(eCondId),p_SuperObjPerso,&hNewSuperObjPerso);
M_EvalNextParameter(&stParam);
switch( eCondId )
{
case eCond_IsInFamily:
{
*p_lValue=(fn_h3dDataGetFamily(M_GetMSHandle(hNewSuperObjPerso,3dData)) == M_GetSetParam_hFamily(&stParam));
return (p_stTree);
break;
}
case eCond_IsInModel:
{
MS_tdxHandleToBrain hBrain = M_GetMSHandle(hNewSuperObjPerso,Brain);
*p_lValue=(
hBrain
&& (AI_M_p_stGetAIModel(M_pstGetMindOfBrain(hBrain)) == M_GetSetParam_p_stModel(&stParam))
);
return (p_stTree);
break;
}
default:
break;
}
M_AIFatalError(E_uwAIFatalNotValidCondition);
return(p_stTree);
}
/**********************************************************************
* Function: IPT_AJoypadIsConnected
**********************************************************************/
#if !defined(_AI_EXCLUDE_NEVER_USED_) /* MT 07/06/99 { */
tdstNodeInterpret * fn_p_stAJoypadIsConnected(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, long *p_lValue)
{
#ifdef USE_IPT_DX5
*p_lValue= IPT_fn_bIsJoystickControlAvailable();
#else /* USE_IPT_WIN */
*p_lValue= IPT_fn_bAJoypadConnected();
#endif /* USE_IPT_WIN */
return(p_stTree);
}
#endif /* _AI_EXCLUDE_NEVER_USED_ } */
/**********************************************************************
* Function: IPT_AKeyJustPressed
**********************************************************************/
tdstNodeInterpret * fn_p_stAKeyJustPressed(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, long *p_lValue)
{
/* LOL*/
#ifndef U64
*p_lValue= IPT_fn_bAKeyJustPressed();
#else
M_PrintfStopErrorN64(("Condition fn_p_stAKeyJustPressed invalidate for N64"));
#endif
return(p_stTree);
}
/**********************************************************************
* Function: IPT_AButtonPadJustPressed
**********************************************************************/
tdstNodeInterpret * fn_p_stAButtonPadJustPressed(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, long *p_lValue)
{
*p_lValue= IPT_fn_bAButtonPadJustPressed();
return(p_stTree);
}
/*HP 101298*/
/**********************************************************************
* Function fn_p_stDemoCondition
**********************************************************************/
tdstNodeInterpret * fn_p_stDemoCondition(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, long *p_lValue)
{
*p_lValue=g_stEngineStructure.xDemoMode;
return(p_stTree);
}
/**********************************************************************
* Function fn_p_stIsStereoMode
* Parameters:
* Return TRUE if stereo
**********************************************************************/
tdstNodeInterpret * fn_p_stIsInStereoMode(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, long *p_lValue)
{
*p_lValue = SND_fn_bGetStereoSound();
return(p_stTree);
}
/**********************************************************************
* Function fn_p_stMusicPlaying
* Parameters:
* Return TRUE if there's a music now playing
**********************************************************************/
tdstNodeInterpret * fn_p_stIsMusicPlaying(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, long *p_lValue)
{
*p_lValue = SND_fn_bIsMusicPlayingSound();
return(p_stTree);
}
/**********************************************************************
* Function fn_p_stIsIsShapnessMax
**********************************************************************/
#ifdef U64
extern unsigned char g_bSharpnessValue;
extern char g_bMustSwitchResolution;
extern int SCREEN_WD;
tdstNodeInterpret * fn_p_stIsIsShapnessMax(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, long *p_lValue)
{
if (((SCREEN_WD==300) || (g_bMustSwitchResolution == 1)) && (g_bMustSwitchResolution != 2))
{
*p_lValue = g_bSharpnessValue;
}
else
{
*p_lValue = 1;
}
return(p_stTree);
}
#endif
tdstNodeInterpret *fn_p_stIsSlotDataCorrupt(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, long *p_lValue)
{
*p_lValue = 0;
return (p_stTree);
}
tdstNodeInterpret *fn_p_stIsCheatMenu(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, long *p_lValue)
{
*p_lValue = 0;
return (p_stTree);
}
tdstNodeInterpret *fn_p_stIsUSBuild(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, long *p_lValue)
{
*p_lValue = TRUE;
return (p_stTree);
}

View File

@@ -0,0 +1,285 @@
#if defined(_AI_LIB_)
#include "AIUseCPA.h"
#include "specif/AIOption.h"
#include "AIMacros.h"
#include "AI_Erm.h"
#include "Convert.h"
#include "EnumAct.h"
#if defined(OPTIMIZED_COMMAND)
#include "ProtAct.h"
#endif
#else
#include <string.h>
#include "specif/AIOption.h"
#include "ConvCst.h"
#include "EnumAct.h"
#include "ConvAct.h"
#endif /* _AI_LIB_ */
#define C_MAX_SIZE_META_ACTION_SCRIPT_NAME 37
#define C_MAX_SIZE_META_ACTION_EDITOR_NAME 80
#define C_MAX_NB_META_ACTION_PARAM C_MAX_NB_PARAM
typedef struct tdstMetaActionEntry_
{
#if defined(ACTIVE_EDITOR)
/* metaaction string used in editor*/
char szMetaActionEditorName[C_MAX_SIZE_META_ACTION_EDITOR_NAME+1];
char szMetaActionEditorName_En[C_MAX_SIZE_META_ACTION_EDITOR_NAME+1];
#endif /* ACTIVE_EDITOR*/
#if defined (AI_USE_SCRIPT)
/* metaaction string used in script*/
char szMetaActionScriptName[C_MAX_SIZE_META_ACTION_SCRIPT_NAME+1];
#endif /* AI_USE_SCRIPT */
#if defined(_AI_LIB_)
/* pointer on metaaction INIT function*/
tdp_fn_p_stMetaActionInitFunctionPtr p_fn_p_stMetaActionInitFunction;
/* pointer on metaaction NEXT function*/
tdp_fn_ucMetaActionFunctionPtr p_fn_ucMetaActionFunction;
#endif /* _AI_LIB_*/
/* list of metaaction parameters (taken from szAutorizedTypeParam)*/
char szMetaActionTypeParam[C_MAX_NB_META_ACTION_PARAM+1];
} tdstMetaActionEntry;
tdstMetaActionEntry a_stMetaActionTable[eNbMetaAction]
#if defined(OPTIMIZED_COMMAND)
=
{
/* Procedure initialisation*/
#if defined (AI_USE_SCRIPT)
#if defined(_AI_LIB_)
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_METAACTION(a,b,english,c,d,e,f) { b,english,c,d,e,f },
#else
#define M_DEFINE_METAACTION(a,b,english,c,d,e,f) { c,d,e,f },
#endif /* ACTIVE_EDITOR*/
#else
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_METAACTION(a,b,english,c,d,e,f) { b,english,c,f },
#else
#define M_DEFINE_METAACTION(a,b,english,c,d,e,f) { c,f },
#endif /* ACTIVE_EDITOR*/
#endif /* _AI_LIB_*/
#else /* AI_USE_SCRIPT */
#if defined(_AI_LIB_)
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_METAACTION(a,b,english,c,d,e,f) { b,english,d,e,f },
#else
#define M_DEFINE_METAACTION(a,b,english,c,d,e,f) { d,e,f },
#endif /* ACTIVE_EDITOR*/
#else
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_METAACTION(a,b,english,c,d,e,f) { b,english,f },
#else
#define M_DEFINE_METAACTION(a,b,english,c,d,e,f) { f },
#endif /* ACTIVE_EDITOR*/
#endif /* _AI_LIB_*/
#endif /* AI_USE_SCRIPT */
#include "DefAct.h"
#undef M_DEFINE_METAACTION
}
#endif /* OPTIMIZED_COMMAND*/
;
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
enum tdeMetaActionId_ fn_eGetNbMetaAction()
{
return(eNbMetaAction);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
char *szGetMetaActionTypeInParamFromId(enum tdeMetaActionId_ eMetaActionId)
{
return( a_stMetaActionTable[eMetaActionId].szMetaActionTypeParam);
}
#if defined(ACTIVE_EDITOR)
char *szGetMetaActionTypeOutParamFromId(enum tdeMetaActionId_ eMetaActionId)
{
eMetaActionId=eMetaActionId; /* for lint*/
return(USE_NO_PARAM);
}
char *szGetMetaActionTypeParamFromId(enum tdeMetaActionId_ eMetaActionId)
{
return( a_stMetaActionTable[eMetaActionId].szMetaActionTypeParam);
}
enum tdeMetaActionId_ fn_eFindMetaActionIdFromEditorName(char *szMetaAction)
{
short wActionEntry;
for(wActionEntry=0;wActionEntry<fn_eGetNbMetaAction();wActionEntry++)
{
if (!stricmp(a_stMetaActionTable[wActionEntry].szMetaActionEditorName,szMetaAction))
{
return((enum tdeMetaActionId_) wActionEntry);
}
}
return(fn_eGetNbMetaAction());
}
char *szFindMetaActionEditorNameFromId(enum tdeMetaActionId_ eMetaActionId)
{
return( a_stMetaActionTable[eMetaActionId].szMetaActionEditorName);
}
#endif /* ACTIVE_EDITOR*/
#if defined (AI_USE_SCRIPT)
char *szFindMetaActionScriptNameFromId(enum tdeMetaActionId_ eMetaActionId)
{
return( a_stMetaActionTable[eMetaActionId].szMetaActionScriptName);
}
enum tdeMetaActionId_ fn_eFindMetaActionIdFromScriptName(char *szMetaAction)
{
short wActionEntry;
for(wActionEntry=0;wActionEntry<fn_eGetNbMetaAction();wActionEntry++)
{
if (!stricmp(a_stMetaActionTable[wActionEntry].szMetaActionScriptName,szMetaAction))
{
return((enum tdeMetaActionId_) wActionEntry);
}
}
return(fn_eGetNbMetaAction());
}
#endif /* AI_USE_SCRIPT */
#if defined(_AI_LIB_)
tdp_fn_p_stMetaActionInitFunctionPtr fn_p_fn_pGetMetaActionInitFunctionPtr(enum tdeMetaActionId_ eMetaActionId)
{
return(a_stMetaActionTable[eMetaActionId].p_fn_p_stMetaActionInitFunction);
}
tdp_fn_ucMetaActionFunctionPtr fn_p_fn_pGetMetaActionFunctionPtr(enum tdeMetaActionId_ eMetaActionId)
{
return(a_stMetaActionTable[eMetaActionId].p_fn_ucMetaActionFunction);
}
#endif /* _AI_LIB_*/
/***************************************************************************************/
/* -------------------------*/
/* fn_vDefineMetaActionEntry*/
/* -------------------------*/
/* eMetaActionId : MetaAction identifier*/
/* szMetaActionEditorName : MetaAction string in Editor*/
/* szMetaActionScriptName : MetaAction string in Script*/
/* p_fn_p_stMetaActionInitFunction : function pointer on your INIT function*/
/* p_fn_ucMetaActionFunction : function pointer on your NEXT function*/
/* szMetaActionTypeParam : string of MetaActionParameters (cf szAutorizedTypeParam)*/
/***************************************************************************************/
#if !defined(OPTIMIZED_COMMAND)
#if defined(ACTIVE_EDITOR)
void fn_vDefineMetaActionEntry(enum tdeMetaActionId_ eMetaActionId,char *szMetaActionEditorName,char *szMetaActionEditorName_En,char *szMetaActionScriptName,tdp_fn_p_stMetaActionInitFunctionPtr p_fn_p_stMetaActionInitFunction,tdp_fn_ucMetaActionFunctionPtr p_fn_ucMetaActionFunction,char *szMetaActionTypeParam)
#else
void fn_vDefineMetaActionEntry(enum tdeMetaActionId_ eMetaActionId,char *szMetaActionScriptName,tdp_fn_p_stMetaActionInitFunctionPtr p_fn_p_stMetaActionInitFunction,tdp_fn_ucMetaActionFunctionPtr p_fn_ucMetaActionFunction,char *szMetaActionTypeParam)
#endif /* ACTIVE_EDITOR*/
{
if (
(eMetaActionId<fn_eGetNbMetaAction())
#if defined(ACTIVE_EDITOR)
&&(strlen(szMetaActionEditorName)<=C_MAX_SIZE_META_ACTION_EDITOR_NAME)
#endif /* ACTIVE_EDITOR*/
&&(strlen(szMetaActionScriptName)<=C_MAX_SIZE_META_ACTION_SCRIPT_NAME)
&&(strlen(szMetaActionTypeParam)<=C_MAX_NB_META_ACTION_PARAM)
&&(fn_ucCheckTypeParam(szMetaActionTypeParam))
)
{
#if defined(ACTIVE_EDITOR)
strcpy(a_stMetaActionTable[eMetaActionId].szMetaActionEditorName,szMetaActionEditorName);
#endif /* ACTIVE_EDITOR*/
strcpy(a_stMetaActionTable[eMetaActionId].szMetaActionScriptName,szMetaActionScriptName);
a_stMetaActionTable[eMetaActionId].p_fn_p_stMetaActionInitFunction=p_fn_p_stMetaActionInitFunction;
a_stMetaActionTable[eMetaActionId].p_fn_ucMetaActionFunction=p_fn_ucMetaActionFunction;
strcpy(a_stMetaActionTable[eMetaActionId].szMetaActionTypeParam,szMetaActionTypeParam);
}
else
{
char str[C_MAX_LENGTH_STRING];
sprintf(str,"Error while defining %s metaaction in %s\n",a_stMetaActionTable[eMetaActionId].szMetaActionScriptName,__FILE__);
M_AIFatalErrorMsg(E_uwAIFatalInvalidAction,str);
}
}
#endif /* OPTIMIZED_COMMAND*/
#if !defined(OPTIMIZED_COMMAND)
#if defined(__DEBUG_AI__)
void fn_vInitMetaActionTable(tdp_fn_p_stMetaActionInitFunctionPtr fn_p_stDefaultActionInitFunctionPointer,tdp_fn_ucMetaActionFunctionPtr fn_ucDefaultActionFunctionPointer)
{
short wActionEntry;
for(wActionEntry=0;wActionEntry<fn_eGetNbMetaAction();wActionEntry++)
{
fn_vDefineMetaActionEntry(M_METAACTION_ENTRY((enum tdeMetaActionId_) wActionEntry,"","","",fn_p_stDefaultActionInitFunctionPointer,fn_ucDefaultActionFunctionPointer,USE_NO_PARAM));
}
}
void fn_vCheckMetaActionTable(tdp_fn_p_stMetaActionInitFunctionPtr fn_p_stDefaultActionInitFunctionPointer,tdp_fn_ucMetaActionFunctionPtr fn_ucDefaultActionFunctionPointer)
{
short wActionEntry;
char str[C_MAX_LENGTH_STRING];
size_t lLen;
size_t lMaxLengthScriptName=0;
#if defined(ACTIVE_EDITOR)
size_t lMaxLengthEditorName=0;
#endif /* ACTIVE_EDITOR*/
size_t lMaxLengthParam=0;
for(wActionEntry=0;wActionEntry<fn_eGetNbMetaAction();wActionEntry++)
{
fn_p_stDefaultActionInitFunctionPointer=fn_p_stDefaultActionInitFunctionPointer;
if ( /*(fn_p_fn_pGetMetaActionInitFunctionPtr((enum tdeMetaActionId_) wActionEntry)==fn_p_stDefaultActionInitFunctionPointer) ||*/
(fn_p_fn_pGetMetaActionFunctionPtr((enum tdeMetaActionId_) wActionEntry)==fn_ucDefaultActionFunctionPointer)
)
{
sprintf(str,"Error while defining %s metaaction in %s\n",a_stMetaActionTable[wActionEntry].szMetaActionScriptName,__FILE__);
M_AIFatalErrorMsg(E_uwAIFatalInvalidAction,str);
}
if ((lLen=strlen(a_stMetaActionTable[wActionEntry].szMetaActionScriptName))>lMaxLengthScriptName)
{
lMaxLengthScriptName=lLen;
}
#if defined(ACTIVE_EDITOR)
if ((lLen=strlen(a_stMetaActionTable[wActionEntry].szMetaActionEditorName))>lMaxLengthEditorName)
{
lMaxLengthEditorName=lLen;
}
#endif /* ACTIVE_EDITOR*/
if ((lLen=strlen(a_stMetaActionTable[wActionEntry].szMetaActionTypeParam))>lMaxLengthParam)
{
lMaxLengthParam=lLen;
}
}
#if !defined(U64)
{
if (lMaxLengthScriptName<C_MAX_SIZE_META_ACTION_SCRIPT_NAME)
{
sprintf(str,"*** AI : You should reduce C_MAX_SIZE_META_ACTION_SCRIPT_NAME in %s to %d\n",__FILE__,lMaxLengthScriptName);
OutputDebugString(str);
}
#if defined(ACTIVE_EDITOR)
if (lMaxLengthEditorName<C_MAX_SIZE_META_ACTION_EDITOR_NAME)
{
sprintf(str,"*** AI : You should reduce C_MAX_SIZE_META_ACTION_EDITOR_NAME in %s to %d\n",__FILE__,lMaxLengthEditorName);
OutputDebugString(str);
}
#endif /* ACTIVE_EDITOR*/
if (lMaxLengthParam<C_MAX_NB_META_ACTION_PARAM)
{
sprintf(str,"*** AI : You should reduce C_MAX_NB_META_ACTION_PARAM in %s to %d\n",__FILE__,lMaxLengthParam);
OutputDebugString(str);
}
}
#endif /* U64*/
}
#endif /* __DEBUG_AI__*/
#endif /* OPTIMIZED_COMMAND*/

View File

@@ -0,0 +1,384 @@
#if defined(_AI_LIB_)
#include "AIUseCPA.h"
#include "specif/AIOption.h"
#include "AIMacros.h"
#include "AI_Erm.h"
#include "Convert.h"
#include "EnumCond.h"
#if defined(OPTIMIZED_COMMAND)
#include "ProtCond.h"
#endif
#else
#include <string.h>
#include "specif/AIOption.h"
#include "ConvCst.h"
#include "EnumCond.h"
#include "ConvCond.h"
#endif /* _AI_LIB_*/
#define C_MAX_SIZE_CONDITION_EDITOR_NAME 50
#define C_MAX_SIZE_CONDITION_SCRIPT_NAME 40
#define C_MAX_CONDITION_NB_PARAM 4
typedef struct tdstConditionEntry_
{
#if defined(ACTIVE_EDITOR)
/* Condition string used in editor*/
char szConditionEditorName[C_MAX_SIZE_CONDITION_EDITOR_NAME+1];
char szConditionEditorName_En[C_MAX_SIZE_CONDITION_EDITOR_NAME+1];
#endif /* ACTIVE_EDITOR*/
#if defined (AI_USE_SCRIPT)
/* Condition string used in script*/
char szConditionScriptName[C_MAX_SIZE_CONDITION_SCRIPT_NAME+1];
#endif /* AI_USE_SCRIPT */
#if defined(_AI_LIB_)
/* pointer on Condition function*/
tdp_fn_p_stConditionFunctionPtr p_fn_p_stConditionFunction;
#endif /* _AI_LIB_*/
#if defined (AI_USE_SCRIPT) || defined (U64_AIDEBUG)
/* list of Condition parameters (taken from szAutorizedTypeParam) in parameter*/
char szConditionTypeInParam[C_MAX_CONDITION_NB_PARAM+1];
#endif /* AI_USE_SCRIPT */
unsigned char bUltraCondtionFlag;
#ifdef PROFILE_IA
unsigned long ulCallCtr;
unsigned long ulTimeCtr;
unsigned long ulOwnTimeCtr;
#endif /* PROFILE_IA*/
} tdstConditionEntry;
#ifdef PROFILE_IA
extern unsigned long ulIndice;
extern unsigned long p_ulTime[255];
extern FILE *file;
#endif /* PROFILE_IA*/
tdstConditionEntry a_stConditionTable[eNbCond]
#if defined(OPTIMIZED_COMMAND)
=
{
#ifdef U64_AIDEBUG
/* function pointers in DefCond.c, in params,ultra-able*/
#define M_DEFINE_CONDITION(a,b,english,c,d,e,f) { d,e,f },
#include "DefCond.h"
}
#else /* U64_AIDEBUG*/
/* Conditions initialisation*/
#if defined (AI_USE_SCRIPT)
#if defined(_AI_LIB_)
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_CONDITION(a,b,english,c,d,e,f) { b,english,c,d,e,f },
#else
#define M_DEFINE_CONDITION(a,b,english,c,d,e,f) { c,d,e,f },
#endif /* ACTIVE_EDITOR*/
#else
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_CONDITION(a,b,english,c,d,e,f) { b,english,c,e,f },
#else
#define M_DEFINE_CONDITION(a,b,english,c,d,e,f) { c,e,f },
#endif /* ACTIVE_EDITOR*/
#endif
#include "DefCond.h"
#undef M_DEFINE_CONDITION
}
#else /* AI_USE_SCRIPT */
#if defined(_AI_LIB_)
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_CONDITION(a,b,english,c,d,e,f) { b,english,d,f },
#else
#define M_DEFINE_CONDITION(a,b,english,c,d,e,f) { d,f },
#endif /* ACTIVE_EDITOR*/
#else
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_CONDITION(a,b,english,c,d,e,f) { b,english,f },
#else
#define M_DEFINE_CONDITION(a,b,english,c,d,e,f) { f },
#endif /* ACTIVE_EDITOR*/
#endif
#include "DefCond.h"
#undef M_DEFINE_CONDITION
}
#endif /* AI_USE_SCRIPT */
#endif /* U64_AIDEBUG*/
#endif /* OPTIMIZED_COMMAND*/
;
#if ! defined(OPTIMIZED_COMMAND)
void fn_vSetConditionUltraOperator(enum tdeCondId_ eCondId,unsigned char bFlag)
{
a_stConditionTable[eCondId].bUltraCondtionFlag=bFlag;
}
#endif /* OPTIMIZED_COMMAND*/
unsigned char fn_ucGetConditionUltraOperator(enum tdeCondId_ eCondId)
{
return(a_stConditionTable[eCondId].bUltraCondtionFlag);
}
#if defined(_AI_LIB_)
tdp_fn_p_stConditionFunctionPtr fn_p_fn_pGetConditionFunctionPtr(enum tdeCondId_ eCondId)
{
return(a_stConditionTable[eCondId].p_fn_p_stConditionFunction);
}
#ifdef PROFILE_IA
void fn_vCondSaveTime(unsigned long ulTime, enum tdeCondId_ eCondId)
{
/* if level != 0, then stop time count of last function*/
if (ulIndice != 0)
{
p_ulTime[ulIndice - 1] = (ulTime - p_ulTime[ulIndice - 1]);
}
/* set time for this new function and add indice*/
p_ulTime[ulIndice++] = ulTime;
}
void fn_vCondComputeTime(unsigned long ulCurrentTime, unsigned long ulTime, enum tdeCondId_ eCondId)
{
/* compute total time for this function*/
a_stConditionTable[eCondId].ulCallCtr++;
a_stConditionTable[eCondId].ulTimeCtr += (ulCurrentTime - ulTime)/5;
/* compute own time for this function*/
ulIndice--;
/* compute the time for this function*/
a_stConditionTable[eCondId].ulOwnTimeCtr += ((ulCurrentTime - p_ulTime[ulIndice]) / 5);
p_ulTime[ulIndice] = 0;
if (ulIndice != 0)
{
/* level != 0, then restart previous function time*/
p_ulTime[ulIndice-1] = ulCurrentTime - p_ulTime[ulIndice-1];
}
}
void dumpCond()
{
int i;
char string[250];
strcpy(string,"x:\\cpa\\");
strcat(string,fn_p_szGetLevelName());
strcat(string,".txt");
file = fopen(string,"w");
if (file == NULL)
return;
fprintf(file,"name Count Time Own Time Rel Time Own Rel Time\n");
for (i=0;i<(long)eNbCond;i++)
{
if (a_stConditionTable[i].ulCallCtr)
{
fprintf(file,"%s %i %i %i %i %i\n",
a_stConditionTable[i].szConditionScriptName,
a_stConditionTable[i].ulCallCtr,
a_stConditionTable[i].ulTimeCtr,
a_stConditionTable[i].ulOwnTimeCtr,
a_stConditionTable[i].ulTimeCtr / a_stConditionTable[i].ulCallCtr,
a_stConditionTable[i].ulOwnTimeCtr / a_stConditionTable[i].ulCallCtr);
}
else
{
fprintf(file,"%s %i %i %i %i %i\n",
a_stConditionTable[i].szConditionScriptName,
0,
0,
0,
0,
0);
}
}
fclose(file);
}
void clearCond()
{
int i;
for (i=0;i<(long)eNbCond;i++)
{
a_stConditionTable[i].ulCallCtr = 0;
a_stConditionTable[i].ulTimeCtr = 0;
a_stConditionTable[i].ulOwnTimeCtr = 0;
}
ulIndice = 0;
}
#endif /* PROFILE_IA*/
#endif /* _AI_LIB_*/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
enum tdeCondId_ fn_eGetNbCond()
{
return(eNbCond);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
#if defined(__DEBUG_AI__) || defined (U64_AIDEBUG)
char *szGetConditionTypeInParamFromId(enum tdeCondId_ eCondId)
{
return(a_stConditionTable[eCondId].szConditionTypeInParam);
}
#endif /* __DEBUG_AI__*/
#if defined(ACTIVE_EDITOR)
char *szGetConditionTypeOutParamFromId(enum tdeCondId_ eCondId)
{
eCondId=eCondId;
return(USE_BOOLEAN_PARAM);
}
enum tdeCondId_ fn_eFindConditionIdFromEditorName(char *szCondition)
{
short wConditionEntry;
for(wConditionEntry=0;wConditionEntry<fn_eGetNbCond();wConditionEntry++)
{
if (!stricmp(a_stConditionTable[wConditionEntry].szConditionEditorName,szCondition))
{
return((enum tdeCondId_) wConditionEntry);
}
}
return(fn_eGetNbCond());
}
char *szFindConditionEditorNameFromId(enum tdeCondId_ eCondId)
{
return(a_stConditionTable[eCondId].szConditionEditorName);
}
#endif /* ACTIVE_EDITOR*/
#if defined (AI_USE_SCRIPT)
char *szFindConditionScriptNameFromId(enum tdeCondId_ eCondId)
{
return(a_stConditionTable[eCondId].szConditionScriptName);
}
enum tdeCondId_ fn_eFindConditionIdFromScriptName(char *szCondition)
{
short wConditionEntry;
for(wConditionEntry=0;wConditionEntry<fn_eGetNbCond();wConditionEntry++)
{
if (!stricmp(a_stConditionTable[wConditionEntry].szConditionScriptName,szCondition))
{
return((enum tdeCondId_) wConditionEntry);
}
}
return(fn_eGetNbCond());
}
#endif /* AI_USE_SCRIPT */
#if !defined(OPTIMIZED_COMMAND)
#if defined(ACTIVE_EDITOR)
void fn_vDefineConditionEntry(enum tdeCondId_ eCondId,char *szConditionEditorName,char *szConditionEditorName_En,char *szConditionScriptName,tdp_fn_p_stConditionFunctionPtr p_fn_p_stConditionFunction,char *szConditionTypeInParam)
#else
void fn_vDefineConditionEntry(enum tdeCondId_ eCondId,char *szConditionScriptName,tdp_fn_p_stConditionFunctionPtr p_fn_p_stConditionFunction,char *szConditionTypeInParam)
#endif /* ACTIVE_EDITOR*/
{
if (
(eCondId<fn_eGetNbCond())
#if defined(ACTIVE_EDITOR)
&&(strlen(szConditionEditorName)<=C_MAX_SIZE_CONDITION_EDITOR_NAME)
#endif /* ACTIVE_EDITOR*/
&&(strlen(szConditionScriptName)<=C_MAX_SIZE_CONDITION_SCRIPT_NAME)
&&(strlen(szConditionTypeInParam)<=C_MAX_CONDITION_NB_PARAM)
&&(fn_ucCheckTypeParam(szConditionTypeInParam))
)
{
#if defined(ACTIVE_EDITOR)
strcpy(a_stConditionTable[eCondId].szConditionEditorName,szConditionEditorName);
#endif /* ACTIVE_EDITOR*/
strcpy(a_stConditionTable[eCondId].szConditionScriptName,szConditionScriptName);
a_stConditionTable[eCondId].p_fn_p_stConditionFunction=p_fn_p_stConditionFunction;
strcpy(a_stConditionTable[eCondId].szConditionTypeInParam,szConditionTypeInParam);
}
else
{
char str[C_MAX_LENGTH_STRING];
sprintf(str,"Error while defining %s condition in %s\n",szConditionScriptName,__FILE__);
M_AIFatalErrorMsg(E_uwAIFatalNotValidCondition,str);
}
}
#endif /* OPTIMIZED_COMMAND*/
#if !defined(OPTIMIZED_COMMAND)
#if defined(__DEBUG_AI__)
void fn_vInitConditionTable(tdp_fn_p_stConditionFunctionPtr p_fn_p_stDefaultConditionFunctionPointer)
{
short wConditionEntry;
for(wConditionEntry=0;wConditionEntry<fn_eGetNbCond();wConditionEntry++)
{
fn_vDefineConditionEntry(M_CONDITION_ENTRY((enum tdeCondId_) wConditionEntry,"","","",p_fn_p_stDefaultConditionFunctionPointer,USE_NO_PARAM));
/* ULTRA OPERATOR USAGE : FALSE AS A DEFAULT*/
fn_vSetConditionUltraOperator((enum tdeCondId_) wConditionEntry,NOT_ULTRA_ABLE);
}
}
void fn_vCheckConditionTable(tdp_fn_p_stConditionFunctionPtr p_fn_p_stDefaultConditionFunctionPointer)
{
short wConditionEntry;
char str[C_MAX_LENGTH_STRING];
size_t lLen;
size_t lMaxLengthScriptName=0;
#if defined(ACTIVE_EDITOR)
size_t lMaxLengthEditorName=0;
#endif /* ACTIVE_EDITOR*/
size_t lMaxLengthInParam=0;
for(wConditionEntry=0;wConditionEntry<fn_eGetNbCond();wConditionEntry++)
{
if (fn_p_fn_pGetConditionFunctionPtr((enum tdeCondId_) wConditionEntry)==p_fn_p_stDefaultConditionFunctionPointer)
{
sprintf(str,"Error while defining %s condition in %s\n",a_stConditionTable[wConditionEntry].szConditionScriptName,__FILE__);
M_AIFatalErrorMsg(E_uwAIFatalNotValidCondition,str);
}
if ((lLen=strlen(a_stConditionTable[wConditionEntry].szConditionScriptName))>lMaxLengthScriptName)
{
lMaxLengthScriptName=lLen;
}
#if defined(ACTIVE_EDITOR)
if ((lLen=strlen(a_stConditionTable[wConditionEntry].szConditionEditorName))>lMaxLengthEditorName)
{
lMaxLengthEditorName=lLen;
}
#endif /* ACTIVE_EDITOR*/
if ((lLen=strlen(a_stConditionTable[wConditionEntry].szConditionTypeInParam))>lMaxLengthInParam)
{
lMaxLengthInParam=lLen;
}
}
#if !defined(U64)
{
if (lMaxLengthScriptName<C_MAX_SIZE_CONDITION_SCRIPT_NAME)
{
sprintf(str,"*** AI : You should reduce C_MAX_SIZE_CONDITION_SCRIPT_NAME in %s to %d\n",__FILE__,lMaxLengthScriptName);
OutputDebugString(str);
}
#if defined(ACTIVE_EDITOR)
if (lMaxLengthEditorName<C_MAX_SIZE_CONDITION_EDITOR_NAME)
{
sprintf(str,"*** AI : You should reduce C_MAX_SIZE_CONDITION_EDITOR_NAME in %s to %d\n",__FILE__,lMaxLengthEditorName);
OutputDebugString(str);
}
#endif /* ACTIVE_EDITOR*/
if (lMaxLengthInParam<C_MAX_CONDITION_NB_PARAM)
{
sprintf(str,"*** AI : You should reduce C_MAX_CONDITION_NB_PARAM in %s to %d\n",__FILE__,lMaxLengthInParam);
OutputDebugString(str);
}
}
#endif /* U64*/
}
#endif /* __DEBUG_AI__*/
#endif /* OPTIMIZED_COMMAND*/

View File

@@ -0,0 +1,280 @@
#if defined(_AI_LIB_)
#include "AIUseCPA.h"
#include "specif/AIOption.h"
#include "AIMacros.h"
#include "AI_Erm.h"
#include "Convert.h"
#include "EnumFild.h"
#include "VarType.h"
#include "ProtFild.h"
#else
#include <string.h>
#include "specif/AIOption.h"
#include "ConvCst.h"
#include "EnumFild.h"
#include "VarType.h"
#include "ConvFild.h"
#endif /* _AI_LIB_*/
#define C_MAX_SIZE_FIELD_SCRIPT_NAME 19
#define C_MAX_SIZE_FIELD_EDITOR_NAME 30
typedef struct tdstFieldEntry_
{
#if defined(ACTIVE_EDITOR)
char szFieldEditorName[C_MAX_SIZE_FIELD_EDITOR_NAME+1];
char szFieldEditorName_En[C_MAX_SIZE_FIELD_EDITOR_NAME+1];
#endif /* ACTIVE_EDITOR*/
#if defined (AI_USE_SCRIPT)
char szFieldScriptName[C_MAX_SIZE_FIELD_SCRIPT_NAME+1];
#endif /* AI_USE_SCRIPT */
enum tdeFieldTypeId_ eType;
#if defined(_AI_LIB_)
tdp_fn_cGetFunctionPtr p_fn_cGetFieldFunction;
tdp_fn_cSetFunctionPtr p_fn_cSetFieldFunction;
#endif /* _AI_LIB_*/
} tdstFieldEntry;
tdstFieldEntry a_stFieldTable[eNbField]
#if defined(OPTIMIZED_COMMAND)
=
{
/* Procedure initialisation */
#if defined (AI_USE_SCRIPT)
#if defined(_AI_LIB_)
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_FIELD(a,b,english,c,d,e,f) { b,english,c,d,e,f },
#else
#define M_DEFINE_FIELD(a,b,english,c,d,e,f) { c,d,e,f },
#endif /* ACTIVE_EDITOR*/
#else
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_FIELD(a,b,english,c,d,e,f) { b,english,c,d },
#else
#define M_DEFINE_FIELD(a,b,english,c,d,e,f) { c,d },
#endif /* ACTIVE_EDITOR*/
#endif
#else /* AI_USE_SCRIPT */
#if defined(_AI_LIB_)
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_FIELD(a,b,english,c,d,e,f) { b,english,d,e,f },
#else
#define M_DEFINE_FIELD(a,b,english,c,d,e,f) { d,e,f },
#endif /* ACTIVE_EDITOR*/
#else
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_FIELD(a,b,english,c,d,e,f) { b,english,d },
#else
#define M_DEFINE_FIELD(a,b,english,c,d,e,f) { d },
#endif /* ACTIVE_EDITOR*/
#endif
#endif /* AI_USE_SCRIPT */
#include "DefFild.h"
#undef M_DEFINE_FIELD
}
#endif /* OPTIMIZED_COMMAND*/
;
typedef struct tdstFieldTypeEntry_
{
enum tdeVariableType_ eType;
#if defined(_AI_LIB_)
tdp_fn_vGetTypeFunctionPtr fn_p_fn_vGetTypeFunction;
tdp_fn_vSetTypeFunctionPtr fn_p_fn_vSetTypeFunction;
#endif
} tdstFieldTypeEntry;
tdstFieldTypeEntry a_stFieldTypeTable[eNbFieldType]=
{
#if defined(_AI_LIB_)
#define M_DEFINE_FIELD_TYPE(a,b,c,d) {b,c,d},
/*#define M_DEFINE_FIELD_TYPE(a,b,c,d) {b,NULL,NULL},*/
#else
#define M_DEFINE_FIELD_TYPE(a,b,c,d) {b,},
#endif
#include "FildType.h"
#undef M_DEFINE_FIELD_TYPE
};
#if defined(_AI_LIB_)
tdp_fn_vGetTypeFunctionPtr fn_p_fn_pGetFieldTypeGetFunctionPtr(enum tdeFieldTypeId_ eFieldTypeId)
{
return(a_stFieldTypeTable[eFieldTypeId].fn_p_fn_vGetTypeFunction);
}
tdp_fn_vSetTypeFunctionPtr fn_p_fn_pGetFieldTypeSetFunctionPtr(enum tdeFieldTypeId_ eFieldTypeId)
{
return(a_stFieldTypeTable[eFieldTypeId].fn_p_fn_vSetTypeFunction);
}
#endif
enum tdeFieldTypeId_ fn_eGetEngineFieldType(enum tdeFieldId_ eFieldId)
{
return(a_stFieldTable[eFieldId].eType);
}
/*tempo //#if defined(ACTIVE_EDITOR)*/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
enum tdeVariableType_ fn_eGetFieldType(enum tdeFieldId_ eFieldId)
{
return(a_stFieldTypeTable[a_stFieldTable[eFieldId].eType].eType);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
/*#endif*/
/**/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
enum tdeFieldId_ fn_eGetNbField()
{
return(eNbField);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
#if defined (AI_USE_SCRIPT)
enum tdeFieldId_ fn_eFindFieldIdFromScriptName(char *szField)
{
short wFieldEntry;
for(wFieldEntry=0;wFieldEntry<fn_eGetNbField();wFieldEntry++)
{
if (!stricmp(a_stFieldTable[wFieldEntry].szFieldScriptName,szField))
{
return((enum tdeFieldId_) wFieldEntry);
}
}
return(fn_eGetNbField());
}
#endif /* AI_USE_SCRIPT */
#if defined(ACTIVE_EDITOR)
enum tdeFieldId_ fn_eFindFieldIdFromEditorName(char *szField)
{
short wFieldEntry;
for(wFieldEntry=0;wFieldEntry<fn_eGetNbField();wFieldEntry++)
{
if (!stricmp(a_stFieldTable[wFieldEntry].szFieldEditorName,szField))
{
return((enum tdeFieldId_) wFieldEntry);
}
}
return(fn_eGetNbField());
}
char *szFindFieldScriptNameFromId(enum tdeFieldId_ eFieldId)
{
return(a_stFieldTable[eFieldId].szFieldScriptName);
}
char *szFindFieldEditorNameFromId(enum tdeFieldId_ eFieldId)
{
return(a_stFieldTable[eFieldId].szFieldEditorName);
}
#endif /* ACTIVE_EDITOR*/
#if !defined(OPTIMIZED_COMMAND)
#if defined(ACTIVE_EDITOR)
void fn_vDefineFieldEntry(enum tdeFieldId_ eFieldId,char *szFieldEditorName,char *szFieldEditorName_En,char *szFieldScriptName,enum tdeFieldTypeId_ eType,tdp_fn_cGetFunctionPtr p_fn_cGetFieldFunction,tdp_fn_cSetFunctionPtr p_fn_cSetFieldFunction)
#else
void fn_vDefineFieldEntry(enum tdeFieldId_ eFieldId,char *szFieldScriptName,enum tdeFieldTypeId_ eType,tdp_fn_cGetFunctionPtr p_fn_cGetFieldFunction,tdp_fn_cSetFunctionPtr p_fn_cSetFieldFunction)
#endif /* ACTIVE_EDITOR*/
{
if (
(eFieldId<fn_eGetNbField())
#if defined(ACTIVE_EDITOR)
&&(strlen(szFieldEditorName)<=C_MAX_SIZE_FIELD_EDITOR_NAME)
#endif /* ACTIVE_EDITOR*/
&&(strlen(szFieldScriptName)<=C_MAX_SIZE_FIELD_SCRIPT_NAME)
&&(p_fn_cGetFieldFunction!=NULL)
&&(p_fn_cSetFieldFunction!=NULL)
)
{
#if defined(ACTIVE_EDITOR)
strcpy(a_stFieldTable[eFieldId].szFieldEditorName,szFieldEditorName);
#endif /* ACTIVE_EDITOR*/
strcpy(a_stFieldTable[eFieldId].szFieldScriptName,szFieldScriptName);
a_stFieldTable[eFieldId].p_fn_cSetFieldFunction=p_fn_cSetFieldFunction;
a_stFieldTable[eFieldId].p_fn_cGetFieldFunction=p_fn_cGetFieldFunction;
a_stFieldTable[eFieldId].eType=eType;
}
else
{
char str[C_MAX_LENGTH_STRING];
sprintf(str,"Error while defining %s field in %s\n",szFieldScriptName,__FILE__);
M_AIFatalErrorMsg(E_uwAIFatalNotValidField,str);
}
}
#endif /* OPTIMIZED_COMMAND*/
#if defined(_AI_LIB_)
tdp_fn_cGetFunctionPtr fn_p_fn_pGetFieldGetFunctionPtr(enum tdeFieldId_ eFieldId)
{
return(a_stFieldTable[eFieldId].p_fn_cGetFieldFunction);
}
tdp_fn_cSetFunctionPtr fn_p_fn_pGetFieldSetFunctionPtr(enum tdeFieldId_ eFieldId)
{
return(a_stFieldTable[eFieldId].p_fn_cSetFieldFunction);
}
#endif /* _AI_LIB_*/
#if !defined(OPTIMIZED_COMMAND)
#if defined(__DEBUG_AI__)
void fn_vInitFieldTable(tdp_fn_cGetFunctionPtr fn_cGetFieldDefaultFunctionPointer,tdp_fn_cSetFunctionPtr fn_cSetFieldDefaultFunctionPointer)
{
short wFieldEntry;
for(wFieldEntry=0;wFieldEntry<fn_eGetNbField();wFieldEntry++)
{
fn_vDefineFieldEntry(M_FIELD_ENTRY((enum tdeFieldId_) wFieldEntry,"","","",eFieldType_Integer,fn_cGetFieldDefaultFunctionPointer,fn_cSetFieldDefaultFunctionPointer));
}
}
void fn_vCheckFieldTable(tdp_fn_cGetFunctionPtr fn_cGetFieldDefaultFunctionPointer,tdp_fn_cSetFunctionPtr fn_cSetFieldDefaultFunctionPointer)
{
short wFieldEntry;
char str[C_MAX_LENGTH_STRING];
size_t lLen;
size_t lMaxLengthScriptName=0;
#if defined(ACTIVE_EDITOR)
size_t lMaxLengthEditorName=0;
#endif /* ACTIVE_EDITOR*/
for(wFieldEntry=0;wFieldEntry<fn_eGetNbField();wFieldEntry++)
{
if ((lLen=strlen(a_stFieldTable[wFieldEntry].szFieldScriptName))>lMaxLengthScriptName)
{
lMaxLengthScriptName=lLen;
}
#if defined(ACTIVE_EDITOR)
if ((lLen=strlen(a_stFieldTable[wFieldEntry].szFieldEditorName))>lMaxLengthEditorName)
{
lMaxLengthEditorName=lLen;
}
#endif /* ACTIVE_EDITOR*/
}
#if !defined(U64)
{
if (lMaxLengthScriptName<C_MAX_SIZE_FIELD_SCRIPT_NAME)
{
sprintf(str,"*** AI : You should reduce C_MAX_SIZE_FIELD_SCRIPT_NAME in %s to %d\n",__FILE__,lMaxLengthScriptName);
OutputDebugString(str);
}
#if defined(ACTIVE_EDITOR)
if (lMaxLengthEditorName<C_MAX_SIZE_FIELD_EDITOR_NAME)
{
sprintf(str,"*** AI : You should reduce C_MAX_SIZE_FIELD_EDITOR_NAME in %s to %d\n",__FILE__,lMaxLengthEditorName);
OutputDebugString(str);
}
#endif /* ACTIVE_EDITOR*/
}
#endif /* U64*/
}
#endif /* __DEBUG_AI__*/
#endif /* OPTIMIZED_COMMAND*/

View File

@@ -0,0 +1,403 @@
#if defined(_AI_LIB_)
#include "AIUseCPA.h"
#include "specif/AIOption.h"
#include "AIMacros.h"
#include "AI_Erm.h"
#include "Convert.h"
#include "EnumFunc.h"
#if defined(OPTIMIZED_COMMAND)
#include "ProtFunc.h"
#endif
#else
#include <string.h>
#include "specif/AIOption.h"
#include "ConvCst.h"
#include "EnumFunc.h"
#include "ConvFunc.h"
#endif /* _AI_LIB_*/
#define C_MAX_SIZE_FUNCTION_EDITOR_NAME 50
#define C_MAX_SIZE_FUNCTION_SCRIPT_NAME 41
#define C_MAX_FUNCTION_NB_IN_PARAM 7 /*ANNECY BBB 4 -> 7 */
#define C_MAX_FUNCTION_NB_OUT_PARAM 1
typedef struct tdstFunctionEntry_
{
#if defined(ACTIVE_EDITOR)
/* Function string used in editor*/
char szFunctionEditorName[C_MAX_SIZE_FUNCTION_EDITOR_NAME+1];
char szFunctionEditorName_En[C_MAX_SIZE_FUNCTION_EDITOR_NAME+1];
#endif /* ACTIVE_EDITOR*/
#if defined (AI_USE_SCRIPT)
/* Function string used in script*/
char szFunctionScriptName[C_MAX_SIZE_FUNCTION_SCRIPT_NAME+1];
#endif /* AI_USE_SCRIPT */
#if defined(_AI_LIB_)
/* pointer on Function function*/
tdp_fn_p_stFunctionFunctionPtr p_fn_p_stFunctionFunction;
#endif /* _AI_LIB_*/
#if defined (AI_USE_SCRIPT) || defined (U64_AIDEBUG)
/* list of Function parameters (taken from szAutorizedTypeParam) in parameter*/
char szFunctionTypeInParam[C_MAX_FUNCTION_NB_IN_PARAM+1];
/* out parameter*/
char szFunctionTypeOutParam[C_MAX_FUNCTION_NB_OUT_PARAM+1];
#endif /* AI_USE_SCRIPT */
unsigned char bUltraFunctionFlag;
#ifdef PROFILE_IA
unsigned long ulCallCtr;
unsigned long ulTimeCtr;
unsigned long ulOwnTimeCtr;
#endif /* PROFILE_IA*/
} tdstFunctionEntry;
#ifdef PROFILE_IA
extern unsigned long ulIndice;
extern unsigned long p_ulTime[255];
extern FILE *file;
#endif /* PROFILE_IA*/
tdstFunctionEntry a_stFunctionTable[eNbFunc]
#if defined(OPTIMIZED_COMMAND)
=
{
#ifdef U64_AIDEBUG
/* function pointers in Function.c, in params, out param ,ultra-able*/
#define M_DEFINE_FUNCTION(a,b,english,c,d,e,f,g) { d,e,f,g },
#include "DefFunc.h"
}
#else /* U64_AIDEBUG*/
#if defined (AI_USE_SCRIPT)
/* Function initialisation*/
#if defined(_AI_LIB_)
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_FUNCTION(a,b,english,c,d,e,f,g) { b,english,c,d,e,f,g },
#else
#define M_DEFINE_FUNCTION(a,b,english,c,d,e,f,g) { c,d,e,f,g },
#endif /* ACTIVE_EDITOR*/
#else
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_FUNCTION(a,b,english,c,d,e,f,g) { b,english,c,e,f,g },
#else
#define M_DEFINE_FUNCTION(a,b,english,c,d,e,f,g) { c,e,f,g },
#endif /* ACTIVE_EDITOR*/
#endif
#include "DefFunc.h"
#undef M_DEFINE_FUNCTION
}
#else /* AI_USE_SCRIPT */
/* Function initialisation*/
#if defined(_AI_LIB_)
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_FUNCTION(a,b,english,c,d,e,f,g) { b,english,d,g },
#else
#define M_DEFINE_FUNCTION(a,b,english,c,d,e,f,g) { d,g },
#endif /* ACTIVE_EDITOR*/
#else
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_FUNCTION(a,b,english,c,d,e,f,g) { b,english,g },
#else
#define M_DEFINE_FUNCTION(a,b,english,c,d,e,f,g) { g },
#endif /* ACTIVE_EDITOR*/
#endif
#include "DefFunc.h"
#undef M_DEFINE_FUNCTION
}
#endif /* AI_USE_SCRIPT */
#endif /* U64_AIDEBUG*/
#endif /* OPTIMIZED_COMMAND*/
;
#if ! defined(OPTIMIZED_COMMAND)
void fn_vSetFunctionUltraOperator(enum tdeFuncId_ eFuncId,unsigned char bFlag)
{
a_stFunctionTable[eFuncId].bUltraFunctionFlag=bFlag;
};
#endif /* OPTIMIZED_COMMAND*/
unsigned char fn_ucGetFunctionUltraOperator(enum tdeFuncId_ eFuncId)
{
return(a_stFunctionTable[eFuncId].bUltraFunctionFlag);
}
#if defined(_AI_LIB_)
tdp_fn_p_stFunctionFunctionPtr fn_p_fn_pGetFunctionFunctionPtr(enum tdeFuncId_ eFuncId)
{
return(a_stFunctionTable[eFuncId].p_fn_p_stFunctionFunction);
}
#ifdef PROFILE_IA
void fn_vFuncSaveTime(unsigned long ulTime, enum tdeFuncId_ eFuncId)
{
/* if level != 0, then stop time count of last function*/
if (ulIndice != 0)
{
p_ulTime[ulIndice - 1] = (ulTime - p_ulTime[ulIndice - 1]);
}
/* set time for this new function and add indice*/
p_ulTime[ulIndice++] = ulTime;
}
void fn_vFuncComputeTime(unsigned long ulCurrentTime, unsigned long ulTime, enum tdeFuncId_ eFuncId)
{
/* compute total time for this function*/
a_stFunctionTable[eFuncId].ulCallCtr++;
a_stFunctionTable[eFuncId].ulTimeCtr += (ulCurrentTime - ulTime)/5;
/* compute own time for this function*/
ulIndice--;
/* compute the time for this function*/
a_stFunctionTable[eFuncId].ulOwnTimeCtr += ((ulCurrentTime - p_ulTime[ulIndice]) / 5);
p_ulTime[ulIndice] = 0;
if (ulIndice != 0)
{
/* level != 0, then restart previous function time*/
p_ulTime[ulIndice-1] = ulCurrentTime - p_ulTime[ulIndice-1];
}
}
void dumpFunc()
{
int i;
char string[250];
strcpy(string,"x:\\cpa\\");
strcat(string,fn_p_szGetLevelName());
strcat(string,".txt");
file = fopen(string,"a+");
if (file == NULL)
return;
for (i=0;i<(long)eNbFunc;i++)
{
if (a_stFunctionTable[i].ulCallCtr)
{
fprintf(file,"%s %i %i %i %i %i\n",
a_stFunctionTable[i].szFunctionScriptName,
a_stFunctionTable[i].ulCallCtr,
a_stFunctionTable[i].ulTimeCtr,
a_stFunctionTable[i].ulOwnTimeCtr,
a_stFunctionTable[i].ulTimeCtr / a_stFunctionTable[i].ulCallCtr,
a_stFunctionTable[i].ulOwnTimeCtr / a_stFunctionTable[i].ulCallCtr);
}
else
{
fprintf(file,"%s %i %i %i %i %i\n",
a_stFunctionTable[i].szFunctionScriptName,
0,
0,
0,
0,
0);
}
}
fclose(file);
}
void clearFunc()
{
int i;
for (i=0;i<(long)eNbFunc;i++)
{
a_stFunctionTable[i].ulCallCtr = 0;
a_stFunctionTable[i].ulTimeCtr = 0;
a_stFunctionTable[i].ulOwnTimeCtr = 0;
}
}
#endif /* PROFILE_IA*/
#endif /* _AI_LIB_*/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
enum tdeFuncId_ fn_eGetNbFunc()
{
return(eNbFunc);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
#if defined (AI_USE_SCRIPT) || defined (U64_AIDEBUG)
char *szGetFunctionTypeInParamFromId(enum tdeFuncId_ eFuncId)
{
return(a_stFunctionTable[eFuncId].szFunctionTypeInParam);
}
#endif /* AI_USE_SCRIPT */
#if defined(__DEBUG_AI__) || defined(ACTIVE_EDITOR)
char *szFindFunctionScriptNameFromId(enum tdeFuncId_ eFuncId)
{
return(a_stFunctionTable[eFuncId].szFunctionScriptName);
}
#endif /* __DEBUG_AI__ ACTIVE_EDITOR*/
#if defined(ACTIVE_EDITOR) || defined (U64_AIDEBUG)
char *szGetFunctionTypeOutParamFromId(enum tdeFuncId_ eFuncId)
{
return(a_stFunctionTable[eFuncId].szFunctionTypeOutParam);
}
#endif /* ACTIVE_EDITOR */
#if defined(ACTIVE_EDITOR)
char *szFindFunctionEditorNameFromId(enum tdeFuncId_ eFuncId)
{
return(a_stFunctionTable[eFuncId].szFunctionEditorName);
}
enum tdeFuncId_ fn_eFindFunctionIdFromEditorName(char *szFunction)
{
short wFunctionEntry;
for(wFunctionEntry=0;wFunctionEntry<fn_eGetNbFunc();wFunctionEntry++)
{
if (!stricmp(a_stFunctionTable[wFunctionEntry].szFunctionEditorName,szFunction))
{
return((enum tdeFuncId_) wFunctionEntry);
}
}
return(fn_eGetNbFunc());
}
#endif /* ACTIVE_EDITOR*/
#if defined (AI_USE_SCRIPT)
enum tdeFuncId_ fn_eFindFunctionIdFromScriptName(char *szFunction)
{
short wFunctionEntry;
for(wFunctionEntry=0;wFunctionEntry<fn_eGetNbFunc();wFunctionEntry++)
{
if (!stricmp(a_stFunctionTable[wFunctionEntry].szFunctionScriptName,szFunction))
{
return((enum tdeFuncId_) wFunctionEntry);
}
}
return(fn_eGetNbFunc());
}
#endif /* AI_USE_SCRIPT */
#if !defined(OPTIMIZED_COMMAND)
#if defined(ACTIVE_EDITOR)
void fn_vDefineFunctionEntry(enum tdeFuncId_ eFuncId,char *szFunctionEditorName,char *szFunctionEditorName_En,char *szFunctionScriptName,tdp_fn_p_stFunctionFunctionPtr p_fn_p_stFunctionFunction,char *szFunctionTypeInParam,char *szFunctionTypeOutParam)
#else
void fn_vDefineFunctionEntry(enum tdeFuncId_ eFuncId,char *szFunctionScriptName,tdp_fn_p_stFunctionFunctionPtr p_fn_p_stFunctionFunction,char *szFunctionTypeInParam,char *szFunctionTypeOutParam)
#endif /* ACTIVE_EDITOR*/
{
if (
(eFuncId<fn_eGetNbFunc())
#if defined(ACTIVE_EDITOR)
&&(strlen(szFunctionEditorName)<=C_MAX_SIZE_FUNCTION_EDITOR_NAME)
#endif /* ACTIVE_EDITOR*/
&&(strlen(szFunctionScriptName)<=C_MAX_SIZE_FUNCTION_SCRIPT_NAME)
&&(strlen(szFunctionTypeInParam)<=C_MAX_FUNCTION_NB_IN_PARAM)
&&(fn_ucCheckTypeParam(szFunctionTypeInParam))
&&(strlen(szFunctionTypeOutParam)<=C_MAX_FUNCTION_NB_OUT_PARAM)
&&(fn_ucCheckTypeParam(szFunctionTypeOutParam))
)
{
#if defined(ACTIVE_EDITOR)
strcpy(a_stFunctionTable[eFuncId].szFunctionEditorName,szFunctionEditorName);
#endif /* ACTIVE_EDITOR*/
strcpy(a_stFunctionTable[eFuncId].szFunctionScriptName,szFunctionScriptName);
a_stFunctionTable[eFuncId].p_fn_p_stFunctionFunction=p_fn_p_stFunctionFunction;
strcpy(a_stFunctionTable[eFuncId].szFunctionTypeInParam,szFunctionTypeInParam);
strcpy(a_stFunctionTable[eFuncId].szFunctionTypeOutParam,szFunctionTypeOutParam);
}
else
{
char str[C_MAX_LENGTH_STRING];
sprintf(str,"Error while defining %s function in %s\n",szFunctionScriptName,__FILE__);
M_AIFatalErrorMsg(E_uwAIFatalNotValidFunction,str);
}
}
#endif /* OPTIMIZED_COMMAND*/
#if !defined(OPTIMIZED_COMMAND)
#if defined(__DEBUG_AI__)
void fn_vInitFunctionTable(tdp_fn_p_stFunctionFunctionPtr fn_p_stDefaultFunctionFunctionPointer)
{
short wFunctionEntry;
for(wFunctionEntry=0;wFunctionEntry<fn_eGetNbFunc();wFunctionEntry++)
{
fn_vDefineFunctionEntry(M_FUNCTION_ENTRY((enum tdeFuncId_) wFunctionEntry,"","","",fn_p_stDefaultFunctionFunctionPointer,USE_NO_PARAM,USE_NO_PARAM));
/* ULTRA OPERATOR USAGE : FALSE AS A DEFAULT*/
fn_vSetFunctionUltraOperator((enum tdeFuncId_) wFunctionEntry,NOT_ULTRA_ABLE);
}
}
void fn_vCheckFunctionTable(tdp_fn_p_stFunctionFunctionPtr fn_p_stDefaultFunctionFunctionPointer)
{
short wFunctionEntry;
char str[C_MAX_LENGTH_STRING];
size_t lLen;
size_t lMaxLengthScriptName=0;
#if defined(ACTIVE_EDITOR)
size_t lMaxLengthEditorName=0;
#endif /* ACTIVE_EDITOR*/
size_t lMaxLengthInParam=0;
size_t lMaxLengthOutParam=0;
for(wFunctionEntry=0;wFunctionEntry<fn_eGetNbFunc();wFunctionEntry++)
{
if (fn_p_fn_pGetFunctionFunctionPtr((enum tdeFuncId_) wFunctionEntry)==fn_p_stDefaultFunctionFunctionPointer)
{
sprintf(str,"Error while defining %s function in %s\n",a_stFunctionTable[wFunctionEntry].szFunctionScriptName,__FILE__);
M_AIFatalErrorMsg(E_uwAIFatalNotValidFunction,str);
}
if ((lLen=strlen(a_stFunctionTable[wFunctionEntry].szFunctionScriptName))>lMaxLengthScriptName)
{
lMaxLengthScriptName=lLen;
}
#if defined(ACTIVE_EDITOR)
if ((lLen=strlen(a_stFunctionTable[wFunctionEntry].szFunctionEditorName))>lMaxLengthEditorName)
{
lMaxLengthEditorName=lLen;
}
#endif /* ACTIVE_EDITOR*/
if ((lLen=strlen(a_stFunctionTable[wFunctionEntry].szFunctionTypeInParam))>lMaxLengthInParam)
{
lMaxLengthInParam=lLen;
}
if ((lLen=strlen(a_stFunctionTable[wFunctionEntry].szFunctionTypeOutParam))>lMaxLengthOutParam)
{
lMaxLengthOutParam=lLen;
}
}
#if !defined(U64)
{
if (lMaxLengthScriptName<C_MAX_SIZE_FUNCTION_SCRIPT_NAME)
{
sprintf(str,"*** AI : You should reduce C_MAX_SIZE_FUNCTION_SCRIPT_NAME in %s to %d\n",__FILE__,lMaxLengthScriptName);
OutputDebugString(str);
}
#if defined(ACTIVE_EDITOR)
if (lMaxLengthEditorName<C_MAX_SIZE_FUNCTION_EDITOR_NAME)
{
sprintf(str,"*** AI : You should reduce C_MAX_SIZE_FUNCTION_EDITOR_NAME in %s to %d\n",__FILE__,lMaxLengthEditorName);
OutputDebugString(str);
}
#endif /* ACTIVE_EDITOR*/
if (lMaxLengthInParam<C_MAX_FUNCTION_NB_IN_PARAM)
{
sprintf(str,"*** AI : You should reduce C_MAX_FUNCTION_NB_IN_PARAM in %s to %d\n",__FILE__,lMaxLengthInParam);
OutputDebugString(str);
}
if (lMaxLengthOutParam<C_MAX_FUNCTION_NB_OUT_PARAM)
{
sprintf(str,"*** AI : You should reduce C_MAX_FUNCTION_NB_OUT_PARAM in %s to %d\n",__FILE__,lMaxLengthOutParam);
OutputDebugString(str);
}
}
#endif /* U64*/
}
#endif /* __DEBUG_AI__*/
#endif /* OPTIMIZED_COMMAND*/

View File

@@ -0,0 +1,288 @@
#if defined(_AI_LIB_)
#include "AIUseCPA.h"
#include "specif/AIOption.h"
#include "AIMacros.h"
#include "AI_Erm.h"
#include "Convert.h"
#include "EnumKey.h"
#if defined(OPTIMIZED_COMMAND)
#include "ProtKey.h"
#endif
#else
#include <string.h>
#include "specif/AIOption.h"
#include "ConvCst.h"
#include "EnumKey.h"
#include "ConvKey.h"
#endif /* _AI_LIB_*/
#define C_MAX_SIZE_KEYWORD_EDITOR_NAME 17
#define C_MAX_SIZE_KEYWORD_SCRIPT_NAME 14
#define C_MAX_KEYWORD_NB_IN_PARAM 3
#define C_MAX_KEYWORD_NB_OUT_PARAM 1
typedef struct tdstKeyWordEntry_
{
#if defined(ACTIVE_EDITOR)
/* KeyWord string used in editor*/
char szKeyWordEditorName[C_MAX_SIZE_KEYWORD_EDITOR_NAME+1];
char szKeyWordEditorName_En[C_MAX_SIZE_KEYWORD_EDITOR_NAME+1];
#endif /* ACTIVE_EDITOR*/
#if defined (AI_USE_SCRIPT)
/* KeyWord string used in script*/
char szKeyWordScriptName[C_MAX_SIZE_KEYWORD_SCRIPT_NAME+1];
#endif /* AI_USE_SCRIPT */
#if defined(_AI_LIB_)
/* pointer on KeyWord function*/
tdp_fn_p_stKeyWordFunctionPtr p_fn_p_stKeyWordFunction;
#endif /* _AI_LIB_*/
#if defined (AI_USE_SCRIPT)
/* list of KeyWord parameters (taken from szAutorizedTypeParam) in parameter*/
char szKeyWordTypeInParam[C_MAX_KEYWORD_NB_IN_PARAM+1];
/* list of KeyWord parameters (taken from szAutorizedTypeParam) out parameter*/
char szKeyWordTypeOutParam[C_MAX_KEYWORD_NB_OUT_PARAM+1];
#endif /* AI_USE_SCRIPT */
} tdstKeyWordEntry;
tdstKeyWordEntry a_stKeyWordTable[eNbKeyWord]
#if defined(OPTIMIZED_COMMAND)
=
{
#if defined (AI_USE_SCRIPT)
/* KeyWords initialisation*/
#if defined(_AI_LIB_)
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_KEYWORD(a,b,english,c,d,e,f) { b,english,c,d,e,f },
#else
#define M_DEFINE_KEYWORD(a,b,english,c,d,e,f) { c,d,e,f },
#endif /* ACTIVE_EDITOR*/
#else
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_KEYWORD(a,b,english,c,d,e,f) { b,english,c,e,f },
#else
#define M_DEFINE_KEYWORD(a,b,english,c,d,e,f) { c,e,f },
#endif
#endif /* _AI_LIB_ */
#include "DefKey.h"
#undef M_DEFINE_KEYWORD
}
#else /* AI_USE_SCRIPT */
/* KeyWords initialisation*/
#if defined(_AI_LIB_)
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_KEYWORD(a,b,english,c,d,e,f) { b,english,d },
#else
#define M_DEFINE_KEYWORD(a,b,english,c,d,e,f) { d },
#endif /* ACTIVE_EDITOR*/
#else
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_KEYWORD(a,b,english,c,d,e,f) { b,english },
#else
#define M_DEFINE_KEYWORD(a,b,english,c,d,e,f) { },
#endif
#endif /* _AI_LIB_ */
#include "DefKey.h"
#undef M_DEFINE_KEYWORD
}
#endif /* AI_USE_SCRIPT */
#endif /* OPTIMIZED_COMMAND*/
;
#if defined(_AI_LIB_)
tdp_fn_p_stKeyWordFunctionPtr fn_p_fn_pGetKeyWordFunctionPtr(enum tdeKeyWordId_ eKeyWordId)
{
return(a_stKeyWordTable[eKeyWordId].p_fn_p_stKeyWordFunction);
}
#endif
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
enum tdeKeyWordId_ fn_eGetNbKeyWord()
{
return(eNbKeyWord);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
#if defined(ACTIVE_EDITOR)
char *szGetKeyWordTypeInParamFromId(enum tdeKeyWordId_ eKeyWordId)
{
return(a_stKeyWordTable[eKeyWordId].szKeyWordTypeInParam);
}
char *szGetKeyWordTypeOutParamFromId(enum tdeKeyWordId_ eKeyWordId)
{
return(a_stKeyWordTable[eKeyWordId].szKeyWordTypeOutParam);
}
/* modif : enum tdeKeyWordId_ fn_eFindKeyWordIdFromEditorName(char *szKeyWord, int langage)*/
enum tdeKeyWordId_ fn_eFindKeyWordIdFromEditorName(char *szKeyWord)
{
short wKeyWordEntry;
for(wKeyWordEntry=0;wKeyWordEntry<fn_eGetNbKeyWord();wKeyWordEntry++)
{
if (!stricmp(a_stKeyWordTable[wKeyWordEntry].szKeyWordEditorName,szKeyWord))
{
return((enum tdeKeyWordId_) wKeyWordEntry);
}
}
return(fn_eGetNbKeyWord());
}
char *szFindKeyWordScriptNameFromId(enum tdeKeyWordId_ eKeyWordId)
{
return(a_stKeyWordTable[eKeyWordId].szKeyWordScriptName);
}
/* modif : char *szFindKeyWordEditorNameFromId(enum tdeKeyWordId_ eKeyWordId, int langage)*/
char *szFindKeyWordEditorNameFromId(enum tdeKeyWordId_ eKeyWordId)
{
return(a_stKeyWordTable[eKeyWordId].szKeyWordEditorName);
}
#endif /* ACTIVE_EDITOR*/
#if defined (AI_USE_SCRIPT)
enum tdeKeyWordId_ fn_eFindKeyWordIdFromScriptName(char *szKeyWord)
{
short wKeyWordEntry;
for(wKeyWordEntry=0;wKeyWordEntry<fn_eGetNbKeyWord();wKeyWordEntry++)
{
if (!stricmp(a_stKeyWordTable[wKeyWordEntry].szKeyWordScriptName,szKeyWord))
{
return((enum tdeKeyWordId_) wKeyWordEntry);
}
}
return(fn_eGetNbKeyWord());
}
#endif /* AI_USE_SCRIPT */
#if !defined(OPTIMIZED_COMMAND)
#if defined(ACTIVE_EDITOR)
void fn_vDefineKeyWordEntry(enum tdeKeyWordId_ eKeyWordId,char *szKeyWordEditorName,char *szKeyWordEditorName_En,char *szKeyWordScriptName,tdp_fn_p_stKeyWordFunctionPtr p_fn_p_stKeyWordFunction,char *szKeyWordTypeInParam,char *szKeyWordTypeOutParam)
#else
void fn_vDefineKeyWordEntry(enum tdeKeyWordId_ eKeyWordId,char *szKeyWordScriptName,tdp_fn_p_stKeyWordFunctionPtr p_fn_p_stKeyWordFunction,char *szKeyWordTypeInParam,char *szKeyWordTypeOutParam)
#endif /* ACTIVE_EDITOR*/
{
if (
(eKeyWordId<fn_eGetNbKeyWord())
#if defined(ACTIVE_EDITOR)
&&(strlen(szKeyWordEditorName)<=C_MAX_SIZE_KEYWORD_EDITOR_NAME)
/* &&(strlen(szKeyWordEditorName_En)<=C_MAX_SIZE_KEYWORD_EDITOR_NAME)*/
#endif /* ACTIVE_EDITOR*/
&&(strlen(szKeyWordScriptName)<=C_MAX_SIZE_KEYWORD_SCRIPT_NAME)
&&(fn_ucCheckTypeParam(szKeyWordTypeInParam))
&&(strlen(szKeyWordTypeInParam)<=C_MAX_KEYWORD_NB_IN_PARAM)
&&(fn_ucCheckTypeParam(szKeyWordTypeOutParam))
&&(strlen(szKeyWordTypeOutParam)<=C_MAX_KEYWORD_NB_OUT_PARAM)
)
{
#if defined(ACTIVE_EDITOR)
strcpy(a_stKeyWordTable[eKeyWordId].szKeyWordEditorName,szKeyWordEditorName);
/* strcpy(a_stKeyWordTable[eKeyWordId].szKeyWordEditorName_En,szKeyWordEditorName_En);*/
#endif /* ACTIVE_EDITOR*/
strcpy(a_stKeyWordTable[eKeyWordId].szKeyWordScriptName,szKeyWordScriptName);
a_stKeyWordTable[eKeyWordId].p_fn_p_stKeyWordFunction=p_fn_p_stKeyWordFunction;
strcpy(a_stKeyWordTable[eKeyWordId].szKeyWordTypeInParam,szKeyWordTypeInParam);
strcpy(a_stKeyWordTable[eKeyWordId].szKeyWordTypeOutParam,szKeyWordTypeOutParam);
}
else
{
char str[C_MAX_LENGTH_STRING];
sprintf(str,"Error while defining %s keyword in %s\n",szKeyWordScriptName,__FILE__);
M_AIFatalErrorMsg(E_uwAIFatalUnknownKeyWord,str);
}
}
#endif /* OPTIMIZED_COMMAND*/
#if !defined(OPTIMIZED_COMMAND)
#if defined(__DEBUG_AI__)
void fn_vInitKeyWordTable(tdp_fn_p_stKeyWordFunctionPtr fn_p_stDefaultKeyWordFunctionPointer)
{
short wKeyWordEntry;
for(wKeyWordEntry=0;wKeyWordEntry<fn_eGetNbKeyWord();wKeyWordEntry++)
{
fn_vDefineKeyWordEntry(M_KEYWORD_ENTRY((enum tdeKeyWordId_) wKeyWordEntry,"","","",fn_p_stDefaultKeyWordFunctionPointer,USE_NO_PARAM,USE_NO_PARAM));
}
}
void fn_vCheckKeyWordTable(tdp_fn_p_stKeyWordFunctionPtr fn_p_stDefaultKeyWordFunctionPointer)
{
char str[C_MAX_LENGTH_STRING];
short wKeyWordEntry;
size_t lLen;
size_t lMaxLengthScriptName=0;
#if defined(ACTIVE_EDITOR)
size_t lMaxLengthEditorName=0;
#endif /* ACTIVE_EDITOR*/
size_t lMaxLengthInParam=0;
size_t lMaxLengthOutParam=0;
for(wKeyWordEntry=0;wKeyWordEntry<fn_eGetNbKeyWord();wKeyWordEntry++)
{
if (fn_p_fn_pGetKeyWordFunctionPtr((enum tdeKeyWordId_) wKeyWordEntry)==fn_p_stDefaultKeyWordFunctionPointer)
{
sprintf(str,"Error while defining %s keyword in %s\n",a_stKeyWordTable[wKeyWordEntry].szKeyWordScriptName,__FILE__);
M_AIFatalErrorMsg(E_uwAIFatalUnknownKeyWord,str);
}
if ((lLen=strlen(a_stKeyWordTable[wKeyWordEntry].szKeyWordScriptName))>lMaxLengthScriptName)
{
lMaxLengthScriptName=lLen;
}
#if defined(ACTIVE_EDITOR)
if ((lLen=strlen(a_stKeyWordTable[wKeyWordEntry].szKeyWordEditorName))>lMaxLengthEditorName)
{
lMaxLengthEditorName=lLen;
}
/*
if ((lLen=strlen(a_stKeyWordTable[wKeyWordEntry].szKeyWordEditorName_En))>lMaxLengthEditorName)
{
lMaxLengthEditorName=lLen;
}
*/
if ((lLen=strlen(a_stKeyWordTable[wKeyWordEntry].szKeyWordTypeInParam))>lMaxLengthInParam)
{
lMaxLengthInParam=lLen;
}
if ((lLen=strlen(a_stKeyWordTable[wKeyWordEntry].szKeyWordTypeOutParam))>lMaxLengthOutParam)
{
lMaxLengthOutParam=lLen;
}
#endif /* ACTIVE_EDITOR*/
}
#if !defined(U64)
{
if (lMaxLengthScriptName<C_MAX_SIZE_KEYWORD_SCRIPT_NAME)
{
sprintf(str,"*** AI : You should reduce C_MAX_SIZE_KEYWORD_SCRIPT_NAME in %s to %d\n",__FILE__,lMaxLengthScriptName);
OutputDebugString(str);
}
#if defined(ACTIVE_EDITOR)
if (lMaxLengthEditorName<C_MAX_SIZE_KEYWORD_EDITOR_NAME)
{
sprintf(str,"*** AI : You should reduce C_MAX_SIZE_KEYWORD_EDITOR_NAME in %s to %d\n",__FILE__,lMaxLengthEditorName);
OutputDebugString(str);
}
if (lMaxLengthInParam<C_MAX_KEYWORD_NB_IN_PARAM)
{
sprintf(str,"*** AI : You should reduce C_MAX_KEYWORD_NB_IN_PARAM in %s to %d\n",__FILE__,lMaxLengthInParam);
OutputDebugString(str);
}
if (lMaxLengthOutParam<C_MAX_KEYWORD_NB_OUT_PARAM)
{
sprintf(str,"*** AI : You should reduce C_MAX_KEYWORD_NB_OUT_PARAM in %s to %d\n",__FILE__,lMaxLengthOutParam);
OutputDebugString(str);
}
#endif /* ACTIVE_EDITOR*/
}
#endif /* U64*/
}
#endif /* __DEBUG_AI__*/
#endif /* OPTIMIZED_COMMAND*/

View File

@@ -0,0 +1,282 @@
#if defined(_AI_LIB_)
#include "AIUseCPA.h"
#include "specif/AIOption.h"
#include "AIMacros.h"
#include "AI_Erm.h"
#include "Convert.h"
#include "EnumOper.h"
#if defined(OPTIMIZED_COMMAND)
#include "ProtOper.h"
#endif
#else
#include <string.h>
#include "specif/AIOption.h"
#include "ConvCst.h"
#include "EnumOper.h"
#include "ConvOper.h"
#endif /* _AI_LIB_*/
#define C_MAX_SIZE_OPERATOR_EDITOR_NAME 4
#define C_MAX_SIZE_OPERATOR_SCRIPT_NAME 26
#define C_MAX_OPERATOR_NB_IN_PARAM 2
#define C_MAX_OPERATOR_NB_OUT_PARAM 1
typedef struct tdstOperatorEntry_
{
#if defined(ACTIVE_EDITOR)
/* Operator string used in editor*/
char szOperatorEditorName[C_MAX_SIZE_OPERATOR_EDITOR_NAME+1];
#endif /* ACTIVE_EDITOR*/
#if defined (AI_USE_SCRIPT)
/* Operator string used in script*/
char szOperatorScriptName[C_MAX_SIZE_OPERATOR_SCRIPT_NAME+1];
#endif /* AI_USE_SCRIPT */
#if defined(_AI_LIB_)
/* pointer on Operator function*/
tdp_fn_p_stOperatorFunctionPtr p_fn_p_stOperatorFunction;
#endif /* _AI_LIB_*/
#if defined(ACTIVE_EDITOR)
/* list of Operator parameters (taken from szAutorizedTypeParam) in parameter*/
char szOperatorTypeInParam[C_MAX_OPERATOR_NB_IN_PARAM+1];
/* out parameter*/
char szOperatorTypeOutParam[C_MAX_OPERATOR_NB_OUT_PARAM+1];
#endif /* ACTIVE_EDITOR*/
} tdstOperatorEntry;
tdstOperatorEntry a_stOperatorTable[eNbOperator]
#if defined(OPTIMIZED_COMMAND)
=
{
#if defined (AI_USE_SCRIPT)
/* Conditions initialisation*/
#if defined(_AI_LIB_)
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_OPERATOR(a,b,c,d,e,f) { b,c,d,e,f },
#else
#define M_DEFINE_OPERATOR(a,b,c,d,e,f) { c,d },
#endif /* ACTIVE_EDITOR*/
#else
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_OPERATOR(a,b,c,d,e,f) { b,c,e,f },
#else
#define M_DEFINE_OPERATOR(a,b,c,d,e,f) { c },
#endif /* ACTIVE_EDITOR*/
#endif
#include "DefOper.h"
#undef M_DEFINE_OPERATOR
}
#else /* AI_USE_SCRIPT */
/* Conditions initialisation*/
#if defined(_AI_LIB_)
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_OPERATOR(a,b,c,d,e,f) { b,d },
#else
#define M_DEFINE_OPERATOR(a,b,c,d,e,f) { d },
#endif /* ACTIVE_EDITOR*/
#else
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_OPERATOR(a,b,c,d,e,f) { b },
#else
#define M_DEFINE_OPERATOR(a,b,c,d,e,f) { },
#endif /* ACTIVE_EDITOR*/
#endif
#include "DefOper.h"
#undef M_DEFINE_OPERATOR
}
#endif /* AI_USE_SCRIPT */
#endif /* OPTIMIZED_COMMAND*/
;
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
enum tdeOperatorId_ fn_eGetNbOperator()
{
return(eNbOperator);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
#if defined(_AI_LIB_)
tdp_fn_p_stOperatorFunctionPtr fn_p_fn_pGetOperatorFunctionPtr(enum tdeOperatorId_ eOperatorId)
{
return(a_stOperatorTable[eOperatorId].p_fn_p_stOperatorFunction);
}
#endif /* _AI_LIB_*/
#if defined(ACTIVE_EDITOR)
char *szGetOperatorTypeInParamFromId(enum tdeOperatorId_ eOperatorId)
{
return(a_stOperatorTable[eOperatorId].szOperatorTypeInParam);
}
char *szGetOperatorTypeOutParamFromId(enum tdeOperatorId_ eOperatorId)
{
return(a_stOperatorTable[eOperatorId].szOperatorTypeOutParam);
}
enum tdeOperatorId_ fn_eFindOperatorIdFromEditorName(char *szOperator)
{
short wOperatorEntry;
for(wOperatorEntry=0;wOperatorEntry<fn_eGetNbOperator();wOperatorEntry++)
{
if (!stricmp(a_stOperatorTable[wOperatorEntry].szOperatorEditorName,szOperator))
{
return((enum tdeOperatorId_) wOperatorEntry);
}
}
return(fn_eGetNbOperator());
}
char *szFindOperatorEditorNameFromId(enum tdeOperatorId_ eOperatorId)
{
return(a_stOperatorTable[eOperatorId].szOperatorEditorName);
}
char *szFindOperatorScriptNameFromId(enum tdeOperatorId_ eOperatorId)
{
return(a_stOperatorTable[eOperatorId].szOperatorScriptName);
}
#endif /* ACTIVE_EDITOR*/
#if defined (AI_USE_SCRIPT)
enum tdeOperatorId_ fn_eFindOperatorIdFromScriptName(char *szOperator)
{
short wOperatorEntry;
for(wOperatorEntry=0;wOperatorEntry<fn_eGetNbOperator();wOperatorEntry++)
{
if (!stricmp(a_stOperatorTable[wOperatorEntry].szOperatorScriptName,szOperator))
{
return((enum tdeOperatorId_) wOperatorEntry);
}
}
return(fn_eGetNbOperator());
}
#endif /* AI_USE_SCRIPT */
#if !defined(OPTIMIZED_COMMAND)
#if defined(ACTIVE_EDITOR)
void fn_vDefineOperatorEntry(enum tdeOperatorId_ eOperatorId,char *szOperatorEditorName,char *szOperatorScriptName,tdp_fn_p_stOperatorFunctionPtr p_fn_p_stOperatorFunction,char *szOperatorTypeInParam,char *szOperatorTypeOutParam)
#else
void fn_vDefineOperatorEntry(enum tdeOperatorId_ eOperatorId,char *szOperatorScriptName,tdp_fn_p_stOperatorFunctionPtr p_fn_p_stOperatorFunction,char *szOperatorTypeInParam,char *szOperatorTypeOutParam)
#endif /* ACTIVE_EDITOR*/
{
if (
(eOperatorId<fn_eGetNbOperator())
#if defined(ACTIVE_EDITOR)
&&(strlen(szOperatorEditorName)<=C_MAX_SIZE_OPERATOR_EDITOR_NAME)
#endif /* ACTIVE_EDITOR*/
&&(strlen(szOperatorScriptName)<=C_MAX_SIZE_OPERATOR_SCRIPT_NAME)
#if defined(ACTIVE_EDITOR)
&&(strlen(szOperatorTypeInParam)<=C_MAX_OPERATOR_NB_IN_PARAM)
&&(fn_ucCheckTypeParam(szOperatorTypeInParam))
&&(strlen(szOperatorTypeOutParam)<=C_MAX_OPERATOR_NB_OUT_PARAM)
&&(fn_ucCheckTypeParam(szOperatorTypeOutParam))
#endif /* ACTIVE_EDITOR*/
)
{
#if defined(ACTIVE_EDITOR)
strcpy(a_stOperatorTable[eOperatorId].szOperatorEditorName,szOperatorEditorName);
#endif /* ACTIVE_EDITOR*/
strcpy(a_stOperatorTable[eOperatorId].szOperatorScriptName,szOperatorScriptName);
a_stOperatorTable[eOperatorId].p_fn_p_stOperatorFunction=p_fn_p_stOperatorFunction;
#if defined(ACTIVE_EDITOR)
strcpy(a_stOperatorTable[eOperatorId].szOperatorTypeInParam,szOperatorTypeInParam);
strcpy(a_stOperatorTable[eOperatorId].szOperatorTypeOutParam,szOperatorTypeOutParam);
#else
szOperatorTypeInParam=szOperatorTypeInParam;
szOperatorTypeOutParam=szOperatorTypeOutParam;
#endif /* ACTIVE_EDITOR*/
}
else
{
char str[C_MAX_LENGTH_STRING];
sprintf(str,"Error while defining %s operator in %s\n",szOperatorScriptName,__FILE__);
M_AIFatalErrorMsg(E_uwAIFatalNotValidOperator,str);
}
}
#endif /* OPTIMIZED_COMMAND*/
#if !defined(OPTIMIZED_COMMAND)
#if defined(__DEBUG_AI__)
void fn_vInitOperatorTable(tdp_fn_p_stOperatorFunctionPtr fn_p_stDefaultOperatorFunctionPointer)
{
short wOperatorEntry;
for(wOperatorEntry=0;wOperatorEntry<fn_eGetNbOperator();wOperatorEntry++)
{
fn_vDefineOperatorEntry(M_OPERATOR_ENTRY((enum tdeOperatorId_) wOperatorEntry,"","",fn_p_stDefaultOperatorFunctionPointer,USE_NO_PARAM,USE_NO_PARAM));
}
}
void fn_vCheckOperatorTable(tdp_fn_p_stOperatorFunctionPtr fn_p_stDefaultOperatorFunctionPointer)
{
short wOperatorEntry;
char str[C_MAX_LENGTH_STRING];
size_t lLen;
size_t lMaxLengthScriptName=0;
#if defined(ACTIVE_EDITOR)
size_t lMaxLengthEditorName=0;
size_t lMaxLengthInParam=0;
size_t lMaxLengthOutParam=0;
#endif /* ACTIVE_EDITOR*/
for(wOperatorEntry=0;wOperatorEntry<fn_eGetNbOperator();wOperatorEntry++)
{
if (fn_p_fn_pGetOperatorFunctionPtr((enum tdeOperatorId_) wOperatorEntry)==fn_p_stDefaultOperatorFunctionPointer)
{
sprintf(str,"Error while defining %s operator in %s\n",a_stOperatorTable[wOperatorEntry].szOperatorScriptName,__FILE__);
M_AIFatalErrorMsg(E_uwAIFatalNotValidOperator,str);
}
if ((lLen=strlen(a_stOperatorTable[wOperatorEntry].szOperatorScriptName))>lMaxLengthScriptName)
{
lMaxLengthScriptName=lLen;
}
#if defined(ACTIVE_EDITOR)
if ((lLen=strlen(a_stOperatorTable[wOperatorEntry].szOperatorEditorName))>lMaxLengthEditorName)
{
lMaxLengthEditorName=lLen;
}
if ((lLen=strlen(a_stOperatorTable[wOperatorEntry].szOperatorTypeInParam))>lMaxLengthInParam)
{
lMaxLengthInParam=lLen;
}
if ((lLen=strlen(a_stOperatorTable[wOperatorEntry].szOperatorTypeOutParam))>lMaxLengthOutParam)
{
lMaxLengthOutParam=lLen;
}
#endif /* ACTIVE_EDITOR*/
}
#if !defined(U64)
{
if (lMaxLengthScriptName<C_MAX_SIZE_OPERATOR_SCRIPT_NAME)
{
sprintf(str,"*** AI : You should reduce C_MAX_SIZE_OPERATOR_SCRIPT_NAME in %s to %d\n",__FILE__,lMaxLengthScriptName);
OutputDebugString(str);
}
#if defined(ACTIVE_EDITOR)
if (lMaxLengthEditorName<C_MAX_SIZE_OPERATOR_EDITOR_NAME)
{
sprintf(str,"*** AI : You should reduce C_MAX_SIZE_OPERATOR_EDITOR_NAME in %s to %d\n",__FILE__,lMaxLengthEditorName);
OutputDebugString(str);
}
if (lMaxLengthInParam<C_MAX_OPERATOR_NB_IN_PARAM)
{
sprintf(str,"*** AI : You should reduce C_MAX_OPERATOR_NB_IN_PARAM in %s to %d\n",__FILE__,lMaxLengthInParam);
OutputDebugString(str);
}
if (lMaxLengthOutParam<C_MAX_OPERATOR_NB_OUT_PARAM)
{
sprintf(str,"*** AI : You should reduce C_MAX_OPERATOR_NB_OUT_PARAM in %s to %d\n",__FILE__,lMaxLengthOutParam);
OutputDebugString(str);
}
#endif /* ACTIVE_EDITOR*/
}
#endif /* U64*/
}
#endif /* __DEBUG_AI__*/
#endif /* OPTIMIZED_COMMAND*/

View File

@@ -0,0 +1,390 @@
#if defined(_AI_LIB_)
#include "AIUseCPA.h"
#include "specif/AIOption.h"
#include "AIMacros.h"
#include "AI_Erm.h"
#include "Convert.h"
#include "EnumProc.h"
#if defined(OPTIMIZED_COMMAND)
#include "ProtProc.h"
#endif
#else
#include <string.h>
#include "specif/AIOption.h"
#include "ConvCst.h"
#include "EnumProc.h"
#include "ConvProc.h"
#endif /* _AI_LIB_*/
#define C_MAX_SIZE_PROCEDURE_EDITOR_NAME 50
#define C_MAX_SIZE_PROCEDURE_SCRIPT_NAME 40
#define C_MAX_PROCEDURE_NB_PARAM 8/*Ylt passage de 6 <20> 8 arguments*/
typedef struct tdstProcedureEntry_
{
#if defined(ACTIVE_EDITOR)
/* Procedure string used in editor*/
char szProcedureEditorName[C_MAX_SIZE_PROCEDURE_EDITOR_NAME+1];
char szProcedureEditorName_En[C_MAX_SIZE_PROCEDURE_EDITOR_NAME+1];
#endif /* ACTIVE_EDITOR*/
#if defined (AI_USE_SCRIPT)
/* Procedure string used in script*/
char szProcedureScriptName[C_MAX_SIZE_PROCEDURE_SCRIPT_NAME+1];
#endif /* AI_USE_SCRIPT */
#if defined(_AI_LIB_)
/* pointer on Procedure function*/
tdp_fn_p_stProcedureFunctionPtr p_fn_p_stProcedureFunction;
#endif
#if defined (AI_USE_SCRIPT) || defined (U64_AIDEBUG)
/* list of Procedure parameters (taken from szAutorizedTypeParam) in parameter*/
char szProcedureTypeParam[C_MAX_PROCEDURE_NB_PARAM+1];
#endif /* AI_USE_SCRIPT */
unsigned char bUltraProcedureFlag;
#ifdef PROFILE_IA
unsigned long ulCallCtr;
unsigned long ulTimeCtr;
unsigned long ulOwnTimeCtr;
#endif /* PROFILE_IA*/
} tdstProcedureEntry;
#ifdef PROFILE_IA
extern unsigned long ulIndice;
extern unsigned long p_ulTime[255];
extern FILE *file;
#endif /* PROFILE_IA*/
tdstProcedureEntry a_stProcedureTable[eNbProcedure]
#if defined(OPTIMIZED_COMMAND)
=
{
#ifdef U64_AIDEBUG
/* function pointers in Procedure.c, in params,ultra-able*/
#define M_DEFINE_PROCEDURE(a,b,english,c,d,e,f) { d,e,f },
#include "DefProc.h"
}
#else /* U64_AIDEBUG*/
#if defined (AI_USE_SCRIPT)
/* Procedure initialisation*/
#if defined(_AI_LIB_)
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_PROCEDURE(a,b,english,c,d,e,f) { b,english,c,d,e,f },
#else
#define M_DEFINE_PROCEDURE(a,b,english,c,d,e,f) { c,d,e,f },
#endif /* ACTIVE_EDITOR*/
#else
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_PROCEDURE(a,b,english,c,d,e,f) { b,english,c,e,f },
#else
#define M_DEFINE_PROCEDURE(a,b,english,c,d,e,f) { c,e,f },
#endif /* ACTIVE_EDITOR*/
#endif /* _AI_LIB_*/
#include "DefProc.h"
#undef M_DEFINE_PROCEDURE
}
#else /* AI_USE_SCRIPT */
/* Procedure initialisation*/
#if defined(_AI_LIB_)
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_PROCEDURE(a,b,english,c,d,e,f) { b,english,d,f },
#else
#define M_DEFINE_PROCEDURE(a,b,english,c,d,e,f) { d,f },
#endif /* ACTIVE_EDITOR*/
#else
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_PROCEDURE(a,b,english,c,d,e,f) { b,english,f },
#else
#define M_DEFINE_PROCEDURE(a,b,english,c,d,e,f) { f },
#endif /* ACTIVE_EDITOR*/
#endif /* _AI_LIB_*/
#include "DefProc.h"
#undef M_DEFINE_PROCEDURE
}
#endif /* AI_USE_SCRIPT */
#endif /* U64_AIDEBUG*/
#endif /* OPTIMIZED_COMMAND*/
;
#if ! defined(OPTIMIZED_COMMAND)
void fn_vSetProcedureUltraOperator(enum tdeProcedureId_ eProcId,unsigned char bFlag)
{
a_stProcedureTable[eProcId].bUltraProcedureFlag=bFlag;
};
#endif /* OPTIMIZED_COMMAND*/
unsigned char fn_ucGetProcedureUltraOperator(enum tdeProcedureId_ eProcId)
{
return(a_stProcedureTable[eProcId].bUltraProcedureFlag);
}
#if defined(_AI_LIB_)
tdp_fn_p_stProcedureFunctionPtr fn_p_fn_pGetProcedureFunctionPtr(enum tdeProcedureId_ eProcedureId)
{
return(a_stProcedureTable[eProcedureId].p_fn_p_stProcedureFunction);
}
#ifdef PROFILE_IA
void fn_vProcSaveTime(unsigned long ulTime, enum tdeProcedureId_ eProcedureId)
{
/* if level != 0, then stop time count of last function*/
if (ulIndice != 0)
{
p_ulTime[ulIndice - 1] = (ulTime - p_ulTime[ulIndice - 1]);
}
/* set time for this new function and add indice*/
p_ulTime[ulIndice++] = ulTime;
}
void fn_vProcComputeTime(unsigned long ulCurrentTime, unsigned long ulTime, enum tdeProcedureId_ eProcedureId)
{
/* compute total time for this function*/
a_stProcedureTable[eProcedureId].ulCallCtr++;
a_stProcedureTable[eProcedureId].ulTimeCtr += (ulCurrentTime - ulTime)/5;
/* compute own time for this function*/
ulIndice--;
/* compute the time for this function*/
a_stProcedureTable[eProcedureId].ulOwnTimeCtr += ((ulCurrentTime - p_ulTime[ulIndice]) / 5);
p_ulTime[ulIndice] = 0;
if (ulIndice != 0)
{
/* level != 0, then restart previous function time*/
p_ulTime[ulIndice-1] = ulCurrentTime - p_ulTime[ulIndice-1];
}
}
void dumpProc()
{
int i;
char string[250];
strcpy(string,"x:\\cpa\\");
strcat(string,fn_p_szGetLevelName());
strcat(string,".txt");
file = fopen(string,"a+");
if (file == NULL)
return;
for (i=0;i<(long)eNbProcedure;i++)
{
if (a_stProcedureTable[i].ulCallCtr)
{
fprintf(file,"%s %i %i %i %i %i\n",
a_stProcedureTable[i].szProcedureScriptName,
a_stProcedureTable[i].ulCallCtr,
a_stProcedureTable[i].ulTimeCtr,
a_stProcedureTable[i].ulOwnTimeCtr,
a_stProcedureTable[i].ulTimeCtr / a_stProcedureTable[i].ulCallCtr,
a_stProcedureTable[i].ulOwnTimeCtr / a_stProcedureTable[i].ulCallCtr);
}
else
{
fprintf(file,"%s %i %i %i %i %i\n",
a_stProcedureTable[i].szProcedureScriptName,
0,
0,
0,
0,
0);
}
}
fclose(file);
}
void clearProc()
{
int i;
for (i=0;i<(long)eNbProcedure;i++)
{
a_stProcedureTable[i].ulCallCtr = 0;
a_stProcedureTable[i].ulTimeCtr = 0;
a_stProcedureTable[i].ulOwnTimeCtr = 0;
}
}
#endif /* PROFILE_IA*/
#endif /* _AI_LIB_*/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
enum tdeProcedureId_ fn_eGetNbProcedure()
{
return(eNbProcedure);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
#if defined(__DEBUG_AI__) || defined(ACTIVE_EDITOR) || defined(U64_AIDEBUG)
char *szGetProcedureTypeInParamFromId(enum tdeProcedureId_ eProcedureId)
{
return(a_stProcedureTable[eProcedureId].szProcedureTypeParam);
}
#endif /* __DEBUG_AI__ ACTIVE_EDITOR*/
#if defined(ACTIVE_EDITOR)
char *szGetProcedureTypeOutParamFromId(enum tdeProcedureId_ eProcedureId)
{
eProcedureId=eProcedureId;
return(USE_NO_PARAM);
}
enum tdeProcedureId_ fn_eFindProcedureIdFromEditorName(char *szProcedure)
{
short wProcedureEntry;
for(wProcedureEntry=0;wProcedureEntry<fn_eGetNbProcedure();wProcedureEntry++)
{
if (!stricmp(a_stProcedureTable[wProcedureEntry].szProcedureEditorName,szProcedure))
{
return((enum tdeProcedureId_) wProcedureEntry);
}
}
return(fn_eGetNbProcedure());
}
char *szFindProcedureEditorNameFromId(enum tdeProcedureId_ eProcedureId)
{
return(a_stProcedureTable[eProcedureId].szProcedureEditorName);
}
#endif /* ACTIVE_EDITOR*/
#if defined (AI_USE_SCRIPT)
char *szFindProcedureScriptNameFromId(enum tdeProcedureId_ eProcedureId)
{
return(a_stProcedureTable[eProcedureId].szProcedureScriptName);
}
#endif /* AI_USE_SCRIPT */
#if defined (AI_USE_SCRIPT)
enum tdeProcedureId_ fn_eFindProcedureIdFromScriptName(char *szProcedure)
{
short wProcedureEntry;
for(wProcedureEntry=0;wProcedureEntry<fn_eGetNbProcedure();wProcedureEntry++)
{
if (!stricmp(a_stProcedureTable[wProcedureEntry].szProcedureScriptName,szProcedure))
{
return((enum tdeProcedureId_) wProcedureEntry);
}
}
return(fn_eGetNbProcedure());
}
#endif /* AI_USE_SCRIPT */
#if !defined(OPTIMIZED_COMMAND)
#if defined(ACTIVE_EDITOR)
void fn_vDefineProcedureEntry(enum tdeProcedureId_ eProcedureId,char *szProcedureEditorName,char *szProcedureEditorName_En,char *szProcedureScriptName,tdp_fn_p_stProcedureFunctionPtr p_fn_p_stProcedureFunction,char *szProcedureTypeParam)
#else
void fn_vDefineProcedureEntry(enum tdeProcedureId_ eProcedureId,char *szProcedureScriptName,tdp_fn_p_stProcedureFunctionPtr p_fn_p_stProcedureFunction,char *szProcedureTypeParam)
#endif /* ACTIVE_EDITOR*/
{
if (
(eProcedureId<fn_eGetNbProcedure())
#if defined(ACTIVE_EDITOR)
&&(strlen(szProcedureEditorName)<=C_MAX_SIZE_PROCEDURE_EDITOR_NAME)
#endif /* ACTIVE_EDITOR*/
&&(strlen(szProcedureScriptName)<=C_MAX_SIZE_PROCEDURE_SCRIPT_NAME)
&&(strlen(szProcedureTypeParam)<=C_MAX_PROCEDURE_NB_PARAM)
&&(fn_ucCheckTypeParam(szProcedureTypeParam))
)
{
#if defined(ACTIVE_EDITOR)
strcpy(a_stProcedureTable[eProcedureId].szProcedureEditorName,szProcedureEditorName);
#endif /* ACTIVE_EDITOR*/
strcpy(a_stProcedureTable[eProcedureId].szProcedureScriptName,szProcedureScriptName);
a_stProcedureTable[eProcedureId].p_fn_p_stProcedureFunction=p_fn_p_stProcedureFunction;
strcpy(a_stProcedureTable[eProcedureId].szProcedureTypeParam,szProcedureTypeParam);
}
else
{
char str[C_MAX_LENGTH_STRING];
sprintf(str,"Error while defining %s procedure in %s\n",szProcedureScriptName,__FILE__);
M_AIFatalErrorMsg(E_uwAIFatalNotValidProcedure,str);
}
}
#endif /* OPTIMIZED_COMMAND*/
#if !defined(OPTIMIZED_COMMAND)
#if defined(__DEBUG_AI__)
void fn_vInitProcedureTable(tdp_fn_p_stProcedureFunctionPtr fn_p_stDefaultProcedureFunctionPointer)
{
short wProcedureEntry;
for(wProcedureEntry=0;wProcedureEntry<fn_eGetNbProcedure();wProcedureEntry++)
{
fn_vDefineProcedureEntry(M_PROCEDURE_ENTRY((enum tdeProcedureId_) wProcedureEntry,"","","",fn_p_stDefaultProcedureFunctionPointer,USE_NO_PARAM));
/* ULTRA OPERATOR USAGE : FALSE AS A DEFAULT*/
fn_vSetProcedureUltraOperator((enum tdeProcedureId_) wProcedureEntry,NOT_ULTRA_ABLE);
}
}
void fn_vCheckProcedureTable(tdp_fn_p_stProcedureFunctionPtr fn_p_stDefaultProcedureFunctionPointer)
{
short wProcedureEntry;
char str[C_MAX_LENGTH_STRING];
size_t lLen;
size_t lMaxLengthScriptName=0;
#if defined(ACTIVE_EDITOR)
size_t lMaxLengthEditorName=0;
#endif /* ACTIVE_EDITOR*/
size_t lMaxLengthParam=0;
for(wProcedureEntry=0;wProcedureEntry<fn_eGetNbProcedure();wProcedureEntry++)
{
if (fn_p_fn_pGetProcedureFunctionPtr((enum tdeProcedureId_) wProcedureEntry)==fn_p_stDefaultProcedureFunctionPointer)
{
sprintf(str,"Error while defining %s procedure in %s\n",a_stProcedureTable[wProcedureEntry].szProcedureScriptName,__FILE__);
M_AIFatalErrorMsg(E_uwAIFatalNotValidProcedure,str);
}
if ((lLen=strlen(a_stProcedureTable[wProcedureEntry].szProcedureScriptName))>lMaxLengthScriptName)
{
lMaxLengthScriptName=lLen;
}
#if defined(ACTIVE_EDITOR)
if ((lLen=strlen(a_stProcedureTable[wProcedureEntry].szProcedureEditorName))>lMaxLengthEditorName)
{
lMaxLengthEditorName=lLen;
}
#endif /* ACTIVE_EDITOR*/
if ((lLen=strlen(a_stProcedureTable[wProcedureEntry].szProcedureTypeParam))>lMaxLengthParam)
{
lMaxLengthParam=lLen;
}
}
#if !defined(U64)
{
if (lMaxLengthScriptName<C_MAX_SIZE_PROCEDURE_SCRIPT_NAME)
{
sprintf(str,"*** AI : You should reduce C_MAX_SIZE_PROCEDURE_SCRIPT_NAME in %s to %d\n",__FILE__,lMaxLengthScriptName);
OutputDebugString(str);
}
#if defined(ACTIVE_EDITOR)
if (lMaxLengthEditorName<C_MAX_SIZE_PROCEDURE_EDITOR_NAME)
{
sprintf(str,"*** AI : You should reduce C_MAX_SIZE_PROCEDURE_EDITOR_NAME in %s to %d\n",__FILE__,lMaxLengthEditorName);
OutputDebugString(str);
}
#endif /* ACTIVE_EDITOR*/
if (lMaxLengthParam<C_MAX_PROCEDURE_NB_PARAM)
{
sprintf(str,"*** AI : You should reduce C_MAX_PROCEDURE_NB_PARAM in %s to %d\n",__FILE__,lMaxLengthParam);
OutputDebugString(str);
}
}
#endif /* U64*/
}
#endif /* __DEBUG_AI__*/
#endif /* OPTIMIZED_COMMAND*/

View File

@@ -0,0 +1,610 @@
#if defined(_AI_LIB_)
#include "AIUseCPA.h"
#include "specif/AIOption.h"
#include "AIMacros.h"
#include "AI_Erm.h"
/* so that exported functions are effectively exported !*/
#include "Convert.h"
#include "ProtVar.h"
#include "EnumVar.h"
#include "VarType.h"
#else
#include <string.h>
#include "specif/AIOption.h"
#include "EnumVar.h"
#include "VarType.h"
#include "ConvVar.h"
#include "ConvCst.h"
#endif /* _AI_LIB_*/
/******************************************************************************/
/* dsgvar types */
/******************************************************************************/
#define C_MAX_SIZE_DSGVAR_NAME 20
#define NB_MAX_DSGVAR_PARAM 4
#define NB_MAX_DSGVAR_DEFAULT_PARAM 12
typedef struct tdstDsgVarTypeTableEntry_
{
/* string used in editor*/
#if defined(ACTIVE_EDITOR)
char szEditorName[C_MAX_SIZE_DSGVAR_NAME+1];
#endif /* ACTIVE_EDITOR*/
#if defined (AI_USE_SCRIPT)
/* string used in script*/
char szScriptName[C_MAX_SIZE_DSGVAR_NAME+1];
#endif /* AI_USE_SCRIPT */
enum tdeVariableType_ eVariableType;
#if defined(ACTIVE_EDITOR)
char szParamType[2];
char szParamSubType[2];
#endif /* ACTIVE_EDITOR*/
#if defined(_AI_LIB_)
tdp_fn_ucGetDsgVarFunctionPtr p_fn_ucGetDsgVarFunction;
tdp_fn_ucSetDsgVarFunctionPtr p_fn_ucSetDsgVarFunction;
#endif /* _AI_LIB_ */
} tdstDsgVarTypeTableEntry;
/*
static tdstDsgVarTypeTableEntry a_stDsgVarTypeTable[eNbDsgVarType]=
{
#if defined(_AI_LIB_)
#if defined (AI_USE_SCRIPT)
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_DSGVAR_TYPE(a,b,c,d,e,f,g,h) {b,c,d,e,f},
#else
#define M_DEFINE_DSGVAR_TYPE(a,b,c,d,e,f,g,h) {c,d,e,f},
#endif // ACTIVE_EDITOR
#else // AI_USE_SCRIPT
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_DSGVAR_TYPE(a,b,c,d,e,f,g,h) {b,d,e,f},
#else
#define M_DEFINE_DSGVAR_TYPE(a,b,c,d,e,f,g,h) {d,e,f},
#endif // ACTIVE_EDITOR
#endif // AI_USE_SCRIPT
#else
#if defined (AI_USE_SCRIPT)
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_DSGVAR_TYPE(a,b,c,d,e,f,g,h) {b,c,d},
#else
#define M_DEFINE_DSGVAR_TYPE(a,b,c,d,e,f,g,h) {c,d},
#endif // ACTIVE_EDITOR
#else // AI_USE_SCRIPT
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_DSGVAR_TYPE(a,b,c,d,e,f,g,h) {b,d},
#else
#define M_DEFINE_DSGVAR_TYPE(a,b,c,d,e,f,g,h) {d},
#endif // ACTIVE_EDITOR
#endif // AI_USE_SCRIPT
#endif // _AI_LIB_
#include "DefVar.h"
#undef M_DEFINE_DSGVAR_TYPE
};
*/
static tdstDsgVarTypeTableEntry a_stDsgVarTypeTable[eNbDsgVarType]=
{
#if defined(_AI_LIB_)
#if defined (AI_USE_SCRIPT)
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_DSGVAR_TYPE(a,b,c,d,e,f,g,h,i,j) {b,c,d,e,f,g,h},
#else
#define M_DEFINE_DSGVAR_TYPE(a,b,c,d,e,f,g,h,i,j) {c,d,g,h},
#endif /* ACTIVE_EDITOR*/
#else /* AI_USE_SCRIPT */
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_DSGVAR_TYPE(a,b,c,d,e,f,g,h,i,j) {b,d,e,f,g,h},
#else
#define M_DEFINE_DSGVAR_TYPE(a,b,c,d,e,f,g,h,i,j) {d,g,h},
#endif /* ACTIVE_EDITOR*/
#endif /* AI_USE_SCRIPT */
#else
#if defined (AI_USE_SCRIPT)
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_DSGVAR_TYPE(a,b,c,d,e,f,g,h,i,j) {b,c,d,e,f},
#else
#define M_DEFINE_DSGVAR_TYPE(a,b,c,d,e,f,g,h,i,j) {c,d},
#endif /* ACTIVE_EDITOR*/
#else /* AI_USE_SCRIPT */
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_DSGVAR_TYPE(a,b,c,d,e,f,g,h,i,j) {b,d,e,f},
#else
#define M_DEFINE_DSGVAR_TYPE(a,b,c,d,e,f,g,h,i,j) {d},
#endif /* ACTIVE_EDITOR*/
#endif /* AI_USE_SCRIPT */
#endif /* _AI_LIB_ */
#include "DefVar.h"
#undef M_DEFINE_DSGVAR_TYPE
};
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
enum tdeDsgVarTypeId_ fn_eGetNbDsgVarType()
{
return(eNbDsgVarType);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
#if defined(__DEBUG_AI__)
char *szFindDsgVarTypeScriptNameFromId(enum tdeDsgVarTypeId_ eDsgVarTypeId)
{
#if defined(__DEBUG_AI__)
if (!M_IsDsgVarTypeIdValid(eDsgVarTypeId))
return(NULL);
#endif
return(a_stDsgVarTypeTable[eDsgVarTypeId].szScriptName);
}
#endif
#if defined(_AI_LIB_)
tdp_fn_ucGetDsgVarFunctionPtr fn_p_fn_pGetDsgVarGetFunctionPtr(enum tdeDsgVarTypeId_ eDsgVarTypeId)
{
return(a_stDsgVarTypeTable[eDsgVarTypeId].p_fn_ucGetDsgVarFunction);
}
tdp_fn_ucSetDsgVarFunctionPtr fn_p_fn_pGetDsgVarSetFunctionPtr(enum tdeDsgVarTypeId_ eDsgVarTypeId)
{
return(a_stDsgVarTypeTable[eDsgVarTypeId].p_fn_ucSetDsgVarFunction);
}
#endif
#if defined(ACTIVE_EDITOR)
char *fn_szFindStringTypeFromVariableType(tdeVariableType eType)
{
int i;
for(i=0;i<fn_eGetNbDsgVarType();i++)
{
if (a_stDsgVarTypeTable[i].eVariableType==eType)
{
return(a_stDsgVarTypeTable[i].szParamType);
}
}
return(USE_NO_PARAM);
}
char *fn_szFindStringTypeFromDsgVarType(enum tdeDsgVarTypeId_ eDsgVarTypeId)
{
return(a_stDsgVarTypeTable[eDsgVarTypeId].szParamType);
}
char *fn_szFindStringSubTypeFromDsgVarType(enum tdeDsgVarTypeId_ eDsgVarTypeId)
{
return(a_stDsgVarTypeTable[eDsgVarTypeId].szParamSubType);
}
enum tdeDsgVarTypeId_ fn_eFindDsgVarTypeIdFromEditorName(char *szDsgVarType)
{
short wDsgVarTypeEntry;
for(wDsgVarTypeEntry=0;wDsgVarTypeEntry<fn_eGetNbDsgVarType();wDsgVarTypeEntry++)
{
if (!stricmp(a_stDsgVarTypeTable[wDsgVarTypeEntry].szEditorName,szDsgVarType))
{
return((enum tdeDsgVarTypeId_) wDsgVarTypeEntry);
}
}
return(fn_eGetNbDsgVarType());
}
char *szFindDsgVarTypeEditorNameFromId(enum tdeDsgVarTypeId_ eDsgVarTypeId)
{
#if defined(__DEBUG_AI__)
if (!M_IsDsgVarTypeIdValid(eDsgVarTypeId))
return(NULL);
#endif
return(a_stDsgVarTypeTable[eDsgVarTypeId].szEditorName);
}
#endif /* ACTIVE_EDITOR*/
/*#if defined(ACTIVE_EDITOR) */
enum tdeVariableType_ fn_GetDsgVarType(enum tdeDsgVarTypeId_ eDsgVarTypeId)
{
#if defined(__DEBUG_AI__)
if (!M_IsDsgVarTypeIdValid(eDsgVarTypeId))
return(E_vt_None);
#endif
return(a_stDsgVarTypeTable[eDsgVarTypeId].eVariableType);
}
/*#endif*/
#if defined (AI_USE_SCRIPT)
enum tdeDsgVarTypeId_ fn_eFindDsgVarTypeIdFromScriptName(char *szDsgVarType)
{
short wDsgVarTypeEntry;
for(wDsgVarTypeEntry=0;wDsgVarTypeEntry<fn_eGetNbDsgVarType();wDsgVarTypeEntry++)
{
if (!stricmp(a_stDsgVarTypeTable[wDsgVarTypeEntry].szScriptName,szDsgVarType))
{
return((enum tdeDsgVarTypeId_) wDsgVarTypeEntry);
}
}
return(fn_eGetNbDsgVarType());
}
#endif /* AI_USE_SCRIPT */
/******************************************************************************/
/* for SAI save types */
/******************************************************************************/
/******************************************************************************/
/* for SAI save types */
/******************************************************************************/
#if !defined(_AI_LIB_) && defined(__SAI_Enum_h__)
#define KNOW_SAI
#endif
#define MAX_LENGTH_SAVE_TYPE_EDITOR_NAME 20
#define MAX_LENGTH_SAVE_TYPE_SCRIPT_NAME 20
typedef struct tdstSaveTypeEntry_
{
#if defined(ACTIVE_EDITOR)
char szEditorName[MAX_LENGTH_SAVE_TYPE_EDITOR_NAME];
#endif
#if defined (AI_USE_SCRIPT)
char szScriptName[MAX_LENGTH_SAVE_TYPE_SCRIPT_NAME];
#endif /* AI_USE_SCRIPT */
#if defined(_AI_LIB_) || defined(KNOW_SAI)
SAI_tdeFlags eFlags;
#endif /* _AI_LIB_ || KNOW_SAI */
} tdstSaveTypeEntry;
tdstSaveTypeEntry a_st_SaveTypeTable[] =
{
#if defined (AI_USE_SCRIPT)
#if defined(_AI_LIB_) || defined(KNOW_SAI)
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_DSGVAR_SAVE_TYPE(a,b,c) {a,b,c},
#else
#define M_DEFINE_DSGVAR_SAVE_TYPE(a,b,c) {b,c},
#endif /* ACTIVE_EDITOR*/
#else
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_DSGVAR_SAVE_TYPE(a,b,c) {a,b},
#else
#define M_DEFINE_DSGVAR_SAVE_TYPE(a,b,c) {b},
#endif /* ACTIVE_EDITOR*/
#endif
#else /* AI_USE_SCRIPT */
#if defined(_AI_LIB_) || defined(KNOW_SAI)
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_DSGVAR_SAVE_TYPE(a,b,c) {a,c},
#else
#define M_DEFINE_DSGVAR_SAVE_TYPE(a,b,c) {c},
#endif /* ACTIVE_EDITOR*/
#else
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_DSGVAR_SAVE_TYPE(a,b,c) {a},
#else
#define M_DEFINE_DSGVAR_SAVE_TYPE(a,b,c) { },
#endif /* ACTIVE_EDITOR*/
#endif
#endif /* AI_USE_SCRIPT */
#include "DefSAI.h"
#undef M_DEFINE_DSGVAR_SAVE_TYPE
};
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
unsigned char fn_ucGetSaveTypeNumber()
{
return((unsigned char) (sizeof(a_st_SaveTypeTable)/sizeof(a_st_SaveTypeTable[0])));
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
unsigned char fn_ucDefaultSaveTypeNumber()
{
return(DEFAULT_DSGVAR_SAVE_TYPE_ENTRY);
}
#if defined(_AI_LIB_) || defined(KNOW_SAI)
#if defined (AI_USE_SCRIPT)
#if defined(WIN32) && defined(_DEBUG) /* on PC, and in debug versions */
#ifdef __cplusplus
extern "C"
{
#endif
extern ACP_tdxBool g_bIsLoadingAnAlways ;
#ifdef __cplusplus
}
#endif
#endif /* WIN32 && _DEBUG */
SAI_tdeFlags fn_eFindSaveTypeFromScriptName(char *szSaveType, char *_p_szPersoName, unsigned char _ucVarId )
{
unsigned char i;
for (i=0;i<fn_ucGetSaveTypeNumber();i++)
{
if (!stricmp(a_st_SaveTypeTable[i].szScriptName,szSaveType))
{
/* it is strictly forbidden for an actor to jave a dsgvar saved in the general save file if it is not in the fix load block */
#if !defined ( ACTIVE_EDITOR )
if
(
( a_st_SaveTypeTable[i].eFlags & SAI_ePlayerSaveMask )
&& !GAM_fn_bIsEngineInFixMode()
)
{
char szErrorMsg[200];
sprintf(
szErrorMsg,
"Perso %s has dsgvar %d with a Player save type, but it is not loaded with the Fix block.",
_p_szPersoName,
_ucVarId
);
M_AIFatalErrorMsg(E_uwAIFatalInvalidDsgvarSaveType,szErrorMsg);
}
#if defined(WIN32) && defined(_DEBUG) /* on PC, and in debug versions */
else if
(
g_bIsLoadingAnAlways /* if loading an always */
&& ( a_st_SaveTypeTable[i].eFlags & SAI_eAllSaveMask ) /* and there is a save type */
)
{
char szErrorMsg[200];
sprintf(
szErrorMsg,
"Perso %s has dsgvar %d with a save type, but it is an always.",
_p_szPersoName,
_ucVarId
);
M_AIFatalErrorMsg(E_uwAIFatalInvalidDsgvarSaveType,szErrorMsg);
}
#endif /* WIN32 && _DEBUG */
#endif /* ! ACTIVE_EDITOR */
return(a_st_SaveTypeTable[i].eFlags);
}
}
return(a_st_SaveTypeTable[fn_ucDefaultSaveTypeNumber()].eFlags);
}
#endif /* AI_USE_SCRIPT */
SAI_tdeFlags fn_eFindSaveTypeFromSaveTypeNumber(unsigned char ucSaveTypeNumber)
{
return(a_st_SaveTypeTable[ucSaveTypeNumber].eFlags);
}
#endif /* _AI_LIB_ || KNOW_SAI */
#if defined (AI_USE_SCRIPT)
char *fn_szFindScriptNameFromSaveTypeNumber(unsigned char ucSaveTypeNumber)
{
return(a_st_SaveTypeTable[ucSaveTypeNumber].szScriptName);
}
#endif /* AI_USE_SCRIPT */
#if defined(ACTIVE_EDITOR)
char *fn_szFindEditorNameFromSaveTypeNumber(unsigned char ucSaveTypeNumber)
{
return(a_st_SaveTypeTable[ucSaveTypeNumber].szEditorName);
}
#if defined(_AI_LIB_) || defined(KNOW_SAI)
SAI_tdeFlags fn_eFindSaveTypeFromEditorName(char *szSaveType)
{
unsigned char i;
for (i=0;i<fn_ucGetSaveTypeNumber();i++)
{
if (!stricmp(a_st_SaveTypeTable[i].szEditorName,szSaveType))
{
return(a_st_SaveTypeTable[i].eFlags);
}
}
return(a_st_SaveTypeTable[fn_ucDefaultSaveTypeNumber()].eFlags);
}
char *fn_szFindEditorNameFromSaveType(SAI_tdeFlags eFlags)
{
unsigned char i;
for (i=0;i<fn_ucGetSaveTypeNumber();i++)
{
if (a_st_SaveTypeTable[i].eFlags==eFlags)
{
return(a_st_SaveTypeTable[i].szEditorName);
}
}
return(a_st_SaveTypeTable[fn_ucDefaultSaveTypeNumber()].szEditorName);
}
char *fn_szFindScriptNameFromSaveType(SAI_tdeFlags eFlags)
{
unsigned char i;
for (i=0;i<fn_ucGetSaveTypeNumber();i++)
{
if (a_st_SaveTypeTable[i].eFlags==eFlags)
{
return(a_st_SaveTypeTable[i].szScriptName);
}
}
return(a_st_SaveTypeTable[fn_ucDefaultSaveTypeNumber()].szScriptName);
}
unsigned char fn_ucFindSaveTypeNumberFromScriptName(char *szSaveType)
{
unsigned char i;
for (i=0;i<fn_ucGetSaveTypeNumber();i++)
{
if (!stricmp(a_st_SaveTypeTable[i].szScriptName,szSaveType))
{
return(i);
}
}
return(fn_ucGetSaveTypeNumber());
}
#endif /* _AI_LIB_ || KNOW_SAI*/
#endif /* ACTIVE_EDITOR*/
/******************************************************************************/
/* for OTI init types */
/******************************************************************************/
#if !defined(_AI_LIB_) && defined(__OBJINIT_h__)
#define KNOW_OTI
#endif
#define MAX_LENGTH_INIT_TYPE_EDITOR_NAME 20
#define MAX_LENGTH_INIT_TYPE_SCRIPT_NAME 20
typedef struct tdstInitTypeEntry_
{
#if defined(ACTIVE_EDITOR)
char szEditorName[MAX_LENGTH_INIT_TYPE_EDITOR_NAME];
#endif
#if defined (AI_USE_SCRIPT)
char szScriptName[MAX_LENGTH_INIT_TYPE_SCRIPT_NAME];
#endif /* AI_USE_SCRIPT */
#if defined(_AI_LIB_) || defined(KNOW_OTI)
tdeObjectTreeInit eFlags;
#endif /* _AI_LIB_ || KNOW_OTI */
} tdstInitTypeEntry;
tdstInitTypeEntry a_st_InitTypeTable[] =
{
#if defined (AI_USE_SCRIPT)
#if defined(_AI_LIB_) || defined(KNOW_OTI)
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_DSGVAR_INIT_TYPE(a,b,c) {a,b,c},
#else
#define M_DEFINE_DSGVAR_INIT_TYPE(a,b,c) {b,c},
#endif /* ACTIVE_EDITOR*/
#else
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_DSGVAR_INIT_TYPE(a,b,c) {a,b},
#else
#define M_DEFINE_DSGVAR_INIT_TYPE(a,b,c) {b},
#endif /* ACTIVE_EDITOR*/
#endif
#else /* AI_USE_SCRIPT */
#if defined(_AI_LIB_) || defined(KNOW_OTI)
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_DSGVAR_INIT_TYPE(a,b,c) {a,c},
#else
#define M_DEFINE_DSGVAR_INIT_TYPE(a,b,c) {c},
#endif /* ACTIVE_EDITOR*/
#else
#if defined(ACTIVE_EDITOR)
#define M_DEFINE_DSGVAR_INIT_TYPE(a,b,c) {a},
#else
#define M_DEFINE_DSGVAR_INIT_TYPE(a,b,c) { },
#endif /* ACTIVE_EDITOR*/
#endif
#endif /* AI_USE_SCRIPT */
#include "DefOTI.h"
#undef M_DEFINE_DSGVAR_INIT_TYPE
};
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
unsigned char fn_ucGetInitTypeNumber()
{
return((unsigned char) (sizeof(a_st_InitTypeTable)/sizeof(a_st_InitTypeTable[0])));
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
unsigned char fn_ucDefaultInitTypeNumber()
{
return(DEFAULT_DSGVAR_INIT_TYPE_ENTRY);
}
#if defined(_AI_LIB_) || defined(KNOW_OTI)
#if defined (AI_USE_SCRIPT)
tdeObjectTreeInit fn_eFindInitTypeFromScriptName(char *szInitType)
{
unsigned char i;
for (i=0;i<fn_ucGetInitTypeNumber();i++)
{
if (!stricmp(a_st_InitTypeTable[i].szScriptName,szInitType))
{
return(a_st_InitTypeTable[i].eFlags);
}
}
return(a_st_InitTypeTable[fn_ucDefaultInitTypeNumber()].eFlags);
}
#endif /* AI_USE_SCRIPT */
tdeObjectTreeInit fn_eFindInitTypeFromInitTypeNumber(unsigned char ucInitTypeNumber)
{
return(a_st_InitTypeTable[ucInitTypeNumber].eFlags);
}
#endif /* _AI_LIB_ || KNOW_OTI*/
#if defined (AI_USE_SCRIPT)
char *fn_szFindScriptNameFromInitTypeNumber(unsigned char ucInitTypeNumber)
{
return(a_st_InitTypeTable[ucInitTypeNumber].szScriptName);
}
#endif /* AI_USE_SCRIPT */
#if defined(ACTIVE_EDITOR)
char *fn_szFindEditorNameFromInitTypeNumber(unsigned char ucInitTypeNumber)
{
return(a_st_InitTypeTable[ucInitTypeNumber].szEditorName);
}
#if defined(_AI_LIB_) || defined(KNOW_OTI)
tdeObjectTreeInit fn_eFindInitTypeFromEditorName(char *szInitType)
{
unsigned char i;
for (i=0;i<fn_ucGetInitTypeNumber();i++)
{
if (!stricmp(a_st_InitTypeTable[i].szEditorName,szInitType))
{
return(a_st_InitTypeTable[i].eFlags);
}
}
return(a_st_InitTypeTable[fn_ucDefaultInitTypeNumber()].eFlags);
}
char *fn_szFindEditorNameFromInitType(tdeObjectTreeInit eFlags)
{
unsigned char i;
for (i=0;i<fn_ucGetInitTypeNumber();i++)
{
if (a_st_InitTypeTable[i].eFlags==eFlags)
{
return(a_st_InitTypeTable[i].szEditorName);
}
}
return(a_st_InitTypeTable[fn_ucDefaultInitTypeNumber()].szEditorName);
}
char *fn_szFindScriptNameFromInitType(tdeObjectTreeInit eFlags)
{
unsigned char i;
for (i=0;i<fn_ucGetInitTypeNumber();i++)
{
if (a_st_InitTypeTable[i].eFlags==eFlags)
{
return(a_st_InitTypeTable[i].szScriptName);
}
}
return(a_st_InitTypeTable[fn_ucDefaultInitTypeNumber()].szScriptName);
}
unsigned char fn_ucFindInitTypeNumberFromScriptName(char *szInitType)
{
unsigned char i;
for (i=0;i<fn_ucGetInitTypeNumber();i++)
{
if (!stricmp(a_st_InitTypeTable[i].szScriptName,szInitType))
{
return(i);
}
}
return(fn_ucGetInitTypeNumber());
}
#endif /* _AI_LIB_ || KNOW_OTI*/
#endif /* ACTIVE_EDITOR*/

View File

@@ -0,0 +1,571 @@
/*---------------------------------------------------------------------------*/
/* Convert.c : Convert Id <-> string (mainly usefull for editor)*/
/* creation : 17/01/1997 (Olivier Couvreur)*/
/* modify : 29/01/1997 (Fabien Morales) Vertex param*/
/* modify : 31/01/1997 (Olivier Couvreur) lint verification*/
/* modify : 12/02/1997 (Fabien Morales) Module & DsgVarId param types*/
/* modify : 19/02/1997 (Olivier Couvreur) types checking functions (for editor)*/
/* modify : 26/02/1997 (Olivier Couvreur) new functions for editor type checking */
/* modify : 11/03/1997 (Olivier Couvreur) functions for editor transfered from several modules*/
/* modify : 25/03/1997 (Olivier Couvreur) ACTIVE_EDITOR support*/
/* modify : 21/05/1997 (Olivier Couvreur) HitPoints support*/
/* modify : 27/05/1997 (Olivier Couvreur) ZDD + ZDE stuff*/
/* modify : 27/06/1997 (Olivier Couvreur) Operators,Functions,Procedures,Conditions use functions pointers !*/
/*---------------------------------------------------------------------------*/
#include "AIUseCPA.h"
#include "specif/AIOption.h"
#include "AIMacros.h"
#include "AI_Erm.h"
#include "GsParam.h"
/* so that exported functions are effectively exported !*/
#include "Convert.h"
#if defined(ACTIVE_EDITOR)
#include "specif/ActTable.h"
#endif /* ACTIVE_EDITOR*/
#if !defined(OPTIMIZED_COMMAND)
/**********************************************************************/
/* list of all allowed char for defining types*/
char szAutorizedTypeParam[]= \
C_LONG_PARAM \
C_REAL_PARAM \
C_PERSO_PARAM \
C_VECTOR_PARAM \
C_MODULE_PARAM \
C_WAYPOINT_PARAM \
C_LIST_PARAM \
C_BOOLEAN_PARAM \
C_ACTION_PARAM \
C_ZDE_PERSO_PARAM \
C_ZDD_PERSO_PARAM \
C_ZDM_PERSO_PARAM \
C_ZDE_MODULE_PARAM \
C_ZDD_MODULE_PARAM \
C_BUTTON_PARAM \
C_STRING_PARAM \
C_MAP_PARAM \
C_MASK_PARAM \
C_MASK_PARAM \
C_SURFACE_PARAM \
C_LIPSYNCHRO_PARAM \
C_OBJECTTABLE_PARAM \
C_SECTOR_PARAM \
C_ENV_PARAM \
C_FAMILY_PARAM \
C_COMPORT_PARAM \
C_MY_REFLEX_COMPORT_PARAM \
C_MY_INTELL_COMPORT_PARAM \
C_REFLEX_COMPORT_PARAM \
C_INTELL_COMPORT_PARAM \
C_SOUNDEVENT_PARAM \
C_ALWAYS_PARAM \
C_POWER_PARAM \
C_PERSO_PARAM_ONLY \
C_FONT_PARAM \
C_TEXT_PARAM \
C_PARTICLEGENERATOR_PARAM \
C_GMT_PARAM \
C_MODEL_PARAM \
C_ARRAY_PARAM \
C_SUPEROBJECT_PARAM \
/*ANNECY CT 22/01/98 {*/
C_LIGHT_PARAM \
/*ENANNECY CT}*/
/*ANNECY Bart 02/02/98 {*/
C_CAPS_PARAM \
C_GRAPH_PARAM \
/*ENDANNECY Bart }*/
C_ZDR_PERSO_PARAM
;
/* return a pointer on a string containing all valid chars to define types*/
char *fn_szGetAutorizedTypeParam(void)
{
return (&szAutorizedTypeParam[0]);
}
/* check if a string contains only valid chars*/
unsigned char fn_ucCheckTypeParam(char *szTypeParam)
{
unsigned char Ok=0;
if (strlen(szTypeParam)<=C_MAX_NB_PARAM)
{
unsigned char i;
Ok=1;
for (i=0;((i<strlen(szTypeParam)) && (Ok==1));i++)
{
Ok=(unsigned char) (strchr(fn_szGetAutorizedTypeParam(),toupper(szTypeParam[i]))!=NULL);
}
}
if (!Ok)
{
M_AIFatalError(E_uwAIFatalWrongParamAction);
}
return(Ok);
}
#endif /* !OPTIMIZED_COMMAND*/
/**********************************************************************/
#if defined(ACTIVE_EDITOR)
/* check if two types are compatible*/
/* c1=c2*/
/* c1=toupper(c2)*/
/* l|l*/
/* L|l,L*/
/* x|x,l*/
/* X|l,L,x,X*/
/* Perso_Only=Perso*/
/* My_XX=XX (where XX is rul or rfx)*/
ACP_tdxBool fn_bIsCompatibleType(char c1,char c2)
{
if ((c1==c2) || (c1==(char) toupper(c2)) )
{
return(TRUE);
}
else if
(
(toupper(c1)==STRING1_TO_CHAR(C_REAL_PARAM)) &&
(toupper(c2)==STRING1_TO_CHAR(C_LONG_PARAM))
)
{
if(
(c1==STRING1_TO_CHAR(C_REAL_PARAM)) ||
(c2==STRING1_TO_CHAR(C_ADDR_LONG_PARAM))
)
{
return TRUE;
}
}
else if
(
(c1==STRING1_TO_CHAR(C_PERSO_PARAM_ONLY)) &&
(c2==STRING1_TO_CHAR(C_PERSO_PARAM))
)
{
return TRUE;
}
else if
(
(c1==STRING1_TO_CHAR(C_REFLEX_COMPORT_PARAM)) &&
(c2==STRING1_TO_CHAR(C_MY_REFLEX_COMPORT_PARAM))
)
{
return TRUE;
}
else if
(
(c1==STRING1_TO_CHAR(C_INTELL_COMPORT_PARAM)) &&
(c2==STRING1_TO_CHAR(C_MY_INTELL_COMPORT_PARAM))
)
{
return TRUE;
}
else if
(
(toupper(c2)==STRING1_TO_CHAR(C_COMPORT_PARAM)) &&
(
(c1==STRING1_TO_CHAR(C_INTELL_COMPORT_PARAM)) ||
(c1==STRING1_TO_CHAR(C_MY_INTELL_COMPORT_PARAM)) ||
(c1==STRING1_TO_CHAR(C_REFLEX_COMPORT_PARAM)) ||
(c1==STRING1_TO_CHAR(C_MY_REFLEX_COMPORT_PARAM))
)
)
{
return(TRUE);
}
else if
(
(toupper(c1)==STRING1_TO_CHAR(C_STRING_PARAM)) &&
(toupper(c2)==STRING1_TO_CHAR(C_TEXT_PARAM))
)
{
return TRUE;
}
else if
(
(toupper(c1)==STRING1_TO_CHAR(C_TEXT_PARAM)) &&
(toupper(c2)==STRING1_TO_CHAR(C_STRING_PARAM))
)
{
return TRUE;
}
return(FALSE);
}
/* check if two types are compatible for affectation*/
ACP_tdxBool fn_bIsCompatibleTypeForAffect(char c1,char c2)
{
if (c1==tolower(c2))
{
return TRUE;
}
else if
(
(c1==STRING1_TO_CHAR(C_ADDR_REAL_PARAM))
&&(toupper(c2)==STRING1_TO_CHAR(C_LONG_PARAM))
)
{
return TRUE;
}
return FALSE;
}
/* check if two string type are compatible*/
ACP_tdxBool fn_bIsCompatibleStringType(char *szType1,char *szType2)
{
size_t l=strlen(szType1);
if (l!=strlen(szType2))
{
return(FALSE);
}
else
{
size_t i;
for (i=0;i<l;i++)
{
if (!fn_bIsCompatibleType(szType1[i],szType2[i]))
return(FALSE);
}
}
return(TRUE);
}
ACP_tdxBool fn_bIsCompatibleStringTypeForAffect(char *szType1,char *szType2)
{
size_t l=strlen(szType1);
if (l!=strlen(szType2))
{
return(FALSE);
}
else
{
size_t i;
for (i=0;i<l;i++)
{
if (!fn_bIsCompatibleTypeForAffect(szType1[i],szType2[i]))
return(FALSE);
}
}
return(TRUE);
}
/*/
// get compatible type (c1 left, c2 right)
char fn_cGetCompatibleType(char c1,char c2)
{
if (c1==c2)
{
return(c1);
}
else
{
if(
(c1==(char) (*((char *) C_REAL_PARAM)) )
||(c2==(char) (*((char *) C_REAL_PARAM)) )
)
{
return( (char) (*((char *) C_REAL_PARAM)) );
}
return(c1);
}
}
// idem for a string
#define C_MAX_SIZE_INFOPARAM_NAME 50
char g_szStringType[C_MAX_SIZE_INFOPARAM_NAME+1];
char *fn_szGetCompatibleStringType(char *szType1,char *szType2)
{
size_t l=strlen(szType1);
g_szStringType[0]=0;
g_szStringType[l]=0;
if (l==strlen(szType2) )
{
size_t i;
for (i=0;i<l;i++)
{
g_szStringType[i]=fn_cGetCompatibleType(szType1[i],szType2[i]);
}
}
return(&g_szStringType[0]);
}
*/
#endif /* ACTIVE_EDITOR*/
/**********************************************************************/
#if defined(ACTIVE_EDITOR)
unsigned char fn_ucGetDefaultActionTableNbEntries()
{
return(DEFAULT_ACTION_TABLE_NB_ENTRIES);
}
unsigned char fn_ucGetMinActionTableNbEntries()
{
return(MIN_ACTION_TABLE_NB_ENTRIES);
}
unsigned char fn_ucGetMaxActionTableNbEntries()
{
return(MAX_ACTION_TABLE_NB_ENTRIES);
}
#endif /* ACTIVE_EDITOR*/
/**********************************************************************/
#if defined(ACTIVE_EDITOR)
/*
typedef struct tdstTypeConversionTableEntry_
{
enum tdeVariableType_ eType;
char szStringType[2];
} tdstTypeConversionTableEntry;
static tdstTypeConversionTableEntry a_stTypeConversiontable[]=
{
{E_vt_None, C_NO_PARAM},
{E_vt_Boolean, C_ADDR_BOOLEAN_PARAM},
{E_vt__128To127, C_ADDR_LONG_PARAM},
{E_vt_0To255, C_ADDR_LONG_PARAM},
{E_vt__32768To32767, C_ADDR_LONG_PARAM},
{E_vt_0To65535, C_ADDR_LONG_PARAM},
{E_vt_Integer, C_ADDR_LONG_PARAM},
{E_vt_PositiveInteger, C_ADDR_LONG_PARAM},
{E_vt_Float, C_ADDR_REAL_PARAM},
{E_vt_WayPoint, C_ADDR_WAYPOINT_PARAM},
{E_vt_Way, C_ADDR_LONG_PARAM},
{E_vt_Perso, C_ADDR_PERSO_PARAM},
{E_vt_List, C_ADDR_LIST_PARAM},
//{E_vt_1bit, C_ADDR_LONG_PARAM},
//{E_vt_2bit, C_ADDR_LONG_PARAM},
//{E_vt_3bit, C_ADDR_LONG_PARAM},
//{E_vt_4bit, C_ADDR_LONG_PARAM},
//{E_vt_5bit, C_ADDR_LONG_PARAM},
//{E_vt_6bit, C_ADDR_LONG_PARAM},
//{E_vt_7bit, C_ADDR_LONG_PARAM},
{E_vt_MetaActionReturn, C_ADDR_LONG_PARAM},
{E_vt_Vector, C_ADDR_VECTOR_PARAM},
{E_vt_Module, C_ADDR_LONG_PARAM},
{E_vt_DsgVarId, C_ADDR_LONG_PARAM},
{E_vt_Button, C_BUTTON_PARAM},
{E_vt_Mask, C_MASK_PARAM},
{E_vt_Text, C_ADDR_TEXT_PARAM},
{E_vt_GameMaterial, C_ADDR_GMT_PARAM},
{E_vt_Action, C_ADDR_ACTION_PARAM},
//{E_vt_Comport, C_ADDR_COMPORT_PARAM}
{E_vt_Array, C_ADDR_ARRAY_PARAM}
};
int fn_TypeConversionSize()
{
return(sizeof(a_stTypeConversiontable)/sizeof(a_stTypeConversiontable[0]));
}
char *fn_szFindStringTypeFromVariableType(tdeVariableType eType)
{
int i;
for(i=0;i<fn_TypeConversionSize();i++)
{
if (a_stTypeConversiontable[i].eType==eType)
{
return(a_stTypeConversiontable[i].szStringType);
}
}
return(USE_NO_PARAM);
}
*/
ACP_tdxBool IsADDRType(char cType)
{
return((ACP_tdxBool) islower((int) cType) );
}
char fn_cConvertToADDRType(char cType)
{
return((char) tolower((int) cType) );
}
char fn_cConvertFromADDRType(char cType)
{
return((char) toupper((int) cType) );
}
#endif /* ACTIVE_EDITOR*/
/**********************************************************************************************************************/
/* for multilanguage support : old aiinfo.c */
#if defined(ACTIVE_EDITOR)
/* C'est pour virer Proc,Cond,Action etc...*/
static char *fn_szConvertString(char *str)
{
char *ptr;
if ((ptr=strchr(str,'_'))!=NULL)
{
ptr++;
}
else
{
ptr=str;
}
return(ptr);
}
/* C'est pour Xavier qui veut que les noms des conditions <> <= >= etc soit les m<>mes en anglais et en francais !!!*/
static char *fn_szConvertConditionString(char *str1,char *str2)
{
if (!isalpha(str2[0]))
{
return(fn_szConvertString(str2));
}
return(fn_szConvertString(str1));
}
/* C'est pour Xavier qui veut qu'il y ait bijection entre les mots cl<63>s et les types des variables designers*/
/* C'est pour Xavier qui veut que les noms des types des variables commencent par une lettre !!!*/
static char TempChar[200];
static char *fn_szConvertDsgVarString(char *str1,char *str2)
{
if (!strnicmp(str2,"Type",4))
{
sprintf(&TempChar[0],"%sType",str1);
return(fn_szConvertString(&TempChar[0]));
}
else if ((isdigit(str1[0])) || (str1[0]=='_') )
{
sprintf(&TempChar[0],"Integer%s",str1);
return(&TempChar[0]);
}
return(str1);
}
void fn_vWriteAILangue()
{
FILE *fp;
if ((fp=fopen(AI_MULTI_LANGUAGE_SCRIPT,"wt"))!=NULL)
{
#define M_BAR "------------------------------------------------------------------"
#define M_WRITE_ALL_COMMAND_START(title,nb) fprintf(fp,";%s\n;%s\n;%s\n{%s:(%d)\n",M_BAR,title,M_BAR,title,nb);
#define M_WRITE_ALL_COMMAND_END() fprintf(fp,"}\n\n");
#define M_WRITE_ONE_COMMAND(title,key,fr,gb) \
fprintf(fp,"\t{%s:%s\n",title,key); \
fprintf(fp,"\t\t%s(%s)\n",AI_FRENCH,fr); \
fprintf(fp,"\t\t%s(%s)\n",AI_ENGLISH,gb); \
fprintf(fp,"\t}\n\n");
/* MetaActions*/
#define M_WRITE_ALL_METAACTIONS(nb) M_WRITE_ALL_COMMAND_START(AI_ALL_METAACTIONS,nb)
#define M_WRITE_ONE_METAACTION(key,fr,gb) M_WRITE_ONE_COMMAND(AI_ONE_METAACTION,key,fr,gb)
M_WRITE_ALL_METAACTIONS(fn_eGetNbMetaAction())
/*#define M_DEFINE_METAACTION(a,b,c,d,e,f) M_WRITE_ONE_METAACTION(c,b,fn_szConvertString(c))*/
#define M_DEFINE_METAACTION(a,b,english,c,d,e,f) M_WRITE_ONE_METAACTION(c,b,english)
#include "DefAct.h"
#undef M_DEFINE_METAACTION
M_WRITE_ALL_COMMAND_END()
/* Procedures*/
#define M_WRITE_ALL_PROCEDURES(nb) M_WRITE_ALL_COMMAND_START(AI_ALL_PROCEDURES,nb)
#define M_WRITE_ONE_PROCEDURE(key,fr,gb) M_WRITE_ONE_COMMAND(AI_ONE_PROCEDURE,key,fr,gb)
M_WRITE_ALL_PROCEDURES(fn_eGetNbProcedure())
/*#define M_DEFINE_PROCEDURE(a,b,c,d,e,f) M_WRITE_ONE_PROCEDURE(c,b,fn_szConvertString(c))*/
#define M_DEFINE_PROCEDURE(a,b,english,c,d,e,f) M_WRITE_ONE_PROCEDURE(c,b,english)
#include "DefProc.h"
#undef M_DEFINE_PROCEDURE
M_WRITE_ALL_COMMAND_END()
/* Functions*/
#define M_WRITE_ALL_FUNCTIONS(nb) M_WRITE_ALL_COMMAND_START(AI_ALL_FUNCTIONS,nb)
#define M_WRITE_ONE_FUNCTION(key,fr,gb) M_WRITE_ONE_COMMAND(AI_ONE_FUNCTION,key,fr,gb)
M_WRITE_ALL_FUNCTIONS(fn_eGetNbFunc())
/*#define M_DEFINE_FUNCTION(a,b,c,d,e,f,g) M_WRITE_ONE_FUNCTION(c,b,fn_szConvertString(c))*/
#define M_DEFINE_FUNCTION(a,b,english,c,d,e,f,g) M_WRITE_ONE_FUNCTION(c,b,english)
#include "DefFunc.h"
#undef M_DEFINE_FUNCTION
M_WRITE_ALL_COMMAND_END()
/* Conditions*/
#define M_WRITE_ALL_CONDITIONS(nb) M_WRITE_ALL_COMMAND_START(AI_ALL_CONDITIONS,nb)
#define M_WRITE_ONE_CONDITION(key,fr,gb) M_WRITE_ONE_COMMAND(AI_ONE_CONDITION,key,fr,gb)
M_WRITE_ALL_CONDITIONS(fn_eGetNbCond())
/*#define M_DEFINE_CONDITION(a,b,c,d,e,f) M_WRITE_ONE_CONDITION(c,b,fn_szConvertConditionString(c,b))*/
#define M_DEFINE_CONDITION(a,b,english,c,d,e,f) M_WRITE_ONE_CONDITION(c,b,english)
#include "DefCond.h"
#undef M_DEFINE_CONDITION
M_WRITE_ALL_COMMAND_END()
/* KeyWords*/
#define M_WRITE_ALL_KEYWORDS(nb) M_WRITE_ALL_COMMAND_START(AI_ALL_KEYWORDS,nb)
#define M_WRITE_ONE_KEYWORD(key,fr,gb) M_WRITE_ONE_COMMAND(AI_ONE_KEYWORD,key,fr,gb)
M_WRITE_ALL_KEYWORDS(fn_eGetNbKeyWord())
/*#define M_DEFINE_KEYWORD(a,b,c,d,e,f) M_WRITE_ONE_KEYWORD(c,b,fn_szConvertString(c))*/
#define M_DEFINE_KEYWORD(a,b,english,c,d,e,f) M_WRITE_ONE_KEYWORD(c,b,english)
#include "DefKey.h"
#undef M_DEFINE_KEYWORD
M_WRITE_ALL_COMMAND_END()
/* Fields*/
#define M_WRITE_ALL_FIELDS(nb) M_WRITE_ALL_COMMAND_START(AI_ALL_FIELDS,nb)
#define M_WRITE_ONE_FIELD(key,fr,gb) M_WRITE_ONE_COMMAND(AI_ONE_FIELD,key,fr,gb)
M_WRITE_ALL_FIELDS(fn_eGetNbField())
/*#define M_DEFINE_FIELD(a,b,c,d,e,f) M_WRITE_ONE_FIELD(c,b,fn_szConvertString(c))*/
#define M_DEFINE_FIELD(a,b,english,c,d,e,f) M_WRITE_ONE_FIELD(c,b,english)
#include "DefFild.h"
#undef M_DEFINE_FIELD
M_WRITE_ALL_COMMAND_END()
/* Designer variables*/
#define M_WRITE_ALL_DSGVAR_TYPES(nb) M_WRITE_ALL_COMMAND_START(AI_ALL_DSGVAR_TYPES,nb)
#define M_WRITE_ONE_DSGVAR_TYPE(key,fr,gb) M_WRITE_ONE_COMMAND(AI_ONE_DSGVAR_TYPE,key,fr,gb)
M_WRITE_ALL_DSGVAR_TYPES(fn_eGetNbDsgVarType())
#define M_DEFINE_DSGVAR_TYPE(a,b,c,d,e,f,g,h,i,j) M_WRITE_ONE_DSGVAR_TYPE(c,b,fn_szConvertDsgVarString(c,b))
#include "DefVar.h"
#undef M_DEFINE_DSGVAR_TYPE
M_WRITE_ALL_COMMAND_END()
/* SAI Type*/
#define M_WRITE_ALL_DSGVAR_SAVE_TYPES(nb) M_WRITE_ALL_COMMAND_START(AI_ALL_DSGVAR_SAVE_TYPES,nb)
#define M_WRITE_ONE_DSGVAR_SAVE_TYPE(key,fr,gb) M_WRITE_ONE_COMMAND(AI_ONE_DSGVAR_SAVE_TYPE,key,fr,gb)
M_WRITE_ALL_DSGVAR_SAVE_TYPES(fn_ucGetSaveTypeNumber())
#define M_DEFINE_DSGVAR_SAVE_TYPE(a,b,c) M_WRITE_ONE_DSGVAR_SAVE_TYPE(b,a,b)
#include "DefSAI.h"
#undef M_DEFINE_DSGVAR_SAVE_TYPE
M_WRITE_ALL_COMMAND_END()
/* OTI Type*/
#define M_WRITE_ALL_DSGVAR_INIT_TYPES(nb) M_WRITE_ALL_COMMAND_START(AI_ALL_DSGVAR_INIT_TYPES,nb)
#define M_WRITE_ONE_DSGVAR_INIT_TYPE(key,fr,gb) M_WRITE_ONE_COMMAND(AI_ONE_DSGVAR_INIT_TYPE,key,fr,gb)
M_WRITE_ALL_DSGVAR_INIT_TYPES(fn_ucGetInitTypeNumber())
#define M_DEFINE_DSGVAR_INIT_TYPE(a,b,c) M_WRITE_ONE_DSGVAR_INIT_TYPE(b,a,b)
#include "DefOTI.h"
#undef M_DEFINE_DSGVAR_INIT_TYPE
M_WRITE_ALL_COMMAND_END()
fclose(fp);
}
}
#endif /* ACTIVE_EDITOR*/

View File

@@ -0,0 +1,16 @@
/************************************************************************************************
* Name: DataRay2.c *
* Author: Christophe Giraud *
* (c) UBI Simulations Annecy *
************************************************************************************************/
/* prevent the message : unreferenced inline function has been removed*/
#pragma warning (disable : 4514)
#include "MTH.h"
#include "dataray2.h"
tdstExtendDatas4Ray stExtendDatas4Ray;

View File

@@ -0,0 +1,31 @@
/************************************************************************************************
* Name: DataRay2.h *
* Use : Datas structures for Rayman II *
* Author: Christophe Giraud *
* (c) UBI Simulations Annecy *
************************************************************************************************/
#ifndef _DATARAY2_H
#define _DATARAY2_H
/*ANNECY CG {*/
/*ANNECY VL 11/05/98{*/
/*#define C_MAXMAGICPOINTS 255*/
/*#define C_MAXAIRPOINTS 255*/
/*ENDANNECY VL}*/
typedef struct
{
int iMagicPoints4Ray;
int iMagicPointsMax4Ray;
/*ANNECY VL 11/05/98{*/
MTH_tdxReal xAirPoints4Ray;
MTH_tdxReal xAirPointsMax4Ray;
/*ENDANNECY VL}*/
} tdstExtendDatas4Ray;
extern tdstExtendDatas4Ray stExtendDatas4Ray;
/*ENDANNECY CG }*/
#endif /*_DATARAY2_H*/

View File

@@ -0,0 +1,477 @@
#include "AIUseCPA.h"
#include "specif/AIOption.h"
#include "AIMacros.h"
#include "AI_Erm.h"
#include "AI_Struc.h"
#include "StrIntel.h"
#if !defined(OPTIMIZED_COMMAND)
#include "EnumFild.h"
#include "Convert.h"
#endif
#include "specif/AITools.h"
/*************************************/
/* get set field default functions : */
/*************************************/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
unsigned char fn_ucGetFieldDefaultFunction(HIE_tdxHandleToSuperObject hSuperObjPerso, tdstGetSetParam *p_stGetSetParam)
{
hSuperObjPerso=hSuperObjPerso;
p_stGetSetParam=p_stGetSetParam;
return(C_INVALID_GET);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
unsigned char fn_ucSetFieldDefaultFunction(HIE_tdxHandleToSuperObject hSuperObjPerso, tdstGetSetParam *p_stGetSetParam)
{
hSuperObjPerso=hSuperObjPerso;
p_stGetSetParam=p_stGetSetParam;
return(C_INVALID_SET);
}
/***************************************************************************/
/* get set field functions : <20> completer en fonction de la structure perso */
/***************************************************************************/
unsigned char fn_ucGetFieldPrevComportIntell(HIE_tdxHandleToSuperObject hSuperObjPerso, tdstGetSetParam *p_stGetSetParam)
{
tdstComport *p_stComport;
p_stComport = M_GetPrevComport(AI_M_p_stGetIntelligence(AI_M_stGetMindOfSuperObj(hSuperObjPerso)));
M_Full_GetSetParam_pComport(p_stGetSetParam, p_stComport);
return(C_VALID_GET);
}
unsigned char fn_ucGetFieldPrevComportReflex(HIE_tdxHandleToSuperObject hSuperObjPerso, tdstGetSetParam *p_stGetSetParam)
{
tdstComport *p_stComport;
p_stComport = M_GetPrevComport(AI_M_p_stGetReflex(AI_M_stGetMindOfSuperObj(hSuperObjPerso)));
M_Full_GetSetParam_pComport(p_stGetSetParam, p_stComport);
return(C_VALID_GET);
}
/*/////////////////////////////////////////////////////////////////////////////////*/
/* Field for Shadow Scale.*/
/*/////////////////////////////////////////////////////////////////////////////////*/
unsigned char fn_ucGetFieldShadowScaleX(HIE_tdxHandleToSuperObject hSuperObjPerso, tdstGetSetParam *p_stGetSetParam)
{
M_Full_GetSetParam_Float(p_stGetSetParam, fn_x3dDataGetShadowScaleXFromSO(hSuperObjPerso));
return(C_VALID_GET);
}
unsigned char fn_ucSetFieldShadowScaleX(HIE_tdxHandleToSuperObject hSuperObjPerso, tdstGetSetParam *p_stGetSetParam)
{
fn_v3dDataSetShadowScaleXInSO(hSuperObjPerso, M_GetSetParam_xValue(p_stGetSetParam));
return(C_VALID_SET);
}
unsigned char fn_ucGetFieldShadowScaleY(HIE_tdxHandleToSuperObject hSuperObjPerso, tdstGetSetParam *p_stGetSetParam)
{
M_Full_GetSetParam_Float(p_stGetSetParam, fn_x3dDataGetShadowScaleYFromSO(hSuperObjPerso));
return(C_VALID_GET);
}
unsigned char fn_ucSetFieldShadowScaleY(HIE_tdxHandleToSuperObject hSuperObjPerso, tdstGetSetParam *p_stGetSetParam)
{
fn_v3dDataSetShadowScaleYInSO(hSuperObjPerso, M_GetSetParam_xValue(p_stGetSetParam));
return(C_VALID_SET);
}
/* eField_Position*/
/*/////////////////////////////////////////////////////////////////////////////////*/
/* Description: fn_cSetFieldPosition*/
/* set the value of the field "Position"*/
/*/////////////////////////////////////////////////////////////////////////////////*/
/* Creation date: Jan.15, 1997 Author: Fabien MORALES*/
/*/////////////////////////////////////////////////////////////////////////////////*/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
unsigned char fn_ucSetFieldPosition(HIE_tdxHandleToSuperObject hSuperObjPerso, tdstGetSetParam *p_stGetSetParam)
{
hSuperObjPerso = hSuperObjPerso;
p_stGetSetParam = p_stGetSetParam;
return(C_INVALID_SET);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
/*=====================================================================================================================================
Name: fn_cGetFieldPosition( Perso, WP )
Author: yann le tensorer
Created: October 12,1998 (rewriten for optimisations)
Last modified:
=====================================================================================================================================*/
unsigned char fn_ucGetFieldPosition(HIE_tdxHandleToSuperObject hSuperObjPerso, tdstGetSetParam *p_stGetSetParam)
{
/* we just return the position*/
M_Full_GetSetParam_p_stVertex(p_stGetSetParam,&(hSuperObjPerso->hGlobalMatrix->stTranslationVector));
return(C_VALID_GET);
/*
//GEO_tdxHandleToMatrix hTempMatrix;
MTH3D_tdstVector stVertex;
// get the vectex of the super object
//hTempMatrix= HIE_fn_hGetSuperObjectMatrix(hSuperObjPerso);
POS_fn_vGetTranslationVector(HIE_fn_hGetSuperObjectMatrix(hSuperObjPerso), &stVertex);
// and affect return value
//MTH3D_M_vCopyVector(&M_GetSetParam_stVertexValue(p_stGetSetParam),&stVertex);
M_Full_GetSetParam_p_stVertex(p_stGetSetParam,&stVertex);
*/
}
/* eField_Orientation*/
/*/////////////////////////////////////////////////////////////////////////////////*/
/* Description: fn_cSetFieldOrientation*/
/* Set the value of the field "Orientation"*/
/*/////////////////////////////////////////////////////////////////////////////////*/
/* Creation date: Jan.28, 1997 Author: Fabien MORALES*/
/*/////////////////////////////////////////////////////////////////////////////////*/
unsigned char fn_ucSetFieldOrientation(HIE_tdxHandleToSuperObject hSuperObjPerso, tdstGetSetParam *p_stGetSetParam)
{
/* GEO_tdxHandleToMatrix hPersoMatrix;
MTH3D_tdstVector *p_stOrientationVertex;
MTH_tdxReal xAngle,xRealX,xRealY;
// get the new position
p_stOrientationVertex= &M_GetSetParam_stVertexValue(p_stGetSetParam);
// compute the angle
xRealX=p_stOrientationVertex->xX;
xRealY=p_stOrientationVertex->xY;
if(xRealX)
xAngle=MTH_M_xATan(xRealY / xRealX);
else if(MTH_M_bLess(xRealY ,MTH_C_ZERO))
xAngle=MTH_M_xNeg(MTH_C_PiBy2);
else
xAngle=MTH_C_PiBy2;
if(MTH_M_bLess(xRealX ,MTH_C_ZERO))
xAngle=MTH_M_xAdd(xAngle,MTH_C_Pi);
if(MTH_M_bLess(xAngle,MTH_C_ZERO))
xAngle=MTH_M_xAdd(xAngle,MTH_C_2Pi);
// get the matrix of the super object
hPersoMatrix= HIE_fn_hGetSuperObjectMatrix(hSuperObjPerso);
// affect the matrix (Z-axis rotation)
fn_vSetRotationMatrixZ(hPersoMatrix, xAngle);
return(C_VALID_SET);
*/
hSuperObjPerso=hSuperObjPerso;
p_stGetSetParam=p_stGetSetParam;
return(C_INVALID_SET);
}
/*/////////////////////////////////////////////////////////////////////////////////*/
/* Description: fn_cGetFieldOrientation*/
/* Get the value of the field "Orientation"*/
/*/////////////////////////////////////////////////////////////////////////////////*/
/* Creation date: Jan.28, 1997 Author: Fabien MORALES*/
/*/////////////////////////////////////////////////////////////////////////////////*/
unsigned char fn_ucGetFieldOrientation(HIE_tdxHandleToSuperObject hSuperObjPerso, tdstGetSetParam *p_stGetSetParam)
{
MTH3D_tdstVector stVertexDirection, stVertex;
/* Axe -Y in global reference*/
MTH3D_M_vSetVectorElements(&stVertexDirection, MTH_C_ZERO, MTH_C_MinusONE, MTH_C_ZERO);
POS_fn_vMulMatrixVertex(&stVertexDirection,HIE_fn_hGetSuperObjectGlobalMatrix(hSuperObjPerso),&stVertexDirection);
/* position of perso*/
POS_fn_vGetTranslationVector(HIE_fn_hGetSuperObjectGlobalMatrix(hSuperObjPerso),&stVertex);
/* (stVertexDirection - stVertex1) -> stVertexDirection*/
MTH3D_M_vSubVector(&stVertexDirection, &stVertexDirection, &stVertex);
MTH3D_M_vNormalizeVector(&stVertexDirection,&stVertexDirection);
/* and affect return value*/
/*MTH3D_M_vCopyVector(&M_GetSetParam_stVertexValue(p_stGetSetParam),&stVertexDirection);*/
/*M_GetSetParam_Type(p_stGetSetParam) = E_vt_Vector;*/
M_Full_GetSetParam_p_stVertex(p_stGetSetParam,&stVertexDirection);
return(C_VALID_GET);
}
/*/////////////////////////////////////////////////////////////////////////////////*/
/* Description: fn_cGetFieldSpeed*/
/* Get the value of the field "Speed"*/
/*/////////////////////////////////////////////////////////////////////////////////*/
/* Methods: Get the rotation matrix of the object*/
/* and compute the direction of the perso*/
/*/////////////////////////////////////////////////////////////////////////////////*/
/* Creation date: Jan.28, 1997 Author: Fabien MORALES*/
/*/////////////////////////////////////////////////////////////////////////////////*/
unsigned char fn_ucGetFieldSpeed(HIE_tdxHandleToSuperObject hSuperObjPerso, tdstGetSetParam *p_stGetSetParam)
{
MS_tdxHandleToDynam h_Dynam;
MTH3D_tdstVector *p_stDest = &(M_GetSetParam_stVertexValue(p_stGetSetParam));
h_Dynam = M_GetMSHandle(hSuperObjPerso,Dynam);
M_GetSetParam_Type(p_stGetSetParam) = E_vt_Vector;
if ( h_Dynam )
{
struct DNM_stDynamics *p_stDynamic;
p_stDynamic = fn_p_stDynamGetDynamics(h_Dynam);
if ( p_stDynamic )
{
/*MTH_tdxReal xReal;*/
/*MTH3D_tdstVector *p_stCurrSpeed;*/
*p_stDest = *DNM_M_pDynamicsGetPreviousSpeed (p_stDynamic);
/*p_stCurrSpeed = DNM_M_pDynamicsGetPreviousSpeed (pstDynamic);
xReal=MTH3D_M_xGetXofVector(p_stCurrSpeed);
MTH3D_M_vSetXofVector(p_stDest,xReal);
xReal=MTH3D_M_xGetYofVector(p_stCurrSpeed);
MTH3D_M_vSetYofVector(p_stDest,xReal);
xReal=MTH3D_M_xGetZofVector(p_stCurrSpeed);
MTH3D_M_vSetZofVector(p_stDest,xReal);*/
return(C_VALID_GET);
}
}
MTH3D_M_vNullVector(p_stDest);
// return(C_INVALID_GET);
return(C_VALID_GET);
}
unsigned char fn_ucGetFieldNormSpeed(HIE_tdxHandleToSuperObject hSuperObjPerso, tdstGetSetParam *p_stGetSetParam)
{
MS_tdxHandleToDynam h_Dynam;
h_Dynam = M_GetMSHandle(hSuperObjPerso,Dynam);
M_GetSetParam_Type(p_stGetSetParam) = E_vt_Float;
if (h_Dynam!=NULL)
{
struct DNM_stDynamics* pstDynamic;
pstDynamic = fn_p_stDynamGetDynamics(h_Dynam);
if ( pstDynamic )
{
MTH3D_tdstVector *p_stCurrSpeed = DNM_M_pDynamicsGetPreviousSpeed (pstDynamic);
M_GetSetParam_xValue(p_stGetSetParam) = MTH3D_M_xNormVector(p_stCurrSpeed);
return(C_VALID_GET);
}
}
M_GetSetParam_xValue(p_stGetSetParam) = MTH_C_ZERO;
// return(C_INVALID_GET);
return(C_VALID_GET);
}
/*
unsigned char fn_ucGetFieldSightAxis(HIE_tdxHandleToSuperObject hSuperObjPerso, tdstGetSetParam *p_stGetSetParam)
{
MTH3D_tdstVector *p_V1,*p_V2;
MS_tdxHandleToDynam h_Dynam;
M_GetSetParam_Type(p_stGetSetParam) = E_vt_Vector;
if((h_Dynam = M_GetMSHandle(hSuperObjPerso,Dynam)) == NULL )
return(C_INVALID_GET);
p_V1 = fn_p_DynamGetSightAxis(h_Dynam);
p_V2 = &(M_GetSetParam_stVertexValue(p_stGetSetParam));
MTH3D_M_vCopyVector(p_V2,p_V1);
return(C_VALID_SET);
return(C_INVALID_GET);
}
unsigned char fn_ucGetFieldFirstCompAxis(HIE_tdxHandleToSuperObject hSuperObjPerso, tdstGetSetParam *p_stGetSetParam)
{
MTH3D_tdstVector *p_V1,*p_V2;
MS_tdxHandleToDynam h_Dynam;
M_GetSetParam_Type(p_stGetSetParam) = E_vt_Vector;
if((h_Dynam = M_GetMSHandle(hSuperObjPerso,Dynam)) == NULL )
return(C_INVALID_GET);
p_V1 = fn_p_DynamGetFirstComplementaryAxis(h_Dynam);
p_V2 = &(M_GetSetParam_stVertexValue(p_stGetSetParam));
MTH3D_M_vCopyVector(p_V2,p_V1);
return(C_VALID_GET);
return(C_INVALID_GET);
}
unsigned char fn_ucGetFieldSecondCompAxis(HIE_tdxHandleToSuperObject hSuperObjPerso, tdstGetSetParam *p_stGetSetParam)
{
MTH3D_tdstVector *p_V1,*p_V2;
MS_tdxHandleToDynam h_Dynam;
M_GetSetParam_Type(p_stGetSetParam) = E_vt_Vector;
if((h_Dynam = M_GetMSHandle(hSuperObjPerso,Dynam)) == NULL )
return(C_INVALID_GET);
p_V1 = fn_p_DynamGetSecondComplementaryAxis(h_Dynam);
p_V2 = &(M_GetSetParam_stVertexValue(p_stGetSetParam));
MTH3D_M_vCopyVector(p_V2,p_V1);
return(C_VALID_GET);
return(C_INVALID_GET);
}
unsigned char fn_ucSetFieldSightAxis(HIE_tdxHandleToSuperObject hSuperObjPerso, tdstGetSetParam *p_stGetSetParam)
{
MTH3D_tdstVector *p_V;
MS_tdxHandleToDynam h_Dynam;
if((h_Dynam = M_GetMSHandle(hSuperObjPerso,Dynam)) == NULL )
return(C_INVALID_SET);
p_V = &(M_GetSetParam_stVertexValue(p_stGetSetParam));
fn_vDynamSetSightAxis(h_Dynam,p_V);
return(C_VALID_SET);
return(C_INVALID_SET);
}
unsigned char fn_ucSetFieldFirstCompAxis(HIE_tdxHandleToSuperObject hSuperObjPerso, tdstGetSetParam *p_stGetSetParam)
{
MTH3D_tdstVector *p_V;
MS_tdxHandleToDynam h_Dynam;
if((h_Dynam = M_GetMSHandle(hSuperObjPerso,Dynam)) == NULL )
return(C_INVALID_SET);
p_V = &(M_GetSetParam_stVertexValue(p_stGetSetParam));
fn_vDynamSetFirstComplementaryAxis(h_Dynam,p_V);
return(C_VALID_SET);
return(C_INVALID_SET);
}
unsigned char fn_ucSetFieldSecondCompAxis(HIE_tdxHandleToSuperObject hSuperObjPerso, tdstGetSetParam *p_stGetSetParam)
{
MTH3D_tdstVector *p_V;
MS_tdxHandleToDynam h_Dynam;
if((h_Dynam = M_GetMSHandle(hSuperObjPerso,Dynam)) == NULL )
return(C_INVALID_SET);
p_V = &(M_GetSetParam_stVertexValue(p_stGetSetParam));
fn_vDynamSetSecondComplementaryAxis(h_Dynam,p_V);
return(C_VALID_SET);
return(C_INVALID_SET);
}
*/
unsigned char fn_ucGetFieldAbsoluteAxisX(HIE_tdxHandleToSuperObject hSuperObjPerso, tdstGetSetParam *p_stGetSetParam)
{
/*MTH3D_tdstVector *p_V;*/
POS_tdstCompletePosition *p_stAbsolutePosition = NULL;
MTH3D_tdstVector *p_stI = NULL,*p_stJ = NULL,*p_stK = NULL;
p_stAbsolutePosition = HIE_fn_hGetSuperObjectGlobalMatrix(hSuperObjPerso);
POS_fn_vGetRotationMatrix(p_stAbsolutePosition ,p_stI,p_stJ,p_stK);
/*p_V = &(M_GetSetParam_stVertexValue(p_stGetSetParam));*/
/*MTH3D_M_vCopyVector(p_V,p_stI);*/
M_Full_GetSetParam_p_stVertex(p_stGetSetParam,p_stI);
return(C_VALID_GET);
}
unsigned char fn_ucGetFieldAbsoluteAxisY(HIE_tdxHandleToSuperObject hSuperObjPerso, tdstGetSetParam *p_stGetSetParam)
{
/* MTH3D_tdstVector *p_V;*/
POS_tdstCompletePosition *p_stAbsoluteGliPosition = NULL;
MTH3D_tdstVector *p_stI = NULL,*p_stJ = NULL,*p_stK = NULL;
p_stAbsoluteGliPosition = HIE_fn_hGetSuperObjectGlobalMatrix(hSuperObjPerso);
POS_fn_vGetRotationMatrix(p_stAbsoluteGliPosition ,p_stI,p_stJ,p_stK);
/* p_V = &(M_GetSetParam_stVertexValue(p_stGetSetParam));*/
/* MTH3D_M_vCopyVector(p_V,p_stJ);*/
M_Full_GetSetParam_p_stVertex(p_stGetSetParam,p_stI);
return(C_VALID_GET);
}
unsigned char fn_ucGetFieldAbsoluteAxisZ(HIE_tdxHandleToSuperObject hSuperObjPerso, tdstGetSetParam *p_stGetSetParam)
{
/* MTH3D_tdstVector *p_V;*/
POS_tdstCompletePosition *p_stAbsoluteGliPosition = NULL;
MTH3D_tdstVector *p_stI = NULL,*p_stJ = NULL,*p_stK = NULL;
p_stAbsoluteGliPosition = HIE_fn_hGetSuperObjectGlobalMatrix(hSuperObjPerso);
POS_fn_vGetRotationMatrix(p_stAbsoluteGliPosition ,p_stI,p_stJ,p_stK);
/* p_V = &(M_GetSetParam_stVertexValue(p_stGetSetParam));*/
/* MTH3D_M_vCopyVector(p_V,p_stK);*/
M_Full_GetSetParam_p_stVertex(p_stGetSetParam,p_stI);
return(C_VALID_GET);
}
/* JO 07/11/97*/
/* ANNECY AV {*/
/* These functions are not used anymore
unsigned char fn_ucSetFieldCollisionFlag(HIE_tdxHandleToSuperObject hSuperObjPerso, tdstGetSetParam *p_stGetSetParam)
{
MS_tdxHandleToCollSet hMSCollSet;
unsigned char ucCollisionFlag;
if((hMSCollSet = M_GetMSHandle(hSuperObjPerso,CollSet)) == NULL )
return(C_INVALID_SET);
ucCollisionFlag = M_GetSetParam_cValue(p_stGetSetParam);
fn_vCollSetSetCharacterCollisionFlag(hMSCollSet,ucCollisionFlag);
return(C_VALID_SET);
}
unsigned char fn_ucGetFieldCollisionFlag(HIE_tdxHandleToSuperObject hSuperObjPerso, tdstGetSetParam *p_stGetSetParam)
{
MS_tdxHandleToCollSet hMSCollSet;
// pas bon
// if((hMSCollSet = M_GetMSHandle(hSuperObjPerso,CollSet)) == NULL )
// return( C_INVALID_GET );
// M_GetSetParam_xValue(p_stGetSetParam) = fn_ucCollSetGetCharacterCollisionFlag(hMSCollSet);
// return(C_VALID_GET);
long lValue=0;
char ret=C_INVALID_GET;
if((hMSCollSet = M_GetMSHandle(hSuperObjPerso,CollSet)) != NULL )
{
lValue=(long) fn_ucCollSetGetCharacterCollisionFlag(hMSCollSet);
ret=C_VALID_GET;
}
M_Full_GetSetParam_Integer(p_stGetSetParam,lValue);
return(ret);
}
*/
/* END ANNECY AV }*/
/***********************************************************************************************/
#if !defined(OPTIMIZED_COMMAND)
void fn_vInitFieldEntries(void)
{
/* Init*/
#if defined(__DEBUG_AI__)
fn_vInitFieldTable(fn_ucGetFieldDefaultFunction,fn_ucSetFieldDefaultFunction);
#endif
/* Field definitions*/
#define M_DEFINE_FIELD(a,b,english,c,d,e,f) fn_vDefineFieldEntry(M_FIELD_ENTRY(a,b,english,c,d,e,f));
#include "DefFild.h"
#undef M_DEFINE_FIELD
#if defined(__DEBUG_AI__)
fn_vCheckFieldTable(fn_ucGetFieldDefaultFunction,fn_ucSetFieldDefaultFunction);
#endif
}
#endif /* OPTIMIZED_COMMAND*/

View File

@@ -0,0 +1,10 @@
#if !defined(__FIELDS_H__)
#define __FIELDS_H__
#include "specif/AiOption.h"
#if !defined(OPTIMIZED_COMMAND)
void fn_vInitFieldEntries(void);
#endif /* OPTIMIZED_COMMAND*/
#endif /*__FIELDS_H__*/

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,17 @@
/*---------------------------------------------------------------------------*/
/* Function.h : Definition of general Function.*/
/* auteur : Olivier Didelot.*/
/* date : 05/11/1996*/
/* 970120 : AddList (Fabien Morales) */
/* 970123 : O.C.*/
/*---------------------------------------------------------------------------*/
#if !defined(__FUNCTION_H__)
#define __FUNCTION_H__
#include "specif/AiOption.h"
#if !defined(OPTIMIZED_COMMAND)
void fn_vInitFunctionEntries(void);
#endif /* OPTIMIZED_COMMAND*/
#endif /* __FUNCTION_H__*/

View File

@@ -0,0 +1,403 @@
/*---------------------------------------------------------------------------*/
/* KeyWord.c : Definition of general keyword.*/
/* auteur : Olivier Couvreur.*/
/* date : 19/08/1997*/
/*---------------------------------------------------------------------------*/
#ifdef _DEBUG
extern "C" char gcGlobAleat;
#else
extern char gcGlobAleat;
#endif
#include "AIUseCPA.h"
#include "specif/AIOption.h"
#include "AIMacros.h"
#include "AI_Erm.h"
#include "AI_Struc.h"
#include "StrIntel.h"
#include "Intell.h"
#include "EnumKey.h"
#include "ActConst.h"
#if defined(ACTIVE_AIDEBUG)
#include "specif/AID_Trac.h"
#include "AID_Erm.h"
#endif
/************************************************************************************/
/* HERE IS THE BEGINNING /
/************************************************************************************/
#if !defined(OPTIMIZED_COMMAND)
#if defined(__DEBUG_AI__)
tdstNodeInterpret *fn_p_stDefaultKeyWord(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, tdstGetSetParam *p_stValue)
{
p_SuperObjPerso=p_SuperObjPerso;
p_stValue=p_stValue;
#if defined(__DEBUG_AI__)
M_AIFatalError(E_uwAIFatalUnknownKeyWord);
#endif
return(p_stTree);
}
#endif /* _DEBUG_AI__*/
#endif /* OPTIMIZED_COMMAND*/
#if defined(ACTIVE_EDITOR)
tdstNodeInterpret *fn_p_stMiscKeyWord(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, tdstGetSetParam *p_stValue)
{
p_SuperObjPerso=p_SuperObjPerso;
p_stValue=p_stValue;
p_stTree=p_stTree;
#if defined(__DEBUG_AI__)
M_AIFatalError(E_uwAIFatalUnknownKeyWord);
#endif /* DEBUG_AI*/
return(p_stTree);
}
#endif /* ACTIVE_EDITOR*/
tdstNodeInterpret *fn_p_stNoActionKeyWord(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, tdstGetSetParam *p_stValue)
{
M_Full_GetSetParam_Action(p_stValue, NULL);
return(p_stTree);
}
tdstNodeInterpret *fn_p_stMeKeyWord(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, tdstGetSetParam *p_stValue)
{
M_GetSetParam_p_stEngineObjValue(p_stValue) = M_GetEngineObject(p_SuperObjPerso);
M_GetSetParam_Type(p_stValue) = E_vt_Perso;
return(p_stTree);
}
tdstNodeInterpret *fn_p_stMainActorKeyWord(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, tdstGetSetParam *p_stValue)
{
M_GetSetParam_p_stEngineObjValue(p_stValue) = M_GetEngineObject(MC_fn_hGetCharacterInMainCharacterNode(MC_fn_hGetFirstMainCharNode()));
M_GetSetParam_Type(p_stValue) = E_vt_Perso;
return(p_stTree);
}
/*tdstNodeInterpret *fn_p_stWorldKeyWord(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, tdstGetSetParam *p_stValue)
{
M_GetSetParam_p_stEngineObjValue(p_stValue) = M_GetEngineObject(g_stEngineStructure.h_WorldCaracter);
M_GetSetParam_Type(p_stValue) = E_vt_Perso;
return(p_stTree);
}*/
/* ANNECY OA - 13/08/99 { */
#ifndef U64
tdstNodeInterpret *fn_p_stNoSuperObjectKeyWord(HIE_tdxHandleToSuperObject p_SuperObj, tdstNodeInterpret *p_stTree, tdstGetSetParam *p_stValue)
{
M_GetSetParam_p_stEngineObjValue(p_stValue) = NULL;
M_GetSetParam_Type(p_stValue) = E_vt_SuperObject;
return(p_stTree);
}
#endif
/* END ANNECY OA } */
tdstNodeInterpret *fn_p_stNobodyKeyWord(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, tdstGetSetParam *p_stValue)
{
M_GetSetParam_p_stEngineObjValue(p_stValue) = NULL;
M_GetSetParam_Type(p_stValue) = E_vt_Perso;
return(p_stTree);
}
tdstNodeInterpret *fn_p_stNowhereKeyWord(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, tdstGetSetParam *p_stValue)
{
M_Full_GetSetParam_WayPoint(p_stValue,WP_C_hWayPointInvalid);
return(p_stTree);
}
tdstNodeInterpret *fn_p_stEmptyTextKeyWord(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, tdstGetSetParam *p_stValue)
{
M_Full_GetSetParam_hText(p_stValue, FON_C_xInvalidTextHandle);
return(p_stTree);
}
/*ANNECY Bart 06/02/98 {*/
tdstNodeInterpret *fn_p_stCapsNullKeyWord(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, tdstGetSetParam *p_stValue)
{
M_Full_GetSetParam_Caps(p_stValue, 0);
return(p_stTree);
}
tdstNodeInterpret *fn_p_stNoGraphKeyWord(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, tdstGetSetParam *p_stValue)
{
M_Full_GetSetParam_Graph(p_stValue, NULL); /* NULL ?*/
return(p_stTree);
}
/*ENDANNECY Bart }*/
static tdstNodeInterpret *fn_p_stSkipThenElseParameter(tdstNodeInterpret *p_stTree, tdstNodeInterpret *p_stTreeInit)
{
#if defined(OPTIMIZE_SWAP_PARAMETER)
if(M_NodeToSkip(p_stTreeInit))/*CBOPT p_stTree*/
{
return (p_stTreeInit+M_NodeToSkip(p_stTreeInit)); /* Swap "then/else" parameter.*/
}
else
{
p_stTree = fn_p_stSwapNextParameter(p_stTree + 1); /* Swap "then/else" parameter.*/
M_NodeToSkip(p_stTreeInit)=(unsigned short) (p_stTree-p_stTreeInit);
}
#else
p_stTree++; /* Swap Then/Else node.*/
p_stTree = fn_p_stSwapNextParameter(p_stTree); /* Swap "then/else" parameter.*/
#endif /* OPTIMIZE_SWAP_PARAMETER*/
return p_stTree;
}
tdstNodeInterpret *fn_p_stThenKeyWord(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, tdstGetSetParam *p_stValue)
{
return fn_p_stIntelligenceEvalTreeEngine(p_SuperObjPerso, p_stTree, p_stValue);
}
tdstNodeInterpret *fn_p_stElseKeyWord(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, tdstGetSetParam *p_stValue)
{
p_stTree--; /* Fixe tree on Else Node.*/
return fn_p_stSkipThenElseParameter(p_stTree, p_stTree);
}
#ifndef U64 /* AR9809*/
extern char gcGlobAleat;
#ifdef __DEBUG_AI__
__declspec(dllexport) char gcSimulateRelease = 0;
#else
__declspec(dllexport) char gcSimulateRelease = 1;
#endif
#else
char gcSimulateRelease = 1;
#endif /*U64*/
#ifndef U64 /* AR9809*/
__declspec(dllexport) char gcSimulateNotU64 = 0;
#else
char gcSimulateNotU64 = 1;
#endif /*U64*/
/************************************************************************************/
tdstNodeInterpret *fn_p_stIfDebug(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, tdstGetSetParam *p_stValue)
{
enum tdeKeyWordId_ eKeyId=M_eKeyWordIdInterpret(p_stTree-1);
p_SuperObjPerso=p_SuperObjPerso;
p_stValue=p_stValue;
if((eKeyId == eKeyWord_IfDebug) && (gcSimulateRelease))
{
p_stTree = fn_p_stSkipThenElseParameter(p_stTree-1, p_stTree-1);
}
M_Full_GetSetParam_ActionReturn(p_stValue, C_ACTION_ENGINE_CONTINUE);
return(p_stTree);
}
/************************************************************************************/
tdstNodeInterpret *fn_p_stIfNotU64(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, tdstGetSetParam *p_stValue)
{
enum tdeKeyWordId_ eKeyId=M_eKeyWordIdInterpret(p_stTree-1);
p_SuperObjPerso=p_SuperObjPerso;
p_stValue=p_stValue;
if((eKeyId == eKeyWord_IfNotU64) && (gcSimulateNotU64))
{
p_stTree = fn_p_stSkipThenElseParameter(p_stTree-1, p_stTree-1);
}
M_Full_GetSetParam_ActionReturn(p_stValue, C_ACTION_ENGINE_CONTINUE);
return(p_stTree);
}
/************************************************************************************/
tdstNodeInterpret *fn_p_stIfKeyWord(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, tdstGetSetParam *p_stValue)
{
tdstNodeInterpret *p_stTreeInit=p_stTree-1; /* p_stTreeInit link to If node.*/
char cMax = 0;
if(M_eKeyWordIdInterpret(p_stTreeInit) == eKeyWord_If)
{
M_EvalNextParameter(p_stValue);
}
else
{
switch(M_eKeyWordIdInterpret(p_stTreeInit))
{
case eKeyWord_If2:
cMax = gcGlobAleat & 0x01;
goto ComIf;
case eKeyWord_If4:
cMax = gcGlobAleat & 0x03;
goto ComIf;
case eKeyWord_If8:
cMax = gcGlobAleat & 0x07;
goto ComIf;
case eKeyWord_If16:
cMax = gcGlobAleat & 0x0F;
goto ComIf;
ComIf:
if(cMax)
{
M_GetSetParam_lValue(p_stValue) = 0;
/*
* bidouille pour <20>viter les plantages dans le cas d'un if - cond - then avec qu'un seul
* noeud au milieu.
* p_stTreeInit = If (profondeur n) , p_stTree = Cond (prof n+1)
* la ligne suivante recherche le then de m<>me niveau que le if (p_stTree + 2)
*/
p_stTree = fn_p_stSkipThenElseParameter(p_stTreeInit, p_stTree);
}
else
{
M_EvalNextParameter(p_stValue);
}
break;
case eKeyWord_IfNot:
M_EvalNextParameter(p_stValue);
M_GetSetParam_lValue(p_stValue) = M_GetSetParam_lValue(p_stValue) != 0 ? 0 : 1;
break;
/*XB(07/01/98)*/
default:
break;
/*End XB*/
}
}
/* Eval the condition*/
/*M_EvalNextParameter(p_stValue);*/
if (M_GetSetParam_lValue(p_stValue) != 0)
{ /* Condition is True.*/
#if defined(ACTIVE_AIDEBUG)
AIDebug_M_SetKeyWord
(
AI_M_stGetMindOfSuperObj(p_SuperObjPerso),
p_stValue,
p_stTree
);
#endif /*ACTIVE_AIDEBUG*/
p_stTree++; /* Swap Then node.*/
/*p_stTree = fn_p_stIntelligenceEvalTreeEngine(p_SuperObjPerso, p_stTree, p_stValue); // Eval "then" parameter.
if ( (M_GetTypeInterpret(p_stTree) == E_ti_KeyWord)
&& (M_eKeyWordIdInterpret(p_stTree) == eKeyWord_Else))
{ // There is Else node.
return fn_p_stSkipThenElseParameter(p_stTree, p_stTree);
}*/
}
else
{ /* Condition is False.*/
if (!M_IsTheEndOfTree(p_stTree))
p_stTree = fn_p_stSkipThenElseParameter(p_stTree, p_stTreeInit);
if (M_DepthInterpret(p_stTree) == M_DepthInterpret(p_stTreeInit))
{
if ( (M_GetTypeInterpret(p_stTree) == E_ti_KeyWord)
&& (M_eKeyWordIdInterpret(p_stTree) == eKeyWord_Else))
{
#if defined(ACTIVE_AIDEBUG)
AIDebug_M_SetKeyWord
(
AI_M_stGetMindOfSuperObj(p_SuperObjPerso),
p_stValue,
p_stTree
);
#endif /*ACTIVE_AIDEBUG*/
p_stTree++; /* Swap Else node.*/
}
/* Eval next parameter.*/
/*M_EvalNextParameter(p_stValue);*/
}
}
M_Full_GetSetParam_ActionReturn(p_stValue, C_ACTION_ENGINE_CONTINUE);
return(p_stTree);
}
tdstNodeInterpret *fn_p_stEngineGotoKeyWord(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, tdstGetSetParam *p_stValue)
{
char szForErrorString[200];
tdstNodeInterpret *p_stTempTree;
long lValue;
M_EvalNextParameter(p_stValue);
lValue = M_ReturnParam_lValue(p_stValue);
M_Full_GetSetParam_ActionReturn(p_stValue, C_ACTION_ENGINE_CONTINUE);
if (lValue == 0)
{
sprintf(szForErrorString,"parameter zero in %s", AI_M_szGetSuperObjectName(p_SuperObjPerso));
M_AIWarningErrorAndNeverStopForDebug(E_uwAIWarningEngineGoto,C_ucErmOpenInfoWindow,szForErrorString);
}
else
if (lValue < 0)
{
tdstNodeInterpret *p_stBeginTree = M_GetNodeInterpret(M_GetRuleN(g_p_stIntelligence, g_ucNRule));
p_stTempTree = p_stTree+lValue;
if (p_stTempTree < p_stBeginTree)
{
sprintf(szForErrorString,"out of interpret tree (negative) in %s", AI_M_szGetSuperObjectName(p_SuperObjPerso));
M_AIWarningErrorAndNeverStopForDebug(E_uwAIWarningEngineGoto,C_ucErmOpenInfoWindow,szForErrorString);
}
else
return p_stTempTree;
}
else
/* lValue > 0*/
{
long i;
p_stTempTree = p_stTree;
for (i = 0; i < lValue; i++)
{
if (M_IsTheEndOfTree(p_stTempTree))
{
sprintf(szForErrorString,"out of interpret tree (positive) in %s", AI_M_szGetSuperObjectName(p_SuperObjPerso));
M_AIWarningErrorAndNeverStopForDebug(E_uwAIWarningEngineGoto,C_ucErmOpenInfoWindow,szForErrorString);
return p_stTree;
}
else
p_stTempTree++;
}
return p_stTempTree;
}
return(p_stTree);
}
/************************************************************************************/
/* HERE IS THE END */
/************************************************************************************/
/****************************************************************************************/
/* to call once before anything else related to KeyWord */
/****************************************************************************************/
#if !defined(OPTIMIZED_COMMAND)
#include "Convert.h"
#include "ProtCond.h"
void fn_vInitKeyWordEntries(void)
{
/* Init*/
#if defined(__DEBUG_AI__)
fn_vInitKeyWordTable(fn_p_stDefaultKeyWord);
#endif
/* KeyWord definition*/
#define M_DEFINE_KEYWORD(a,b,english,c,d,e,f) fn_vDefineKeyWordEntry(M_KEYWORD_ENTRY(a,b,english,c,d,e,f));
#include "DefKey.h"
#undef M_DEFINE_KEYWORD
/* Check*/
#if defined(__DEBUG_AI__)
fn_vCheckKeyWordTable(fn_p_stDefaultKeyWord);
#endif /* __DEBUG_AI__*/
}
#endif /* OPTIMIZED_COMMAND*/

View File

@@ -0,0 +1,15 @@
/*---------------------------------------------------------------------------*/
/* Keyword.h : Definition of general Keyword.*/
/* auteur : Olivier Couvreur*/
/* date : 19/08/1997*/
/*---------------------------------------------------------------------------*/
#if !defined(__KEYWORD_H__)
#define __KEYWORD_H__
#include "specif/AiOption.h"
#if !defined(OPTIMIZED_COMMAND)
void fn_vInitKeyWordEntries(void);
#endif /* OPTIMIZED_COMMAND*/
#endif /* __CONDITION_H__*/

View File

@@ -0,0 +1,300 @@
/*
*=======================================================================================
* Name :MGT_Proc.c
*
* Author : QiZeYu Date : Dec.18, 1997
*
* Description : All AI Functions for the magnet
*=======================================================================================
* Modification -> Author : Date :
* Description :
*=======================================================================================
*/
#ifndef D_THROW_MGT
#define D_CineInfo_StructureDefine
#include "AIUseCPA.h"
#include "specif/AIOption.h"
#include "AIMacros.h"
#include "AI_Erm.h"
#include "Intell.h"
#include "StrIntel.h"
#include "EnumProc.h"
#include "EnumFunc.h"
#include "Convert.h"
#include "AI_Struc.h"
#include "DsgMem.h" /* for fn_bFindPersoInList*/
#include "specif/AITools.h"
#include "EnumCond.h"
#include "Operator.h"
#include "WPWayPt.h"
#include "GLI.h"
#include "GEO.h"
#include "PO.h"
/*XB980821*/
#ifndef D_THROW_IPO
#include "IPO.h"
#endif /* D_THROW_IPO */
/*End XB*/
#include "SPO.h"
#include "CAM_Base.h"
#include "CAM_Tool.h"
#include "CAM_Vis.h"
/*XB980429*/
/*#include "incGAM.h"*/
#include "scr.h"
#include "snd.h"
#include "pcs.h"
#include "geo.h"
#include "gld.h"
#include "gli.h"
#include "mec.h"
#include "lst.h"
#ifdef USE_IPT_DX5
#include "IPT_DX5.h" /* InPuT (absolutely before GAM.h)*/
#else /* USE_IPT_WIN */
#include "IPT.h" /* InPuT (absolutely before GAM.h)*/
#endif /* USE_IPT_WIN */
/* Shaitan Clean Env {*/
/*#include "srf.h"*/
/*#include "env.h"*/
/* End Shaitan Clan Env }*/
#include "sct.h"
#ifndef D_THROW_PRT
#include "PRT.h"
#endif /* D_THROW_PRT */
#include "gam.h"
/*End XB*/
#include "mgt.h"
#define _WP_D_DEFINE_WAYPOINTS_
#include "WP_Handl.h"
#include "WP_Func.h"
/*XB980821*/
#ifndef D_THROW_IPO
#include "ISI.h"
#endif /* D_THROW_IPO */
/*End XB*/
#undef _WP_D_DEFINE_WAYPOINTS_
/*
*=================================================================================================
* Procedure to turn the Magnet on
* parameters :
* PERSO : magnet reference
*
* Author : QiZeYu Date : Dec.18, 1997
*=================================================================================================
*/
#if !defined(_AI_EXCLUDE_NEVER_USED_) /* MT {*/
tdstNodeInterpret *MGT_fn_p_stActiveMagnet(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree)
{
HIE_tdxHandleToSuperObject hNewSuperObjPerso;
enum tdeProcedureId_ eProcedureId = M_eProcedureIdInterpret(p_stTree - 1);
/********************************************************************************/
/* BEWARE THE ULTRA OPERATOR : Must be at the beginning and respect this syntax */
/********************************************************************************/
fn_vGetUltraOperatorPerso(fn_ucGetProcedureUltraOperator(eProcedureId),p_SuperObjPerso,&hNewSuperObjPerso);
MGT_fn_vAddObjectToMagnetList(hNewSuperObjPerso);
return (p_stTree);
}
#endif /* _AI_EXCLUDE_NEVER_USED_ }*/
/*
*=================================================================================================
* Procedure to turn the Magnet off
* parameters :
* PERSO : magnet reference
*
* Author : QiZeYu Date : Dec.18, 1997
*=================================================================================================
*/
tdstNodeInterpret *MGT_fn_p_stDeactiveMagnet(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree)
{
HIE_tdxHandleToSuperObject hNewSuperObjPerso;
MS_tdxHandleToMSMagnet hMagnet;
enum tdeProcedureId_ eProcedureId = M_eProcedureIdInterpret(p_stTree - 1);
/********************************************************************************/
/* BEWARE THE ULTRA OPERATOR : Must be at the beginning and respect this syntax */
/********************************************************************************/
fn_vGetUltraOperatorPerso(fn_ucGetProcedureUltraOperator(eProcedureId),p_SuperObjPerso,&hNewSuperObjPerso);
hMagnet = M_GetMSHandle(hNewSuperObjPerso,MSMagnet);
if( hMagnet )
{
if( (fn_lMSMagnetGetStatus(hMagnet)==MAGNETGROWING)||(fn_lMSMagnetGetStatus(hMagnet)==MAGNETON) )
{
fn_vMSMagnetSetStatus(hMagnet, MAGNETRECOVERING);
}
}
return (p_stTree);
}
/*
*=================================================================================================
* Procedure to set the Magnet parameter
* parameters :
* PERSO : magnet reference
* REAL : Range
*
*=================================================================================================
*/
#if !defined(_AI_EXCLUDE_NEVER_USED_) /* MT {*/
tdstNodeInterpret *MGT_fn_p_stSetParam(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree)
{
HIE_tdxHandleToSuperObject hNewSuperObjPerso;
MS_tdxHandleToMSMagnet hMagnet;
MTH_tdxReal xValue;
unsigned long ulDuration;
enum tdeProcedureId_ eProcedureId = M_eProcedureIdInterpret(p_stTree - 1);
tdstGetSetParam stValue;
/********************************************************************************/
/* BEWARE THE ULTRA OPERATOR : Must be at the beginning and respect this syntax */
/********************************************************************************/
fn_vGetUltraOperatorPerso(fn_ucGetProcedureUltraOperator(eProcedureId),p_SuperObjPerso,&hNewSuperObjPerso);
hMagnet = M_GetMSHandle(hNewSuperObjPerso,MSMagnet);
if( hMagnet )
{
M_EvalNextParameter( &stValue );
switch(eProcedureId)
{
case eProc_Magnet_SetStrength:
xValue = M_GetSetParam_xValue(&stValue);
fn_vMSMagnetSetStrength(hMagnet,xValue);
break;
case eProc_Magnet_SetFar:
xValue = M_GetSetParam_xValue(&stValue);
fn_vMSMagnetSetFar(hMagnet,xValue);
break;
case eProc_Magnet_SetNear:
xValue = M_GetSetParam_xValue(&stValue);
fn_vMSMagnetSetNear(hMagnet,xValue);
break;
case eProc_Magnet_SetDuration:
ulDuration = M_GetSetParam_lValue(&stValue);
fn_vMSMagnetSetDuration(hMagnet, ulDuration);
break;
default:
M_AIFatalError(E_uwAIFatalNotValidProcedure);
break;
}
}
return (p_stTree);
}
#endif /* _AI_EXCLUDE_NEVER_USED_ }*/
/*
*=================================================================================================
* Get the information of the magnet
* Parameter :
* Perso : magnet handle
*=================================================================================================
*/
#if !defined(_AI_EXCLUDE_NEVER_USED_) /* MT {*/
tdstNodeInterpret *MGT_fn_p_stGetInfo(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, tdstGetSetParam *p_stValue)
{
HIE_tdxHandleToSuperObject hNewSuperObjPerso;
MS_tdxHandleToMSMagnet hMagnet;
MTH_tdxReal xNorm;
unsigned long ulDuration;
enum tdeFuncId_ eFuncId=M_eFuncIdInterpret(p_stTree-1);
tdstGetSetParam stValue;
/********************************************************************************/
/* BEWARE THE ULTRA OPERATOR : Must be at the beginning and respect this syntax */
/********************************************************************************/
fn_vGetUltraOperatorPerso(fn_ucGetFunctionUltraOperator(eFuncId),p_SuperObjPerso,&hNewSuperObjPerso);
hMagnet = M_GetMSHandle(hNewSuperObjPerso,MSMagnet);
/* Get Magnet Handle */
if(hMagnet==NULL) return (p_stTree);
M_EvalNextParameter(&stValue);
switch(eFuncId)
{
case eFunc_GetMagnetStrength :
xNorm = fn_xMSMagnetGetStrength(hMagnet);
M_Full_GetSetParam_Float(p_stValue,xNorm);
break;
case eFunc_GetMagnetFar:
xNorm = fn_xMSMagnetGetFar(hMagnet);
M_Full_GetSetParam_Float(p_stValue,xNorm);
break;
case eFunc_GetMagnetNear:
xNorm = fn_xMSMagnetGetNear(hMagnet);
M_Full_GetSetParam_Float(p_stValue,xNorm);
break;
case eFunc_GetMagnetDuration:
ulDuration = fn_ulMSMagnetGetDuration(hMagnet);
M_Full_GetSetParam_Time(p_stValue,ulDuration);
default :
M_AIFatalError(E_uwAIFatalNotValidFunction);
break;
}
return(p_stTree);
}
#endif /* _AI_EXCLUDE_NEVER_USED_ }*/
/**********************************************************************
* Condition: Magnet_EstActif ( toto ) *
* true if actor's magnet is activated *
* Author : Marc Trabucato *
* Date of last modification: 13/03/98 *
**********************************************************************/
#if !defined(_AI_EXCLUDE_NEVER_USED_) /* MT {*/
tdstNodeInterpret *fn_p_stMagnetActivated (HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, long *p_lValue)
{
HIE_tdxHandleToSuperObject hNewSuperObjPerso;
MS_tdxHandleToMSMagnet hMagnet;
enum tdeCondId_ eCondId = M_eCondIdInterpret(p_stTree-1);
/********************************************************************************/
/* BEWARE THE ULTRA OPERATOR : Must be at the beginning and respect this syntax */
/********************************************************************************/
fn_vGetUltraOperatorPerso(fn_ucGetConditionUltraOperator(eCondId),p_SuperObjPerso,&hNewSuperObjPerso);
hMagnet = M_GetMSHandle(hNewSuperObjPerso,MSMagnet);
if( hMagnet )
{
switch( fn_lMSMagnetGetStatus( hMagnet ) )
{
case MAGNETOFF:
case MAGNETRECOVERING:
*p_lValue = FALSE;
break;
case MAGNETON:
case MAGNETGROWING:
*p_lValue = TRUE;
break;
}
}
return(p_stTree);
}
#endif /* _AI_EXCLUDE_NEVER_USED_ }*/
#endif /* D_THROW_MGT */

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,26 @@
/*---------------------------------------------------------------------------*/
/* Operator.h : Definition of Operators.*/
/* auteur : Olivier Didelot.*/
/* date : 21/01/1997*/
/* modify : 31/01/1997 (O.C) script & editor names + Lint*/
/* modify : Olivier Couvreur*/
/* date : 18/02/1997 CPA_EXPORT + new functions for editor*/
/* modify : Olivier Couvreur*/
/* date : 26/06/1997 Now, Operators are function pointers*/
/*---------------------------------------------------------------------------*/
#if !defined(__OPERATOR_H__)
#define __OPERATOR_H__
/* PLEASE DON'T USE THESE THREE FUNCTIONS WITHOUT CARE */
void fn_vSetUltraOperatorPerso(HIE_tdxHandleToSuperObject hCurrentSuperObjPerso,HIE_tdxHandleToSuperObject hNewCurrentSuperObjPerso);
void fn_vGetUltraOperatorPerso(unsigned char bYouHaveRightToUseThisFunction,HIE_tdxHandleToSuperObject hCurrentSuperObjPerso,HIE_tdxHandleToSuperObject *hNewCurrentSuperObjPerso);
tdstNodeInterpret *fn_p_stOperatorGetPerso(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, HIE_tdxHandleToSuperObject *hSuperObjPersoFound);
#include "specif/AiOption.h"
#if !defined(OPTIMIZED_COMMAND)
void fn_vInitOperatorEntries(void);
#endif
#endif /* __OPERATOR_H__*/

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,19 @@
/*---------------------------------------------------------------------------*/
/* Procedur.h : Definition of general Procedure.*/
/* auteur : Olivier Didelot.*/
/* date : 10/04/1997*/
/*---------------------------------------------------------------------------*/
#if !defined(__PROCEDUR_H__)
#define __PROCEDUR_H__
/*
void fn_vSetDirectionSpeed(HIE_tdxHandleToSuperObject p_SuperObjPerso, MTH3D_tdstVector *p_stVect);
void fn_vAddDirectionSpeed(HIE_tdxHandleToSuperObject p_SuperObjPerso, MTH3D_tdstVector *p_stAddVect);
void fn_vSetImpulse(HIE_tdxHandleToSuperObject p_SuperObjPerso, MTH3D_tdstVector *p_stVect);
*/
#include "specif/AiOption.h"
#if !defined(OPTIMIZED_COMMAND)
void fn_vInitProcedureEntries(void);
#endif /* OPTIMIZED_COMMAND*/
#endif /* __PROCEDUR_H__*/

View File

@@ -0,0 +1,225 @@
/**********************************************************
* *
* ProcMorph.c *
* *
* This file contains all the AI procedures and *
* conditions for the morphing *
* *
* Author : Ubi China - Alexis Vaisse *
* *
**********************************************************/
#include "AIUseCPA.h"
#include "specif/AIOption.h"
#include "AIMacros.h"
#include "AI_Erm.h"
#include "Intell.h"
#include "Action.h"
#include "StrIntel.h"
#include "DsgMem.h"
#include "EnumProc.h"
#include "specif/AITools.h"
#include "Operator.h"
#include "Convert.h"
#define PO_FRIEND
#include "PO.h"
#include "mor.h"
#if !defined(OPTIMIZED_COMMAND)
/* Procedure prototypes*/
#define M_DEFINE_PROCEDURE(a,b,english,c,d,e,f) struct tdstNodeInterpret_ *##d(HIE_tdxHandleToSuperObject, struct tdstNodeInterpret_ *);
#include "DefProc.h"
#undef M_DEFINE_PROCEDURE
#endif /* !OPTIMIZED_COMMAND*/
/*-----------------------------------------------------------------------------
* Name : fn_p_stPrepareMorph
*-----------------------------------------------------------------------------
* Description : the "MOD_PrepareMorph" AI procedure
*-----------------------------------------------------------------------------*/
#if !defined(_AI_EXCLUDE_NEVER_USED_) /* MT {*/
tdstNodeInterpret * fn_p_stPrepareMorph (HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret * p_stTree)
{
ACP_tdxIndex xStartIndexInObjectTable;
ACP_tdxIndex xEndIndexInObjectTable;
int iNbMillisecond;
unsigned char ucMorphType;
ACP_tdxIndex xChannelIndex;
tdstGetSetParam stValue [5];
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
enum tdeProcedureId_ eProcId=M_eProcedureIdInterpret(p_stTree-1);
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/********************************************************************************/
/* BEWARE THE ULTRA OPERATOR : Must be at the beginning and respect this syntax */
/********************************************************************************/
HIE_tdxHandleToSuperObject hNewSuperObjPerso;
fn_vGetUltraOperatorPerso (fn_ucGetProcedureUltraOperator(eProcId),p_SuperObjPerso,&hNewSuperObjPerso);
/********************************************************************************/
M_EvalNextParameter(&stValue[0]);
M_EvalNextParameter(&stValue[1]);
M_EvalNextParameter(&stValue[2]);
M_EvalNextParameter(&stValue[3]);
M_EvalNextParameter(&stValue[4]);
xStartIndexInObjectTable = M_GetSetParam_lValue(&stValue[0]); /* First parameter : index of the 'start' object in the object table*/
xEndIndexInObjectTable = M_GetSetParam_lValue(&stValue[1]); /* Second parameter : index of the 'end' object in the object table*/
iNbMillisecond = M_GetSetParam_lValue(&stValue[2]); /* Third parameter : number of milisecond for the morphing*/
ucMorphType = M_GetSetParam_lValue(&stValue[3]); /* Fourth parameter : morphing type (can be 1, 2 or 3)*/
xChannelIndex = M_GetSetParam_lModuleValue(&stValue[4]); /* Fifth parameter : the channel number*/
if (MOR_fn_xPrepareMorph (p_SuperObjPerso, xStartIndexInObjectTable, xEndIndexInObjectTable,
iNbMillisecond, 0, iNbMillisecond, ucMorphType, xChannelIndex) == -1)
{
//XB 10/08/99
/* Erm_M_UpdateLastError(AI, C_ucErmDefaultChannel, E_uwAIWarningScriptError , C_lErmNoDebugData,
C_ucErmOpenInfoWindow, C_ucNeverStopForDebug,
"Morphing requires two objects with the same number of points");
Erm_M_ClearLastError(C_ucErmDefaultChannel);*/
M_AIWarningErrorAndNeverStopForDebug(E_uwAIWarningScriptError, C_ucErmOpenInfoWindow, "Morphing requires two objects with the same number of points")
//End XB 10/08/99
/*XB*/
#if (defined(ACTIVE_EXEC_CHECKING) && defined(ACTIVE_EDITOR)) || defined(ACTIVE_AIDEBUG)
#if !defined(U64_AIDEBUG) /* Oliv' - 23/11/1998*/
fn_vSetStopAIEngineFlag();
#endif /* !defined(U64_AIDEBUG)*/
#endif /* (defined(ACTIVE_EXEC_CHECKING) && defined(ACTIVE_EDITOR)) || defined(ACTIVE_AIDEBUG)*/
/*End XB*/
}
return (p_stTree);
}
#endif /* _AI_EXCLUDE_NEVER_USED_ }*/
/*-----------------------------------------------------------------------------
* Name : fn_p_stStopMorph
*-----------------------------------------------------------------------------
* Description : the "MOD_StopMorph" AI procedure
*-----------------------------------------------------------------------------*/
#if !defined(_AI_EXCLUDE_NEVER_USED_) /* MT {*/
tdstNodeInterpret * fn_p_stStopMorph (HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret * p_stTree)
{
tdstGetSetParam stValue;
ACP_tdxIndex xChannelIndex;
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
enum tdeProcedureId_ eProcId=M_eProcedureIdInterpret(p_stTree-1);
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/********************************************************************************/
/* BEWARE THE ULTRA OPERATOR : Must be at the beginning and respect this syntax */
/********************************************************************************/
HIE_tdxHandleToSuperObject hNewSuperObjPerso;
fn_vGetUltraOperatorPerso (fn_ucGetProcedureUltraOperator(eProcId),p_SuperObjPerso,&hNewSuperObjPerso);
/********************************************************************************/
M_EvalNextParameter (& stValue);
xChannelIndex = M_GetSetParam_lModuleValue (& stValue); /* Parameter : the channel number*/
MOR_fn_xStopMorph(p_SuperObjPerso , xChannelIndex);
return (p_stTree);
}
#endif /* _AI_EXCLUDE_NEVER_USED_ }*/
/*-----------------------------------------------------------------------------
* Name : fn_p_stIsMorphing
*-----------------------------------------------------------------------------
* Description : the "MOD_MorphingEnCours" AI condition
*-----------------------------------------------------------------------------*/
#if !defined(_AI_EXCLUDE_NEVER_USED_) /* MT {*/
tdstNodeInterpret *fn_p_stIsMorphing (HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret * p_stTree, long * p_lValue)
{
tdstGetSetParam stValue;
ACP_tdxIndex xChannelIndex;
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
enum tdeCondId_ eCondId=M_eCondIdInterpret(p_stTree-1);
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/********************************************************************************/
/* BEWARE THE ULTRA OPERATOR : Must be at the beginning and respect this syntax */
/********************************************************************************/
HIE_tdxHandleToSuperObject hNewSuperObjPerso;
fn_vGetUltraOperatorPerso (fn_ucGetConditionUltraOperator(eCondId),p_SuperObjPerso,&hNewSuperObjPerso);
/********************************************************************************/
M_EvalNextParameter (& stValue);
xChannelIndex = M_GetSetParam_lModuleValue (& stValue); /* Parameter : the channel number*/
/* Ask the morphing module to know if the channel contains an morphed object*/
* p_lValue = MOR_fn_bIsChannelMorphed (p_SuperObjPerso, xChannelIndex);
return(p_stTree);
}
#endif /* _AI_EXCLUDE_NEVER_USED_ }*/
/*-----------------------------------------------------------------------------
* Name : fn_p_stMorphiong
*-----------------------------------------------------------------------------
* Description : the "MOD_Morphing" AI procedure
*-----------------------------------------------------------------------------*/
#if !defined(_AI_EXCLUDE_NEVER_USED_) /* MT {*/
tdstNodeInterpret * fn_p_stMorphing (HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret * p_stTree)
{
ACP_tdxIndex xStartIndexInObjectTable;
ACP_tdxIndex xEndIndexInObjectTable;
ACP_tdxIndex xRatio; /* between 0 and 100*/
ACP_tdxIndex xChannelIndex;
tdstGetSetParam stValue [4];
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
enum tdeProcedureId_ eProcId=M_eProcedureIdInterpret(p_stTree-1);
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/********************************************************************************/
/* BEWARE THE ULTRA OPERATOR : Must be at the beginning and respect this syntax */
/********************************************************************************/
HIE_tdxHandleToSuperObject hNewSuperObjPerso;
fn_vGetUltraOperatorPerso (fn_ucGetProcedureUltraOperator(eProcId),p_SuperObjPerso,&hNewSuperObjPerso);
/********************************************************************************/
M_EvalNextParameter(&stValue[0]);
M_EvalNextParameter(&stValue[1]);
M_EvalNextParameter(&stValue[2]);
M_EvalNextParameter(&stValue[3]);
xStartIndexInObjectTable = M_GetSetParam_lValue(&stValue[0]); /* First parameter : index of the 'start' object in the object table*/
xEndIndexInObjectTable = M_GetSetParam_lValue(&stValue[1]); /* Second parameter : index of the 'end' object in the object table*/
xRatio = M_GetSetParam_lValue(&stValue[2]); /* Third parameter : morphing ratio between 0 and 100*/
xChannelIndex = M_GetSetParam_lModuleValue(&stValue[3]); /* Fourth parameter : the channel number*/
if (MOR_fn_xMorphing (p_SuperObjPerso, (ACP_tdxIndex)(xStartIndexInObjectTable-1), (ACP_tdxIndex)(xEndIndexInObjectTable-1), xRatio, xChannelIndex) == -1)
{
//XB 10/08/99
/* Erm_M_UpdateLastError(AI, C_ucErmDefaultChannel, E_uwAIWarningScriptError , C_lErmNoDebugData,
C_ucErmOpenInfoWindow, C_ucNeverStopForDebug,
"Morphing requires two objects with the same number of points");
Erm_M_ClearLastError(C_ucErmDefaultChannel);*/
M_AIWarningErrorAndNeverStopForDebug(E_uwAIWarningScriptError, C_ucErmOpenInfoWindow, "Morphing requires two objects with the same number of points")
//End XB 10/08/99
/*XB*/
#if (defined(ACTIVE_EXEC_CHECKING) && defined(ACTIVE_EDITOR)) || defined(ACTIVE_AIDEBUG)
#if !defined(U64_AIDEBUG) /* Oliv' - 23/11/1998*/
fn_vSetStopAIEngineFlag();
#endif /* !defined(U64_AIDEBUG)*/
#endif /* (defined(ACTIVE_EXEC_CHECKING) && defined(ACTIVE_EDITOR)) || defined(ACTIVE_AIDEBUG)*/
/*End XB*/
}
return (p_stTree);
}
#endif /* _AI_EXCLUDE_NEVER_USED_ }*/

View File

@@ -0,0 +1,92 @@
/*---------------------------------------------------------------------------*/
/* AITools.h : Some useful functions*/
/* author : Olivier Couvreur.*/
/* date : 05/05/1996*/
/*---------------------------------------------------------------------------*/
#if !defined(__AITOOLS_H__)
#define __AITOOLS_H__
/* WARNING constant are bits */
#define DISTANCE_TO_ORIGIN 0x00
#define DISTANCE_TO_CENTER_OF_BOUNDING_VOLUME 0x80
#define C_DISTANCE_X 1
#define C_DISTANCE_Y 2
#define C_DISTANCE_Z 4
#define C_DISTANCE_XY 3
#define C_DISTANCE_XZ 5
#define C_DISTANCE_YZ 6
#define C_DISTANCE_XYZ 7
#define C_DISTANCE_MASK C_DISTANCE_XYZ
#if defined(U64)
#include "AIUseCPA.h"
#include "specif/AIOption.h"
#include "AIMacros.h"
#include "AI_Erm.h"
#include "WPWayPt.h"
#include "Strintel.h"
#endif
#include "GSParam.h"
/* CGHT*/
#if 0
/* MODIF YLG*/
ACP_tdxBool fn_bIsEndReached(MTH_tdxReal xStart,MTH_tdxReal xEnd,MTH_tdxReal xSpeed);
#endif
#ifdef ACTIVE_EDITOR
void fn_vCheckModuleAccess(HIE_tdxHandleToSuperObject hPerso, ACP_tdxBool _bNextArgIsAChannel, void *_p_vChannelOrModuleHandle);
#endif
char *fn_szGetStringFromTextOrStringParam(tdstGetSetParam *p_stValue);
MTH_tdxReal fn_xComputeDirectionAngle(struct MTH3D_tdstVector_ *p_stVector);
MTH_tdxReal fn_xComputeBestEcartDirectionAngle(MTH_tdxReal xAngleFollowed,MTH_tdxReal xAngleToFollow);
MTH_tdxReal fn_xDistanceBetweenPersoAndWP(HIE_tdxHandleToSuperObject p_SuperObjPerso, WP_tdhWayPoint hWP);
MTH_tdxReal fn_xDistanceBetweenPerso(HIE_tdxHandleToSuperObject p_SuperObjPerso1, HIE_tdxHandleToSuperObject p_SuperObjPerso2);
MTH_tdxReal fn_xExtendedDistanceBetweenPerso(HIE_tdxHandleToSuperObject p_SuperObjPerso1, HIE_tdxHandleToSuperObject p_SuperObjPerso2, unsigned char ucFlags);
MTH_tdxReal fn_xExtendedDistanceBetweenVertexAndPerso(MTH3D_tdstVector *p_stVertex1,HIE_tdxHandleToSuperObject p_SuperObjPerso2 , unsigned char ucFlags);
MTH_tdxReal fn_xRealModuloAround(MTH_tdxReal xFrom,MTH_tdxReal xModulus,MTH_tdxReal xValue);
void fn_vVectorModuloAround(MTH_tdxReal xFrom,MTH_tdxReal xModulus,struct MTH3D_tdstVector_ *p_stRotationVector);
/*void fn_vMakeAngularSpeedVectorPositive(struct MTH3D_tdstVector_ *p_stRotationVector,struct MTH3D_tdstVector_ *p_stAngleVector,struct MTH3D_tdstVector_ *p_stAimAngleVector);*/
struct stMACDPID *fn_p_stGetMACDPIDPointer(HIE_tdxHandleToSuperObject p_SuperObjPerso);
struct DNM_stReport *fn_pstGetDNMReport(HIE_tdxHandleToSuperObject p_SuperObjPerso);
unsigned char fn_ucIsThereFloatIfYesConvertItToInteger(struct tdstGetSetParam_ *p_stParam);
unsigned char fn_ucAreThereFloatIfYesConvertThem(struct tdstGetSetParam_ *p_stParam1,struct tdstGetSetParam_ *p_stParam2);
void fn_vGetCenterOfBoundingVolume(HIE_tdxHandleToSuperObject hPerso,struct MTH3D_tdstVector_ *p_stVertex);
void fn_vSetDontCheckNULLFlag(signed char _cValue);
unsigned char fn_ucGetDontCheckNULLFlag(void);
#if defined(__DEBUG_AI__)
char *fn_szGetPersoName(HIE_tdxHandleToSuperObject hPerso);
#endif
ACP_tdxBool fn_bSetPositionWithCollideTest(HIE_tdxHandleToSuperObject p_SuperObjPerso, struct MTH3D_tdstVector_ *p_stVertex);
/*ANNECY BBB { parti dans gam\actions\dynam.h*/
/*ACP_tdxBool fn_bSetPositionWithoutCollideTest(HIE_tdxHandleToSuperObject p_SuperObjPerso, struct MTH3D_tdstVector_ *p_stVertex);*/
/*ANNECY BBB } parti dans gam\actions\dynam.h*/
#if 0
/* YLG modif*/
void fn_vBoolAddRequest(HIE_tdxHandleToSuperObject p_SuperObjPerso,enum LRM_eKindOfRequest_ eRequest);
#endif
unsigned char fn_bGethDynamAndMACDPIDPointers(HIE_tdxHandleToSuperObject p_SuperObjPerso, MS_tdxHandleToDynam *p_h_Dynam, tdstMACDPID **p_p_stMACDPID);
unsigned char fn_ucInternalTurn(HIE_tdxHandleToSuperObject p_SuperObjPerso,MTH_tdxReal xAngle);
void fn_vConvertParamToColor(struct tdstGetSetParam_ *p_stParam,struct GEO_tdstColor_ *p_stColor);
void fn_vConvertColorToParam(struct GEO_tdstColor_ *p_stColor,struct tdstGetSetParam_ *p_stParam);
#endif /* __AITOOLS_H__*/