reman3/Rayman_X/cpa/tempgrp/AI/AIBase/WPEngDsp.c

294 lines
9.7 KiB
C

/*********************************************************/
/* Module used to display Waypoints in the Game engine*/
/* */
/* Author : Marc Fascia - Annecy*/
/* Date : 02 / 03 / 1998*/
/**/
/*********************************************************/
#define _WP_D_WAYPOINT_FRIEND_
#include "specif/AIOption.h"
#include "AIMacros.h"
#include "AIUseCPA.h"
#include "AI_Mmg.h"
#include "AI_Erm.h"
#include "AI_Proto.h"
#include "WPEngDsp.h"
#include "WPWayPt.h"
#include "WP_Handl.h"
#include "WP_Func.h"
#ifndef U64
static GEO_tdstGeometricObject * p_stGeoModel;
static GEO_tdstGeometricObject * p_stGeoCurr;
#endif
#ifdef __cplusplus
extern "C"{
#endif
#if !defined(PRESS_DEMO)
extern void DisplayPolices (char * _szText , long _lX , long _lY);
#else
#define DisplayPolices(a,b,c)
#endif /* PRESS_DEMO */
extern void GLI_vEndOfGeometricLoad( void );
/*bart990209 : extern void GLI_vDownLoadTexture( void );*/
#ifndef U64
/*static*/ unsigned char ucIsInitDone = 0;
#endif
#ifdef __cplusplus
}
#endif
#if !defined(U64) && !defined(RETAIL)
/***********************************************************************************************/
/* Name : WP_InitGeoModel*/
/* Description : Loads the Geo Obj used to display the WP from .mod file */
/* Author : Marc FASCIA*/
/* Date : 04/03/98*/
/***********************************************************************************************/
GEO_tdstGeometricObject * WP_InitGeoModel()
{
GEO_tdstGeometricObject * p_stLoaded;
p_stLoaded = (GEO_tdstGeometricObject *) SCR_M_ul_RdL0_ExtractLongValue(
SCR_fnp_st_RdL0_AnalyseSection( "GameData\\World\\Graphics\\Objects\\Banks\\Waypoints\\wp.mod^Geometric:Box01", SCR_CDF_uw_Anl_ForceAnalyse ),
0 );
return p_stLoaded;
}
/* LOL #endif*/
/***********************************************************************************************/
/* Name : WP_SendWaypointsToViewport*/
/* Description : Displays the Geo Objs for WP*/
/* Author : Marc FASCIA*/
/* Date : 04/03/98*/
/* Optimized ? : No*/
/***********************************************************************************************/
void WP_SendWaypointsToViewport( GLD_tdstViewportAttributes * p_stViewport, unsigned long ulDrawMask )
{
WP_tdstWayPoint * p_stWaypt;
ACP_tdxIndex xNbVertices;
unsigned int uiPos;
SCR_tdst_Link_Value * pLinkValue = NULL;
SCR_tdst_Link_Table * pLinkTable;
char szText[ 255 ];
/*--- First time we are here ??? ---*/
if( !ucIsInitDone )
{
/*--- Loading Goe Objs from file ---*/
p_stGeoModel = WP_InitGeoModel();
p_stGeoCurr = WP_InitGeoModel();
GLI_vEndofGeometricLoad();
ucIsInitDone = 1;
}
/*--- gettink back the Waypoints linktable*/
pLinkTable = WP_fnp_WayPoint_GetLinkTable();
/*--- First element*/
uiPos = 0;
SCR_M_DyAr_GetNextElement( SCR_tdst_Link_Value, uiPos, pLinkValue, SCR_M_st_Link_GetDynamicArray(pLinkTable) )
while (pLinkValue)
{
/*--- Getting the Waypoint handle*/
p_stWaypt = (WP_tdstWayPoint *) SCR_M_ul_Link_GetValue( pLinkValue );
for( xNbVertices = 0 ; xNbVertices < p_stGeoCurr->xNbPoints ; xNbVertices++ )
{
/*--- Translates the current object at the waypoint position*/
MTH3D_M_vAddVector( &(p_stGeoCurr->d_stListOfPoints[ xNbVertices ]),
&(p_stGeoModel->d_stListOfPoints[ xNbVertices ]),
&(p_stWaypt->m_stVertex) );
}
/*--- Translates the center of BV of object*/
MTH3D_M_vAddVector( &p_stGeoCurr->xBoudingSphereCenter, &p_stGeoModel->xBoudingSphereCenter, &p_stWaypt->m_stVertex );
/*--- Sends the object to the Display Routines*/
GLI_xSendObjectToViewportWithLights( p_stViewport, p_stGeoCurr, ulDrawMask );
/*--- Next Linked Value*/
uiPos++;
SCR_M_DyAr_GetNextElement( SCR_tdst_Link_Value, uiPos, pLinkValue, SCR_M_st_Link_GetDynamicArray(pLinkTable) )
}
sprintf( szText, "[P] Display Waypoints" );
DisplayPolices( (char *)szText, 450, 450 );
}
/* LOL */
#endif /* U64 */
/*--------------------------------------------------------------
-------------------- OLD VERSION -----------------------------
--------------------------------------------------------------
#include "SPO\HieSpObj.h"
static HIE_tdstSuperObject * p_stWaypointsSPO;
static unsigned char s_ucWPDisplayNotInitialized = 1;
//*********************************************************************************************
// Name : WP_InitWaypointSPO
// Description : Creates the SPO that will contain all the GEO Objs for the WP
// Author : Marc FASCIA
// Date : 04/03/98
// Optimized ? : No
//*********************************************************************************************
HIE_tdstSuperObject * WP_InitSPO()
{
MTH3D_tdstMatrix stIdMatrix;
MTH3D_tdstVector stZeroVector;
POS_stCompletePosition stCompletePos;
HIE_tdstSuperObject * p_stSPO;
//--- Creates the SPO in memory
p_stSPO = HIE_fn_hCreateSuperObject();
//--- Inits the Position ---
MTH3D_M_vNullVector( &stZeroVector );
MTH3D_M_vSetIdentityMatrix( &stIdMatrix );
POS_fn_vSetTransformMatrix( &stCompletePos, &stIdMatrix.stCol_0, &stIdMatrix.stCol_1, &stIdMatrix.stCol_2 );
POS_fn_vSetRotationMatrix( &stCompletePos, &stIdMatrix.stCol_0, &stIdMatrix.stCol_1, &stIdMatrix.stCol_2 );
POS_fn_vSetTranslationVector( &stCompletePos, &stZeroVector );
HIE_fn_vSetSuperObjectMatrix( p_stSPO, &stCompletePos );
return p_stSPO;
}
//*********************************************************************************************
// Name : WP_InitWPModel
// Description : Loads the GEO Obj primitive displayed for each WP
// Author : Marc FASCIA
// Date : 04/03/98
// Optimized ? : No
//*********************************************************************************************
GEO_tdstGeometricObject * WP_InitWPModel()
{
GEO_tdstGeometricObject * p_stLoaded;
p_stLoaded = (GEO_tdstGeometricObject *) SCR_M_ul_RdL0_ExtractLongValue(
SCR_fnp_st_RdL0_AnalyseSection( "GameData\\World\\Levels\\morbide\\morbide.mod^Geometric:Box01", SCR_CDF_uw_Anl_ForceAnalyse ),
0 );
return p_stLoaded;
}
//*********************************************************************************************
// Name : WP_FillWaypointsSPO
// Description : Links the Geo Objs with the WP SPO
// Author : Marc FASCIA
// Date : 04/03/98
// Optimized ? : No
//*********************************************************************************************
void WP_FillWaypointSPO()
{
WP_tdstWayPoint * p_stWaypt;
ACP_tdxIndex xNbVertices;
unsigned int uiPos;
SCR_tdst_Link_Value * pLinkValue;
SCR_tdst_Link_Table * pLinkTable;
GEO_tdstGeometricObject * p_stCurrGeoObj;
static HIE_tdstSuperObject * p_stCurrSPO;
//--- gettink back the Waypoints linktable
pLinkTable = WP_fnp_WayPoint_GetLinkTable();
//--- First element
uiPos = 0;
SCR_M_DyAr_GetNextElement( SCR_tdst_Link_Value, uiPos, pLinkValue, SCR_M_st_Link_GetDynamicArray(pLinkTable) )
while (pLinkValue)
{
//--- Getting the Waypoint handle
p_stWaypt = (WP_tdstWayPoint *) SCR_M_ul_Link_GetValue( pLinkValue );
//--- Creates the Geo Obj and the SPO
p_stCurrGeoObj = WP_InitWPModel();
p_stCurrSPO = WP_InitSPO();
//--- Links it to its own SPO ---
HIE_fn_vSetSuperObjectObjectAndType( p_stWaypointsSPO, p_stCurrGeoObj, C_ucPhysical );
//--- Creates SPO hierarchy ---
HIE_fn_vSuperObjectAddTail( p_stWaypointsSPO, p_stCurrSPO );
for( xNbVertices = 0 ; xNbVertices < p_stCurrGeoObj->xNbPoints ; xNbVertices++ )
{
//--- Translates the Model object at the waypoint position
MTH3D_M_vAddVector( &(p_stCurrGeoObj->d_stListOfPoints[ xNbVertices ]),
&(p_stCurrGeoObj->d_stListOfPoints[ xNbVertices ]),
&(p_stWaypt->m_stVertex) );
}
//--- Sends the object to the Display Routines
// GLI_xSendObjectToViewportWithLights( p_stViewport, p_stCurrGeoObj, ulDrawMask );
//--- Next Linked Value
uiPos++;
SCR_M_DyAr_GetNextElement( SCR_tdst_Link_Value, uiPos, pLinkValue, SCR_M_st_Link_GetDynamicArray(pLinkTable) )
}
}
//*********************************************************************************************
// Name : WP_WPAttachInHierarchy
// Description : Adds the WP SPO in the SPO hierarchy
// Author : Marc FASCIA
// Date : 04/03/98
// Optimized ? : No
//*********************************************************************************************
void WP_WPAttachInHierarchy( HIE_tdstSuperObject * p_stRootSPO )
{
//--- We need to load the Model the first time
if( s_ucWPDisplayNotInitialized )
{
//--- Init of the Waypoints root spo ---
p_stWaypointsSPO = WP_InitSPO();
HIE_fn_vSetSuperObjectObjectAndType( p_stWaypointsSPO, NULL, C_ucNoAction );
WP_FillWaypointSPO();
//--- Now the hierarchy has been built ---
s_ucWPDisplayNotInitialized = 0;
}
//--- Linking this branch to the static tree ---
HIE_fn_vSuperObjectAddTail( p_stRootSPO, p_stWaypointsSPO );
}
//*********************************************************************************************
// Name : WP_WPIsolateFromHierarchy
// Description : Removes the WP SPO in the SPO hierarchy
// Author : Marc FASCIA
// Date : 04/03/98
// Optimized ? : No
//*********************************************************************************************
void WP_WPIsolateFromHierarchy()
{
//--- Cutting the Waypoint branch from the static tree ---
HIE_fn_vIsolate( p_stWaypointsSPO );
}
*/