reman3/Rayman_X/cpa/tempgrp/OAC/Src/_Actors.cpp

2248 lines
70 KiB
C++

/////////////////////////////////////////////////
// _Actors.cpp
//
// Implementation file - Actors DLL Object
//
// Programmation : YB
/////////////////////////////////////////////////
#include "StdAfx.h"
#include "_AInterf.hpp"
#include "IncGAM.h"
#include "TFa.h"
#include "DPT.h"
#include "EDACStrg.hpp"
#include "EDACInst.hpp"
#include "EDACModl.hpp"
#include "EDACVwAc.hpp"
#include "EDACDgIf.hpp"
#include "EDACDgQu.hpp"
#include "Defines.hpp"
//-----------------IR-------------------------
#include "EdIRStrg.hpp"
#include "EdIRFrm.hpp"
#include "EdIRDVVw.hpp"
#include "EdIRBeEn.hpp"
//BEGIN ROMTEAM Cristi Petrescu 98-05-
#include "ai_intf.hpp"
//END ROMTEAM Cristi Petrescu 98-05-
//--------------------------------------------
#include "EDACActr.hpp"
#include "OPD.h"
#include "OGd.h"
#include "ErO.h"
#undef CPA_WANTS_IMPORT
#undef CPA_EXPORT
#define CPA_WANTS_EXPORT
//-----------------IR-------------------------
#include "EdIRIRD.hpp"
//--------------------------------------------
#include "_Actors.hpp"
#undef CPA_WANTS_EXPORT
#define CPA_WANTS_IMPORT
static const CString s_g_c_csAntiSlash = "\\";
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//******************************************************************************
//******************************************************************************
DeclareTemplateStatic(EdActors_tdhHandleToActor);
//******************************************************************************
//******************************************************************************
// Del function
//******************************************************************************
void fn_vDelete(EdActors_tdhHandleToActor hObj)
{
// !!!! For actors, deletion is made in Editor's objects !!!!
}
//CPA2 Stegaru Cristian 98-06
CString CPA_Actor::m_csINIFileName = "Objects\\Actors\\Actors.ini";
CString CPA_Actor::m_csHideVariableSection = "HideVariableSection";
//End CPA2 Stegaru Cristian 98-06
//******************************************************************************
void CPA_Actor::StaticInit()
{
CPA_EdMot<EdActors_tdhHandleToActor>::Init(NULL, NULL, fn_vDelete);
SCR_fn_v_RdL0_RegisterCallback( M_MAKECHAR(g_c_csActorScriptModelSectionName),
EdActors_MyDocument::m_fn_tdeCallBackLoadModel,
SCR_CRC_c_RdL0_ForSection);
SCR_fn_v_RdL0_RegisterCallback( M_MAKECHAR(g_c_csMSSection),
EdActors_ActorMiniStructure::m_fn_tdeCallBackLoad,
SCR_CRC_c_RdL0_ForSection);
//For fields in Watch ("elv" file)
SCR_fn_v_RdL0_RegisterCallback( M_MAKECHAR(g_c_csEdActors_ActorInWatchSectionName),
EdActors_MyDocument::m_fn_tdeCallBackLoadFieldsInWatch,
SCR_CRC_c_RdL0_ForSection);
}
//******************************************************************************
//******************************************************************************
// CPA_Actor normal constructor
//******************************************************************************
//******************************************************************************
CPA_Actor::CPA_Actor( EdActors_tdhHandleToActor hObj,
EdActors_EditorActor *pclEditorActor,
CString csType,
CPA_Actor *pclBaseModel,
CPA_Family *pclBaseFamily,
CPA_SuperObject *_p_oSuperObject,
CString csName,
BOOL _bActorIsAvailable /*= TRUE*/
)
: CPA_SaveObject( g_pclInterface,
csType,
E_ss_Responsible
),
CPA_EdMot<EdActors_tdhHandleToActor>(hObj)
{
////////////////////
// Specific inits //
////////////////////
// Init members //
//To be able to save
m_bIsAnAlways = FALSE;
m_bIsAGenDoor = FALSE;
m_bDisplayZone = FALSE;
m_pclIsolatedSuperObject = NULL;
m_pclSectionSubObject = NULL;
m_pri_pclCurrentObjectTable = NULL;
m_pri_pclInitialObjectTable = NULL;
m_pri_pclCurrentAction = NULL;
m_pri_pclInitialAction = NULL;
m_pri_pclCurrentState = NULL;
m_pri_pclInitialState = NULL;
m_pclSuperObject = NULL;
m_pri_pclFamily = pclBaseFamily;
m_bIsAnInstance = ( csType.Compare(g_c_csActorType) == 0 );
m_pri_bIsCommon = FALSE;
m_pri_bIsInFix = FALSE;
m_pri_bIsAlwaysActive = FALSE;
// ANNECY MT - 19/11/98 {
m_pri_bIsInAllSubMaps = FALSE;
// END ANNECY MT }
m_pri_bHasBeenModified = FALSE;
m_bCheckZonesAgainstBV = TRUE;
////////////////
// Base inits //
////////////////
//Section object
SetSectionData(this);
SetCallBackSave(s_m_fn_vCallBackSaveActor);
SetDataPath((char *)LPCTSTR(g_pclInterface->m_clDocument.m_pub_csCommonDataPath));
//Base objet
CPA_SaveObject *pclActorsOwner = NULL;
if ( csType.CompareNoCase(g_c_csActorType) == 0 )
pclActorsOwner = (CPA_SaveObject *)pclBaseModel;
else if ( csType.CompareNoCase(g_c_csActorModelType) == 0 )
pclActorsOwner = (CPA_SaveObject *)pclBaseFamily;
fn_bSetOwner(pclActorsOwner);
//Name
if (fn_eRename(csName) != E_mc_None )
SetDefaultValidName();
m_bHideVariable = FALSE;
mfn_vLoadFromINI ();
if ( _p_oSuperObject != NULL )
{
m_pub_fn_vSetSuperObject(_p_oSuperObject);
_p_oSuperObject->SetObject(this);
}
//*****************************
//** Creation of an Instance **
//*****************************
if ( csType.Compare(g_c_csActorType) == 0 )
{
EdActors_EditorActorInstance *pclNewEditorInstance = new EdActors_EditorActorInstance(pclBaseModel,
this,
hObj,
_p_oSuperObject);
//Adds in the List
g_pclInterface->m_clDocument.m_clInstancesList.fn_bAddObject(this);
if ( pclBaseModel != NULL )
m_bIsAGenDoor = pclBaseModel->m_fn_bIsAGenDoor();
}
//*************************
//** Creation of a Model **
//*************************
else if ( csType.Compare(g_c_csActorModelType) == 0 )
{
//Creates Editor's Model
EdActors_EditorActorModel *pclNewEditorModel = NULL;
if ( pclBaseFamily != NULL )
pclNewEditorModel = new EdActors_EditorActorModel(pclBaseFamily,this);
else
pclNewEditorModel = new EdActors_EditorActorModel(this);
ERROR_PREPARE_M(g_c_csActorModuleNameForErrors,
"Creation of a Model",
"CPA_Actor::CPA_Actor(...)",
E_ERROR_GRAVITY_FATAL,
"Editor Model has not been created (Pointer is NULL)");
ERROR_ASSERT( pclNewEditorModel != NULL );
//Sets internal Pointer
m_pclEditorActor = pclNewEditorModel;
EdActors_tdhHandleToActor hActor = (EdActors_tdhHandleToActor)(pclNewEditorModel->m_fn_ptdstGetMotorActor());
fn_vUpdateData(hActor);
SetEngineStruct(hActor);
//Adds in the List
g_pclInterface->m_clDocument.m_clModelsList.fn_bAddObject(this);
if (!g_pclInterface->m_clDocument.m_pLoadedModel)
g_pclInterface->m_clDocument.m_pLoadedModel = this;
//Tells Material Editor about the Model creation
CPA_DLLBase *p_clGameMaterialDLL = g_pclInterface->GetMainWorld()->GetToolDLLWithName(C_szDLLMaterialName);
if( p_clGameMaterialDLL != NULL )
p_clGameMaterialDLL->OnQueryAction(g_pclInterface, (WPARAM)C_cCreateNewGameMaterial, 0);
}
//For Object Tables
m_pub_fn_vConstructEnumDescriptorForObjectsTables();
//Updates List Dialog
// g_pclInterface->m_clDocument.m_pclDialogList->fn_vUpdateSelection(E_lrm_ReinitList);
fn_vUpdateSectionName();
//First notification
if ( m_fn_bIsAModel() )
{
//If Model is loaded from a file
if ( pclBaseFamily == NULL )
SetExistingSection(TRUE);
else
SetExistingSection(FALSE);
}
else
{
//If Instance is loaded from a file
if ( hObj != NULL )
SetExistingSection(TRUE);
else
SetExistingSection(FALSE);
}
//Internal Section Object
m_pclSectionSubObject = new CPA_SectionObject("",
(char *)LPCTSTR(g_pclInterface->m_clDocument.m_pub_csCommonDataPath),
s_m_fn_vCallBackSaveActor,
this,
fn_bSectionExists());
if ( pclBaseFamily != NULL )
m_pclSectionSubObject->SetReferencedSectionName(m_pri_fn_csComputeReferencedFileName());
if ( ( fn_bCanBeNotified() )
&& ( !fn_bSectionExists() )
&& ( _bActorIsAvailable )
)
fn_vNotifySave();
// !! Bidon !!
//Sets Inital OT
/* if ( m_fn_bIsAModel() && _bActorIsAvailable )
{
//m_pub_fn_vConstructEnumDescriptorForObjectsTables();
EditorObjectTable *pclOT = NULL;
CString csOTName;
if ( m_pub_fn_pclGetEnumDescriptorForObjectsTables()->GetCount() > 0 )
{
CString csOTName = m_pub_fn_pclGetEnumDescriptorForObjectsTables()->GetHead()->m_pub_fn_csGetString();
pclOT = (EditorObjectTable *)g_pclInterface->GetMainWorld()->fn_p_oFindObject(csOTName, C_szObjectTableTypeName);
}
m_pub_fn_vSetInitialObjectTable(pclOT);
}
*/ // !! End Bidon !!
}
//******************************************************************************
//******************************************************************************
// CPA_Actor Copy constrcutor
//******************************************************************************
//******************************************************************************
// !! Only works with Models !!
//******************************************************************************
CPA_Actor::CPA_Actor(CPA_Actor *_pclSourceActor,
CPA_SuperObject *_p_oSuperObject,
CString _csName)
: CPA_SaveObject( g_pclInterface,
_pclSourceActor->GetType(),
E_ss_Responsible
),
CPA_EdMot<EdActors_tdhHandleToActor>((EdActors_tdhHandleToActor)NULL)
{
////////////////////
// Specific inits //
////////////////////
// Init members //
//To be able to save
m_bIsAnAlways = _pclSourceActor->m_bIsAnAlways;
m_bIsAGenDoor = FALSE; //An init function will be called
m_bDisplayZone = FALSE;
m_pclIsolatedSuperObject = NULL;
m_pclSectionSubObject = NULL;
m_pri_pclCurrentObjectTable = _pclSourceActor->m_pri_pclCurrentObjectTable;
m_pri_pclInitialObjectTable = _pclSourceActor->m_pri_pclInitialObjectTable;
m_pri_pclCurrentAction = _pclSourceActor->m_pri_pclCurrentAction;
m_pri_pclInitialAction = _pclSourceActor->m_pri_pclInitialAction;
m_pri_pclCurrentState = _pclSourceActor->m_pri_pclCurrentState;
m_pri_pclInitialState = _pclSourceActor->m_pri_pclInitialState;
m_pclSuperObject = NULL;
m_pri_pclFamily = _pclSourceActor->m_pub_fn_pclGetFamily();
m_bIsAnInstance = _pclSourceActor->m_bIsAnInstance;
m_pri_bIsCommon = FALSE;
m_pri_bIsInFix = FALSE;
m_pri_bIsAlwaysActive = FALSE;
// ANNECY MT - 19/11/98 {
m_pri_bIsInAllSubMaps = FALSE;
// END ANNECY MT }
m_pri_bHasBeenModified = FALSE;
////////////////
// Base inits //
////////////////
//Section object
SetSectionData(this);
SetCallBackSave(s_m_fn_vCallBackSaveActor);
SetDataPath((char *)LPCTSTR(g_pclInterface->m_clDocument.m_pub_csCommonDataPath));
//Base objet
CPA_SaveObject *pclActorsOwner = NULL;
// if ( m_bIsAnInstance )
// pclActorsOwner = (CPA_SaveObject *)_pclSourceActor->m_pub_fn_pclGetModel();
// else
pclActorsOwner = (CPA_SaveObject *)m_pri_pclFamily;
fn_bSetOwner(pclActorsOwner);
//Name
if ( fn_eRename(_csName) != E_mc_None )
SetDefaultValidName();
if ( _p_oSuperObject != NULL )
m_pub_fn_vSetSuperObject(_p_oSuperObject);
//*************************
//** Copy of an Instance **
//*************************
if ( _pclSourceActor->GetType().Compare(g_c_csActorType) == 0 )
{
/* EdActors_EditorActorInstance *pclNewEditorInstance = new EdActors_EditorActorInstance(pclBaseModel,
this,
hObj,
_p_oSuperObject);
//Adds in the List
g_pclInterface->m_clDocument.m_clInstancesList.fn_bAddObject(this);
if ( pclBaseModel != NULL )
m_bIsAGenDoor = pclBaseModel->m_fn_bIsAGenDoor();
*/
}
//*********************
//** Copy of a Model **
//*********************
else if ( _pclSourceActor->GetType().Compare(g_c_csActorModelType) == 0 )
{
//Creates Editor's Model
EdActors_EditorActorModel *pclNewEditorModel = NULL;
//Calls the copy contructor
pclNewEditorModel = new EdActors_EditorActorModel(_pclSourceActor->m_fn_pclGetEditorModel(), this);
ERROR_PREPARE_M(g_c_csActorModuleNameForErrors,
"Copy of a Model",
"CPA_Actor::CPA_Actor(...) <Copy constructor>",
E_ERROR_GRAVITY_FATAL,
"Editor Model has not been created (returned Pointer is NULL)");
ERROR_ASSERT( pclNewEditorModel != NULL );
//Sets internal Pointer
m_pclEditorActor = pclNewEditorModel;
EdActors_tdhHandleToActor hActor = (EdActors_tdhHandleToActor)(pclNewEditorModel->m_fn_ptdstGetMotorActor());
fn_vUpdateData(hActor);
SetEngineStruct(hActor);
//Adds in the List
g_pclInterface->m_clDocument.m_clModelsList.fn_bAddObject(this);
//Tells Material Editor about the Model creation
// CPA_DLLBase *p_clGameMaterialDLL = g_pclInterface->GetMainWorld()->GetToolDLLWithName(C_szDLLMaterialName);
// if( p_clGameMaterialDLL != NULL )
// p_clGameMaterialDLL->OnQueryAction(g_pclInterface, (WPARAM)C_cCreateNewGameMaterial, 0);
}
//For Object Tables
m_pub_fn_vConstructEnumDescriptorForObjectsTables();
//Updates List Dialog
// g_pclInterface->m_clDocument.m_pclDialogList->fn_vUpdateSelection(E_lrm_ReinitList);
fn_vUpdateSectionName();
//First notification
//Is never loaded
SetExistingSection(FALSE);
//Internal Section Object
m_pclSectionSubObject = new CPA_SectionObject("",
(char *)LPCTSTR(g_pclInterface->m_clDocument.m_pub_csCommonDataPath),
s_m_fn_vCallBackSaveActor,
this,
fn_bSectionExists());
m_pclSectionSubObject->SetReferencedSectionName(m_pri_fn_csComputeReferencedFileName());
if ( ( fn_bCanBeNotified() )
&& ( !fn_bSectionExists() )
)
fn_vNotifySave();
}
//******************************************************************************
CPA_Actor::~CPA_Actor()
{
// ANNECY MT 13-02-98 {
// Destroy from Coherence Manager
g_oCoherenceManager.m_fn_vDestroyObject(this);
// END ANNECY MT }
//Deletes Editor Actor
delete m_pclEditorActor;
}
//******************************************************************************
void CPA_Actor::SetEngineStruct(EdActors_tdhHandleToActor hObj)
{
SetStruct(hObj);
//Sets internal data
m_pclEditorActor->m_fn_vSetMotorActor(hObj);
}
// Specific
/////////////
//******************************************************************************
CPA_Actor *CPA_Actor::m_fn_pclGetModel()
{
if ( m_fn_bIsAnInstance() )
return ( (CPA_Actor *)GetOwner() );
else
return NULL;
}
//******************************************************************************
BOOL CPA_Actor::m_fn_bIsAnInstance()
{
return ( m_bIsAnInstance );
}
//******************************************************************************
BOOL CPA_Actor::m_fn_bIsAModel()
{
return ( !m_bIsAnInstance );
}
//******************************************************************************
EdActors_EditorActor *CPA_Actor::m_fn_pclGetEditorActor()
{
return m_pclEditorActor;
}
//******************************************************************************
void CPA_Actor::m_fn_vSetEditorActor(EdActors_EditorActor *p_clEditorActor)
{
m_pclEditorActor = p_clEditorActor;
}
//******************************************************************************
EdActors_EditorActorModel *CPA_Actor::m_fn_pclGetEditorModel()
{
if ( m_fn_bIsAModel() )
return (EdActors_EditorActorModel *)m_pclEditorActor;
else
return NULL;
}
//******************************************************************************
EdActors_EditorActorInstance *CPA_Actor::m_fn_pclGetEditorInstance()
{
if ( m_fn_bIsAnInstance() )
return (EdActors_EditorActorInstance *)m_pclEditorActor;
else
return NULL;
}
//******************************************************************************
//To set a new name for an Actor
BOOL CPA_Actor::m_fn_bRename(CString _csNewName)
{
BOOL bReturn = TRUE;
CString csNewName = _csNewName;
BOOL bIsLoadingWorld = g_pclInterface->GetInterface()->fn_bIsLoadingWorld();
if ( m_pub_fn_bCanBeRenamed() )
{
//ANNECY Shaitan RenameAlways (03.04.98) {
if (m_bIsAnAlways)
{
CString csPrefix = csNewName.Left(4);
if (!bIsLoadingWorld && (csPrefix.CompareNoCase("ALW_") != 0))
{
// if necessary, remove user prefix, and set always prefix
if (csPrefix.Compare(g_pclInterface->GetInterface()->GetUserPrefix()) == 0)
csNewName = "ALW_" + _csNewName.Mid(4);
else
csNewName = "ALW_" + _csNewName;
// rename actor
while (fn_eCheckValidity(csNewName) != E_mc_None)
csNewName = csNewName + "1";
}
}
//ENDANNECY Shaitan RenameAlways }
//Renames Object
if ( csNewName.Compare(GetName()) != 0 )
{
//For Level to be changed (deletes old section)
g_pclInterface->m_clDocument.m_fn_vNotifyLevel(this, FALSE);
if (m_bIsAnAlways && !bIsLoadingWorld)
g_pclInterface->GetInterface()->SetLoadingWorld(TRUE);
bReturn = ( fn_eRename(csNewName) == E_mc_None );
g_pclInterface->GetInterface()->SetLoadingWorld(bIsLoadingWorld);
}
if ( bReturn )
{
//Motor changes
if ( m_fn_bIsAnInstance() )
{
MS_tdxHandleToStandardGame h_StdGame = m_fn_pclGetEditorActor()->m_fn_ptdstGetMotorActor()->h_StandardGame;
tdObjectType otPersonalType = fn_otStandardGameGetPersonalType(h_StdGame);
fn_vChangePersonalTypeNameOfPersonalType(otPersonalType, (char *)LPCTSTR(csNewName));
}
//Editor's display update
g_pclInterface->m_clDocument.m_pclDialogList->fn_vUpdateSelection(E_lrm_ReinitList);
g_pclInterface->m_clDocument.m_pclActorsView->m_fn_vUpdateActorName();
}
//For Level to be saved (adds new section)
g_pclInterface->m_clDocument.m_fn_vNotifyLevel(this, TRUE);
//Saves modifications in Watch Description
//if ( m_fn_bIsAnInstance() )
// g_pclInterface->m_clDocument.m_pri_fn_bSaveFieldsInWatch();
}
else
{
CString csMessage = CString("Actor '") + GetName() + "' can not be renamed !";
EdActors_InformationDialog InfoDial(&g_oBaseFrame, csMessage);
InfoDial.DoModal();
bReturn = FALSE;
}
return bReturn;
}
//******************************************************************************
//To finish loading a Model
void CPA_Actor::m_fn_vFinishLoading()
{
ERROR_PREPARE_M(g_c_csActorModuleNameForErrors,
"Trying to load an incomplete Model",
"CPA_Actor::m_fn_vFinishLoading(...)",
E_ERROR_GRAVITY_FATAL,
"Actor must be a Model, but is an Instance");
ERROR_ASSERT( m_fn_bIsAModel() );
CString csCompleteName = m_fn_csGetFamilyName() + '\\' + GetName() + '\\' + GetName();
g_pclInterface->m_clDocument.m_fn_pclLoadModel(csCompleteName, this);
SetAvailable(TRUE);
//Updates display
g_pclInterface->m_clDocument.m_fn_vDisplayActor(m_pclEditorActor, ED_ACTORS_eModeOfActorSelection_Unknown);
}
//******************************************************************************
CString CPA_Actor::m_fn_csGetFamilyName()
{
return m_csFamilyName;
}
//******************************************************************************
void CPA_Actor::m_fn_vSetFamilyName(CString csNewFamilyName)
{
m_csFamilyName = csNewFamilyName;
}
//******************************************************************************
// Sets the Actor as an Always
void CPA_Actor::m_fn_vMakeAlways(BOOL bIsAnAlways /*= TRUE*/)
{
BOOL bIsLoadingWorld;
CString csName, csPrefix;
if (!m_fn_bCanBeAnAlways())
{
CString csMessage;
csMessage.Format("Actor %s cannot be set as always", GetName());
ERROR_PREPARE_M(g_c_csActorModuleNameForErrors,
"Modifying Always Status of Actor",
"CPA_Actor::m_fn_vMakeAlways",
E_ERROR_GRAVITY_WARNING,
csMessage);
ERROR_ASSERT( FALSE );
}
else
{
if ( bIsAnAlways != m_bIsAnAlways )
{
m_bIsAnAlways = bIsAnAlways;
if ( m_bIsAnAlways )
{
//Adds it to the (internal) list of Always
g_pclInterface->m_clDocument.m_clAlwaysList.fn_bAddObject(this);
//Removes from Instances list
g_pclInterface->m_clDocument.m_clInstancesList.fn_bRemoveObject(this);
//ANNECY Shaitan RenameAlways (03.04.98) {
csPrefix = GetName().Left(4);
bIsLoadingWorld = g_pclInterface->GetInterface()->fn_bIsLoadingWorld();
if (!bIsLoadingWorld && (csPrefix.CompareNoCase("ALW_") != 0))
{
g_pclInterface->GetInterface()->SetLoadingWorld(TRUE);
// if necessary, remove user prefix, and set always prefix
if (csPrefix.Compare(g_pclInterface->GetInterface()->GetUserPrefix()) == 0)
csName = "ALW_" + GetName().Mid(4);
else
csName = "ALW_" + GetName();
// rename actor
while (fn_eRename(csName) != E_mc_None)
csName = csName + "1";
g_pclInterface->GetInterface()->SetLoadingWorld(bIsLoadingWorld);
}
//ENDANNECY Shaitan RenameAlways }
//Makes the motor modifications
if( !fn_ucIsAnAlwaysModel(m_fn_pclGetEditorActor()->m_fn_ptdstGetMotorActor()) )
{
fn_vAddAnAlwaysModel(m_fn_pclGetEditorActor()->m_fn_ptdstGetMotorActor());
//
fn_v3dDataInit(m_fn_pclGetEditorActor()->m_fn_ptdstGetMotorActor(), OTI_AlwaysCreated);
}
//Removes from hierarchy
if (!bIsLoadingWorld)
ERROR_VERIFY( g_pclInterface->GetInterface()->fn_bDeleteObjectInHierarchy(m_pub_fn_pclGetSuperObject(), FALSE) );
}
else
{
//Adds it to the (internal) list of Instances
g_pclInterface->m_clDocument.m_clInstancesList.fn_bAddObject(this);
//Removes from Always list
g_pclInterface->m_clDocument.m_clAlwaysList.fn_bRemoveObject(this);
//ANNECY Shaitan RenameAlways (03.04.98) {
csPrefix = GetName().Left(4);
bIsLoadingWorld = g_pclInterface->GetInterface()->fn_bIsLoadingWorld();
if (!bIsLoadingWorld && (csPrefix.Compare(g_pclInterface->GetInterface()->GetUserPrefix()) != 0))
{
g_pclInterface->GetInterface()->SetLoadingWorld(TRUE);
// if necessary, remove user prefix, and set always prefix
if (csPrefix.CompareNoCase("ALW_") == 0)
csName = g_pclInterface->GetInterface()->GetUserPrefix() + GetName().Mid(4);
else
csName = g_pclInterface->GetInterface()->GetUserPrefix() + GetName();
// rename actor
while (fn_eRename(csName) != E_mc_None)
csName = csName + "1";
g_pclInterface->GetInterface()->SetLoadingWorld(bIsLoadingWorld);
}
//ENDANNECY Shaitan RenameAlways }
//Removes from hierarchy
ERROR_VERIFY( g_pclInterface->GetInterface()->fn_bInsertObjectInHierarchy(m_pub_fn_pclGetSuperObject(), g_pclInterface->GetInterface()->GetSpecificInterface()->GetDynamicRoot(), FALSE) );
}
}
}
}
//******************************************************************************
BOOL CPA_Actor::m_fn_bIsAnAlways()
{
return m_bIsAnAlways;
}
//******************************************************************************
BOOL CPA_Actor::m_fn_bCanBeAnAlways()
{
if ( m_fn_bIsTheCurrentMotorCamera()
|| m_fn_bIsAPrincipalActor()
/*|| m_fn_bIsTheWorldActor()*/
/* || m_fn_bIsAGenDoor()*/
)
return FALSE;
if (!g_pclInterface->GetInterface()->fn_bIsLoadingWorld())
{
EdActors_EditorActorModel * pModel = m_fn_pclGetModel()->m_fn_pclGetEditorModel();
EdActors_EditorActorInstance * pInstance;
POSITION pos = pModel->m_clInstancesList.GetHeadPosition();
while (pos != NULL)
{
pInstance = pModel->m_clInstancesList.GetNext(pos);
if (pInstance->m_pclActor->m_fn_bIsAnAlways() && (pInstance->m_pclActor != this))
return FALSE;
}
}
return TRUE;
}
//******************************************************************************
//Get/Set for pointer on the SO isolated before engine mode
//Only useful for GenDoors type Actors
//******************************************************************************
CPA_SuperObject *CPA_Actor::m_fn_pclGetIsolatedSuperObject()
{
ERROR_PREPARE_M(g_c_csActorModuleNameForErrors,
"Gets an isolated SuperObject",
"CPA_Actor::m_fn_pclGetIsolatedSuperObject(...)",
E_ERROR_GRAVITY_FATAL,
"Actor must be an Instance, but is a Model");
ERROR_ASSERT( m_fn_bIsAnInstance() );
return m_pclIsolatedSuperObject;
}
//******************************************************************************
void CPA_Actor::m_fn_vSetIsolatedSuperObject(CPA_SuperObject *pclNewIsolatedSO)
{
ERROR_PREPARE_M(g_c_csActorModuleNameForErrors,
"Sets an isolated SuperObject",
"CPA_Actor::m_fn_vSetIsolatedSuperObject(...)",
E_ERROR_GRAVITY_FATAL,
"Actor must be an Instance, but is a Model");
ERROR_ASSERT( m_fn_bIsAnInstance() );
m_pclIsolatedSuperObject = pclNewIsolatedSO;
}
//******************************************************************************
void CPA_Actor::m_fn_vMakeGenDoor(BOOL bIsAGenDoor /*= TRUE*/)
{
m_bIsAGenDoor = bIsAGenDoor;
}
//******************************************************************************
BOOL CPA_Actor::m_fn_bIsAGenDoor()
{
return m_bIsAGenDoor;
}
//Always active
//******************************************************************************
BOOL CPA_Actor::m_pub_fn_bIsAlwaysActive()
{
return m_pri_bIsAlwaysActive;
}
//******************************************************************************
void CPA_Actor::m_pub_fn_vSetAlwaysActive(BOOL _bAlwaysActive,
BOOL _bIsLoading /*= FALSE*/)
{
m_pri_bIsAlwaysActive = _bAlwaysActive;
//Notifies Level
if ( !_bIsLoading )
{
//Updates Motor
if ( m_pri_bIsAlwaysActive )
fn_vAddCharacterInAlwaysActiveCharacterList(m_pub_fn_hGetMotorSuperObject());
else
fn_vRemoveCharacterFromAlwaysActiveCharacterList(m_pub_fn_hGetMotorSuperObject());
//Notifies
g_pclInterface->m_clDocument.m_fn_vNotifyLevel(this, TRUE);
}
}
// ANNECY MT - 19/11/98 {
//In all SubMaps
//******************************************************************************
BOOL CPA_Actor::m_pub_fn_bIsInAllSubMaps()
{
return m_pri_bIsInAllSubMaps;
}
//******************************************************************************
void CPA_Actor::m_pub_fn_vSetInAllSubMaps(BOOL _bInAllSubMaps,
BOOL _bIsLoading /*= FALSE*/)
{
m_pri_bIsInAllSubMaps = _bInAllSubMaps;
//Notifies Level
if ( !_bIsLoading )
{
//Updates Motor
fn_vStdGameSetInAllSubMaps( M_GetMSHandle(m_pub_fn_hGetMotorSuperObject(), StandardGame) , m_pri_bIsInAllSubMaps);
//Notifies
g_pclInterface->m_clDocument.m_fn_vNotifyLevel(this, TRUE);
}
}
// END ANNECY MT }
//******************************************************************************
BOOL CPA_Actor::m_fn_bIsTheCurrentMotorCamera()
{
// struct GLI_tdstCamera_ *p_stCamera;
return ( CAM_fn_hGetActiveCamera(CAM_e_MainViewport) == m_pub_fn_hGetMotorSuperObject() );
}
//******************************************************************************
BOOL CPA_Actor::m_fn_bIsAPrincipalActor()
{
return ( MC_fn_ucIsCharacterInMainCharacterList(m_pub_fn_hGetMotorSuperObject()) == 1 );
}
//******************************************************************************
/*BOOL CPA_Actor::m_fn_bIsTheWorldActor()
{
EdActors_ActorMiniStructure *pclWorldAMS = m_fn_pclGetEditorActor()->m_clListOfAMSLists.m_fn_pclGetAMSFromName("World");
if ( pclWorldAMS != NULL )
return (pclWorldAMS->m_fn_bIsAllocated());
else
return FALSE;
}*/
//******************************************************************************
void CPA_Actor::m_pub_fn_vAddChildsFromEngineChilds()
{
ERROR_PREPARE_M(g_c_csActorModuleNameForErrors,
"Adding childs to Actor, from engine objects",
"CPA_Actor::m_pub_fn_vAddChildsFromEngineChilds(...)",
E_ERROR_GRAVITY_FATAL,
"Actor must be an Instance, but is a Model");
ERROR_ASSERT( m_fn_bIsAnInstance() );
//Gets the motor SuperObject's childs, and creates the associated Editor objects
CPA_SuperObject *pclEdSo = m_pub_fn_pclGetSuperObject();
ERROR_PREPARE_M(g_c_csActorModuleNameForErrors,
"Adding childs to Actor, from engine objects",
"CPA_Actor::m_pub_fn_vAddChildsFromEngineChilds(...)",
E_ERROR_GRAVITY_FATAL,
"Actor has no Editor Super Object");
ERROR_ASSERT( pclEdSo != NULL );
//To respect Animation hierarchy
m_pri_fn_vBuildChildOfOneLevel(pclEdSo);
}
//******************************************************************************
void CPA_Actor::m_pri_fn_vBuildChildOfOneLevel(CPA_SuperObject *_pclEditorSoFather)
{
HIE_tdxHandleToSuperObject hMotorSOFather = (HIE_tdxHandleToSuperObject)_pclEditorSoFather->GetStruct();
long c_lI;
HIE_tdxHandleToSuperObject hChild;
HIE_M_ForEachChildOf(hMotorSOFather, hChild, c_lI)
{
CPA_SuperObject *pclNewModule = NULL;
if ( hChild->ulTypeOfLinkedObject == HIE_C_ulPO )
{
POInterface *p_oPODLL = (POInterface *)GetMainWorld()->GetObjectDLLWithName(C_szDLLPhysicalObjectName);
ERROR_PREPARE_M(g_c_csActorModuleNameForErrors,
"Adding a module child to Actor, from engine objects",
"CPA_Actor::m_pri_fn_vBuildChildOfOneLevel(...)",
E_ERROR_GRAVITY_FATAL,
"Physical Objects DLL has not been found");
ERROR_ASSERT( p_oPODLL != NULL );
pclNewModule = p_oPODLL->GetNewEditorInstance( hChild );
pclNewModule->SetTypeSO(C_Protected);
}
else if ( hChild->ulTypeOfLinkedObject == HIE_C_ulSuperObject )
{
pclNewModule = g_pclInterface->GetInterface()->GetNewSuperObject( hChild,
E_ss_NoSave,
C_Protected,
"",
"");
}
if ( pclNewModule != NULL )
{
//Adds graphical SuperObject as Actor's child
_pclEditorSoFather->AddTail(pclNewModule, FALSE);
//Indicates that Module is Actor's property
//Modified by YB for Alexis (31/10/97)
pclNewModule->SetSuperObjectOwner(m_pub_fn_pclGetSuperObject());
//pclNewModule->SetSuperObjectOwner(_pclEditorSoFather);
pclNewModule->SetEditProtected(TRUE);
//Recursively adding curent father's childs
m_pri_fn_vBuildChildOfOneLevel(pclNewModule);
}
}
}
//******************************************************************************
void CPA_Actor::m_pub_fn_vAddChildsForGenDoors()
{
ERROR_PREPARE_M(g_c_csActorModuleNameForErrors,
"Adding childs to Actor, for a Gen Doors type object",
"CPA_Actor::m_pub_fn_vAddChildsForGenDoors(...)",
E_ERROR_GRAVITY_FATAL,
"Actor must be an Instance, but is a Model");
ERROR_ASSERT( m_fn_bIsAnInstance() );
//Loads the ".MOD"
CString csModFileName = ((EdActors_EditorActorModel *)m_fn_pclGetModel()->m_fn_pclGetEditorActor())->m_fn_csGetBitmapName();
csModFileName = csModFileName.Left(csModFileName.GetLength() - 3) + "mod";
csModFileName = CString("EDT_Data\\") + g_pclInterface->m_clDocument.m_csModelsBitmapsPathForGenDoors + csModFileName;
//Loads the motor geometric object
SCR_tdst_Cxt_Values *p_stValues;
p_stValues = SCR_fnp_st_RdL0_AnalyseSection((char *)LPCTSTR(csModFileName),
SCR_CDF_uw_Anl_Normal);
GLI_tdstGeometricInfo *p_xGeometricInFile = (GLI_tdstGeometricInfo *)p_stValues->a_ulValues[0];
void *p_vMotorGeometricModuleLoaded = (void *)p_xGeometricInFile->hObject;
//Creates the editor Object and SO
CPA_ObjectDLLBase *p_cl3DGeomDLL = GetMainWorld()->GetObjectDLLWithName(C_szDLLGeometryName);
ERROR_PREPARE_M(g_c_csActorModuleNameForErrors,
"Adding childs to Actor, for a Gen Doors type object",
"CPA_Actor::m_pub_fn_vAddChildsForGenDoors(...)",
E_ERROR_GRAVITY_FATAL,
"3DGeom DLL can't be found");
ERROR_ASSERT( p_cl3DGeomDLL != NULL );
ERROR_PREPARE_M(g_c_csActorModuleNameForErrors,
"Adding childs to Actor, for a Gen Doors type object",
"CPA_Actor::m_pub_fn_vAddChildsForGenDoors(...)",
E_ERROR_GRAVITY_FATAL,
"The motor Geometric object for a Gen Door is not correct");
ERROR_ASSERT( p_vMotorGeometricModuleLoaded != NULL );
long lReturnedValue = p_cl3DGeomDLL->OnQueryAction( g_pclInterface,
(WPARAM)C_uiCreateGeometricObject,
(LPARAM)p_vMotorGeometricModuleLoaded);
Geometry3D *pclGeometricObject = (Geometry3D *)lReturnedValue;
ERROR_PREPARE_M(g_c_csActorModuleNameForErrors,
"Adding childs to Actor, for a Gen Doors type object",
"CPA_Actor::m_pub_fn_vAddChildsForGenDoors(...)",
E_ERROR_GRAVITY_FATAL,
"The Geometric object for a Gen Door is not correctly loaded");
ERROR_ASSERT( pclGeometricObject != NULL );
// pclGeometricObject->fn_bSetResponsibilityLevel(CPA_NoModif);
CPA_SuperObject *pclNewModule = g_pclInterface->GetInterface()->GetNewSuperObject(E_ss_NoSave,
C_Protected,
"",
"");
pclNewModule->SetObject(pclGeometricObject);
CPA_SuperObject *pclEdSo = m_pub_fn_pclGetSuperObject();
//Adds SuperObject as Actor's child
pclEdSo->AddTail(pclNewModule/*, FALSE*/);
//Indicates that Module is Actor's property
pclNewModule->SetSuperObjectOwner(pclEdSo);
pclNewModule->SetEditProtected(TRUE);
//Internal
m_fn_vSetIsolatedSuperObject(pclNewModule);
}
//******************************************************************************
//To remove editor childs
void CPA_Actor::m_pub_fn_vRemoveAllEditorChilds()
{
//Inits the recursive suppression
m_pri_fn_vRemoveAllChildsForOneSO(m_pclSuperObject);
}
//******************************************************************************
//To remove (recursively) editor childs of one SuperObject
void CPA_Actor::m_pri_fn_vRemoveAllChildsForOneSO(CPA_SuperObject *_pclEditorSoFather)
{
//Removes all childs...
CPA_SuperObject *pclCurrentEditorChild = _pclEditorSoFather->GetSuperObjectFirstChild();
CPA_SuperObject *pclNextEditorChild = pclCurrentEditorChild;
while ( pclNextEditorChild != NULL )
{
//Gets next before Isolate
pclNextEditorChild = _pclEditorSoFather->GetSuperObjectNextChild(pclCurrentEditorChild);
//Removes childs
m_pri_fn_vRemoveAllChildsForOneSO(pclCurrentEditorChild);
//Removes from Editor SO Childs
pclCurrentEditorChild->Isolate(FALSE);
pclCurrentEditorChild->fn_bUnValidate();
pclCurrentEditorChild = pclNextEditorChild;
}
}
//******************************************************************************
//To compare the two hierarchies (motor and editor) when back from motor mode
// returns TRUE only if hierarchies are the same
BOOL CPA_Actor::m_pub_fn_bCompareEditorAndMotorChilds()
{
//Inits recursive comparison
return ( m_pri_fn_bCompareOneLevelOfEditorAndMotorChilds(m_pclSuperObject));
}
//******************************************************************************
//To compare (recursively) editor and motor childs of ONE SuperObject
BOOL CPA_Actor::m_pri_fn_bCompareOneLevelOfEditorAndMotorChilds(CPA_SuperObject *_pclFatherSO)
{
BOOL bReturn = TRUE;
HIE_tdxHandleToSuperObject hMotorSO = (HIE_tdxHandleToSuperObject)_pclFatherSO->GetStruct();
CPA_SuperObject *pclCurrentEditorChild;
long c_lI;
HIE_tdxHandleToSuperObject hMotorChild;
HIE_tdxHandleToSuperObject hEditorChild;
pclCurrentEditorChild = _pclFatherSO->GetSuperObjectFirstChild();
HIE_M_ForEachChildOf(hMotorSO, hMotorChild, c_lI)
{
//Compares to Editor SO
if ( pclCurrentEditorChild != NULL )
{
hEditorChild = (HIE_tdxHandleToSuperObject)pclCurrentEditorChild->GetStruct();
if ( ( hEditorChild != hMotorChild )
|| ( hMotorChild->ulTypeOfLinkedObject != pclCurrentEditorChild->GetObjectType() )
)
//At least one child is different
bReturn = FALSE;
}
else
//There are more childs for Motor Actor
bReturn = FALSE;
bReturn = ( bReturn && m_pri_fn_bCompareOneLevelOfEditorAndMotorChilds(pclCurrentEditorChild) );
pclCurrentEditorChild = _pclFatherSO->GetSuperObjectNextChild(pclCurrentEditorChild);
}
if ( pclCurrentEditorChild != NULL )
//There are more childs in Editor SO
bReturn = FALSE;
return bReturn;
}
//******************************************************************************
BOOL CPA_Actor::m_pub_fn_bCanBeRenamed()
{
return ( /*( !m_fn_bIsAModel() ) //No Model can be renamed
&&*/ ( !m_fn_bIsTheCurrentMotorCamera() )
&& ( !m_fn_bIsAPrincipalActor() )
/*&& ( !m_fn_bIsTheWorldActor() )*/
);
}
//Object Tables
//******************************************************************************
CTL_Editor_EnumDescriptor *CPA_Actor::m_pub_fn_pclGetEnumDescriptorForObjectsTables()
{
return m_fn_pclGetEditorActor()->m_pub_fn_pclGetEnumDescriptorForObjectsTables();
}
//******************************************************************************
EditorObjectTable *CPA_Actor::m_pub_fn_pclGetCurrentObjectTable()
{
return m_pri_pclCurrentObjectTable;
}
//******************************************************************************
void CPA_Actor::m_pub_fn_vSetCurrentObjectTable(EditorObjectTable *pclNewOT)
{
m_pri_pclCurrentObjectTable = pclNewOT;
}
//******************************************************************************
EditorObjectTable *CPA_Actor::m_pub_fn_pclGetInitialObjectTable()
{
return m_pri_pclInitialObjectTable;
}
//******************************************************************************
void CPA_Actor::m_pub_fn_vSetInitialObjectTable(EditorObjectTable *pclNewOT)
{
// Shaitan => optimisation lists in the level
// set modification flag in the corresponding family
if (m_pri_pclInitialObjectTable && (pclNewOT != m_pri_pclInitialObjectTable))
((CPA_Family *) pclNewOT->GetOwner())->mfn_vSetModifiedPOList();
// End Shaitan => optimisation lists in the level
m_pri_pclInitialObjectTable = pclNewOT;
}
//******************************************************************************
void CPA_Actor::m_pub_fn_vConstructEnumDescriptorForObjectsTables()
{
if ( m_pub_fn_pclGetFamily() != NULL )
{
ERROR_ASSERT(m_pub_fn_pclGetEnumDescriptorForObjectsTables() != NULL);
//First adds the OT which has the Family's name...
short wIndex;
BOOL bFound = FALSE;
EditorObjectTable *pclCurrentOT;
POSITION pos = m_pub_fn_pclGetFamily()->m_oListOfObjectTables.GetHeadPosition();
while ( (pos != NULL) && (!bFound) )
{
pclCurrentOT = m_pub_fn_pclGetFamily()->m_oListOfObjectTables.GetNext(pos);
//Searches for Family name
CString csOTName = pclCurrentOT->GetName();
wIndex = csOTName.Find('.');
if ( wIndex != -1 )
csOTName = csOTName.Left(wIndex);
bFound = ( csOTName.CompareNoCase(m_pub_fn_pclGetFamily()->GetName()) == 0 );
}
if ( bFound )
m_pub_fn_pclGetEnumDescriptorForObjectsTables()->m_fn_pclAddElement(pclCurrentOT->GetName(), (long)pclCurrentOT->GetData());
//...then adds the other OT
pos = m_pub_fn_pclGetFamily()->m_oListOfObjectTables.GetHeadPosition();
while ( pos != NULL )
{
pclCurrentOT = m_pub_fn_pclGetFamily()->m_oListOfObjectTables.GetNext(pos);
//Searches for Family name
CString csOTName = pclCurrentOT->GetName();
wIndex = csOTName.Find('.');
if ( wIndex != -1 )
csOTName = csOTName.Left(wIndex);
if ( csOTName.CompareNoCase(m_pub_fn_pclGetFamily()->GetName()) != 0 )
m_pub_fn_pclGetEnumDescriptorForObjectsTables()->m_fn_pclAddElement(pclCurrentOT->GetName(), (long)pclCurrentOT->GetData());
}
//Add a reference for NULL Object Table
if ( m_pub_fn_pclGetEnumDescriptorForObjectsTables()->GetCount() == 0 )
m_pub_fn_pclGetEnumDescriptorForObjectsTables()->m_fn_pclAddElement("No Object Table", 0L);
}
}
//Action
//******************************************************************************
CPA_Action *CPA_Actor::m_pub_fn_pclGetCurrentAction()
{
return m_pri_pclCurrentAction;
}
//******************************************************************************
void CPA_Actor::m_pub_fn_vSetCurrentAction(CPA_Action *_pclNewAction)
{
m_pri_pclCurrentAction = _pclNewAction;
}
//******************************************************************************
CPA_Action *CPA_Actor::m_pub_fn_pclGetInitialAction()
{
return m_pri_pclInitialAction;
}
//******************************************************************************
void CPA_Actor::m_pub_fn_vSetInitialAction(CPA_Action *_pclNewAction)
{
// Shaitan => optimisation lists in the level
// set modification flag in the corresponding family
if (m_pri_pclInitialAction && (_pclNewAction != m_pri_pclInitialAction))
((CPA_Family *) _pclNewAction->GetOwner())->mfn_vSetModifiedStateList();
// End Shaitan => optimisation lists in the level
m_pri_pclInitialAction = _pclNewAction;
}
//State
//******************************************************************************
CPA_State *CPA_Actor::m_pub_fn_pclGetCurrentState()
{
return m_pri_pclCurrentState;
}
//******************************************************************************
void CPA_Actor::m_pub_fn_vSetCurrentState(CPA_State *_pclNewState)
{
m_pri_pclCurrentState = _pclNewState;
if ( ( m_fn_bIsAnInstance() )
&& ( _pclNewState != NULL )
&& ( !(g_pclInterface->GetInterface()->fn_bIsLoadingWorld()) )
)
{
tdxHandleToState hDefaultState = (tdxHandleToState)_pclNewState->GetData();
if ( ( hDefaultState != NULL ) && ( M_bEditorsActive() ) )
{
fn_v3dDataSetCurrentState(M_GetMSHandle(m_pub_fn_hGetMotorSuperObject(), 3dData), hDefaultState);
// PLA_fn_vInitNewState( m_pub_fn_hGetMotorSuperObject(),
// hDefaultState);
}
}
}
//******************************************************************************
CPA_State *CPA_Actor::m_pub_fn_pclGetInitialState()
{
return m_pri_pclInitialState;
}
//******************************************************************************
void CPA_Actor::m_pub_fn_vSetInitialState(CPA_State *_pclNewState,
BOOL _bMustNotifyLevel /*= FALSE*/)
{
m_pri_pclInitialState = _pclNewState;
//Notifies Level when initial state has been changed
if ( ( _bMustNotifyLevel )
&& ( m_fn_bIsAnInstance() )
&& ( !(g_pclInterface->GetInterface()->fn_bIsLoadingWorld()) )
)
g_pclInterface->m_clDocument.m_fn_vNotifyLevel(this);
}
//******************************************************************************
void CPA_Actor::m_pub_fn_vUpdateObjectTablesList(EditorObjectTable *pclOT /* NULL*/)
{
if ( pclOT != NULL )
{
CTL_Editor_EnumElement *pclCurrentElement;
POSITION pos = m_pub_fn_pclGetEnumDescriptorForObjectsTables()->GetHeadPosition();
while ( pos != NULL )
{
pclCurrentElement = m_pub_fn_pclGetEnumDescriptorForObjectsTables()->GetNext(pos);
if ( pclCurrentElement->m_pub_fn_csGetElementName() == pclOT->GetName() )
pclCurrentElement->m_pub_fn_vSetValue((long)pclOT->GetData());
}
}
}
//******************************************************************************
HIE_tdxHandleToSuperObject CPA_Actor::m_pub_fn_hGetMotorSuperObject()
{
ERROR_ASSERT( m_fn_bIsAnInstance() );
if ( m_pclSuperObject != NULL )
return (HIE_tdxHandleToSuperObject)m_pclSuperObject->GetData();
else
{
//Tries to get Motor Super Object from Motor data
MS_tdxHandleToStandardGame h_StdGame = ((struct tdstEngineObject_ *)GetData())->h_StandardGame;
HIE_tdxHandleToSuperObject hHandleToReturn = fn_h_StandardGameGetSuperObject(h_StdGame);
return hHandleToReturn;
}
}
//******************************************************************************
CPA_SuperObject *CPA_Actor::m_pub_fn_pclGetSuperObject()
{
return m_pclSuperObject;
}
//******************************************************************************
void CPA_Actor::m_pub_fn_vSetSuperObject(CPA_SuperObject *pclNewSO)
{
m_pclSuperObject = pclNewSO;
}
//******************************************************************************
CPA_Family *CPA_Actor::m_pub_fn_pclGetFamily()
{
return m_pri_pclFamily;
}
//******************************************************************************
void CPA_Actor::m_pub_fn_vSetFamily(CPA_Family *pclNewFamily)
{
if ( ( m_pri_pclFamily == NULL ) && ( pclNewFamily != NULL ) )
{
m_pri_pclFamily = pclNewFamily;
//For a Model, sets the Family as Model's owner
if ( !m_fn_bIsAnInstance() )
fn_bSetOwner((CPA_SaveObject *)pclNewFamily);
//For Object Tables edition
if ( pclNewFamily->fn_bIsAvailable() )
m_pub_fn_vConstructEnumDescriptorForObjectsTables();
//Updates section name
SetReferencedSectionName(m_pri_fn_csComputeReferencedSectionName());
if ( m_pclSectionSubObject != NULL )
m_pclSectionSubObject->SetReferencedSectionName(m_pri_fn_csComputeReferencedFileName());
}
}
/*//******************************************************************************
//Returns the name of a Designer Variable, knowing its ID
// ... For IAD ...
CString CPA_Actor::m_pub_fn_csGetDsgVarNameFromID(long _lID)
{
//-----------------IR-------------------------
ERROR_ASSERT( m_fn_bIsAnInstance() );
return m_fn_pclGetModel()->m_fn_pclGetEditorModel()->m_pclBrain->m_fn_csGetDsgVarName(_lID);
#else
return "Error in OAc (-->YB)";
//--------------------------------------------
}
//******************************************************************************
//Displays the IA editor with the good behaviour
// ... For IAD ...
void CPA_Actor::m_pub_fn_vShowBehaviour(struct tdstNodeInterpret_ *_pstNode)
{
//-----------------IR-------------------------
ERROR_ASSERT( m_fn_bIsAnInstance() );
m_fn_pclGetModel()->m_fn_pclGetEditorModel()->m_pclBrain->m_fn_vShowBehaviour(_pstNode);
//--------------------------------------------
}*/
//******************************************************************************
CPA_tdoNameList *CPA_Actor::m_pub_fn_pclGetNameList(CString _csName)
{
return m_fn_pclGetEditorActor()->m_fn_p_oGetNameList(_csName);
}
//******************************************************************************
BOOL CPA_Actor::m_pub_fn_bCanBeInstantiated()
{
ERROR_ASSERT( m_fn_bIsAModel() );
return ( TRUE/*!m_fn_bIsTheWorldActor()*/ );
}
//******************************************************************************
BOOL CPA_Actor::m_pub_fn_bIsCommon()
{
ERROR_ASSERT( m_fn_bIsAnInstance() );
return m_pri_bIsCommon;
}
//******************************************************************************
void CPA_Actor::m_pub_fn_vSetCommon(BOOL _bCommon /*= TRUE*/,
BOOL _bIsLoading /*= FALSE*/)
{
ERROR_ASSERT( m_fn_bIsAnInstance() );
if ( m_pri_bIsCommon != _bCommon )
{
//Notifies previous Section
if ( !_bIsLoading )
fn_vNotifyUnSave();
//Changes section name
m_pri_bIsCommon = _bCommon;
if ( m_pclSectionSubObject != NULL )
m_pclSectionSubObject->SetReferencedSectionName(m_pri_fn_csComputeReferencedFileName());
fn_vUpdateSectionName();
//Notifies new Section
if ( !_bIsLoading )
fn_vNotifySave();
if ( !_bIsLoading )
{
g_pclInterface->m_clDocument.m_fn_vNotifyLevel(this, TRUE);
//An actor which is not in Common cannot be in Fix
if ( !m_pri_bIsCommon )
{
if ( m_pub_fn_bIsInFix() )
m_pub_fn_vSetInFix(FALSE);
}
}
}
}
//
//******************************************************************************
BOOL CPA_Actor::m_pub_fn_bIsInFix()
{
ERROR_ASSERT( m_fn_bIsAnInstance() );
return m_pri_bIsInFix;
}
//******************************************************************************
void CPA_Actor::m_pub_fn_vSetInFix(BOOL _bIsInFix /*= TRUE*/,
BOOL _bIsLoading /*= FALSE*/)
{
ERROR_ASSERT( m_fn_bIsAnInstance() );
if ( m_pri_bIsInFix != _bIsInFix )
{
//Changes and notifies new section
m_pri_bIsInFix = _bIsInFix;
//Notifies FIX file
if ( !_bIsLoading )
g_pclInterface->m_clDocument.m_fn_vNotifyFixFile();
}
}
//******************************************************************************
//Returns the number of Instances of a Model, and -1 for an Instance
long CPA_Actor::m_pub_fn_lGetNumberOfInstances()
{
long lValueToReturn = -1;
if ( m_fn_bIsAModel() )
lValueToReturn = m_fn_pclGetEditorModel()->m_clInstancesList.GetCount();
return lValueToReturn;
}
//******************************************************************************
//Checks Model before Instanciation
BOOL CPA_Actor::m_pub_fn_bCheckModelForInstanciation()
{
BOOL bReturn = TRUE;
if ( m_fn_bIsAModel() )
{
if ( !m_fn_bIsAGenDoor() )
{
CString csMessage;
CString csAction = "Instanciation of Model '";
csAction += GetName() + "'\n";
//Checks the Initial Action of the Model
if ( m_pub_fn_pclGetInitialAction() == NULL )
{
csMessage = csAction + "This Model has no Initial Action !\n(Check this in Group_1 >> 3dData MS)\nDo you want to continue anyway ?";
EdActors_QuestionDialog QuestionDial(&g_oBaseFrame, csMessage);
bReturn = ( QuestionDial.DoModal() == IDYES );
}
//Checks the Initial state of the Model
else
{
if ( m_pub_fn_pclGetInitialAction()->m_p_oDefaultState == NULL )
{
csMessage = csAction + "This Model has no Initial State !\n(Check this in Group_1 >> 3dData MS)\nDo you want to continue anyway ?";
EdActors_QuestionDialog QuestionDial(&g_oBaseFrame, csMessage);
bReturn = ( QuestionDial.DoModal() == IDYES );
}
}
//Checks the Initial Objects Table of the Model
if ( bReturn )
{
if ( m_pub_fn_pclGetInitialObjectTable() == NULL )
{
csMessage = csAction + "This Model has no Initial Object Table !\n(Check this in Group_1 >> 3dData MS)\nDo you want to continue anyway ?";
EdActors_QuestionDialog QuestionDial(&g_oBaseFrame, csMessage);
bReturn = ( QuestionDial.DoModal() == IDYES );
}
}
}
}
else
bReturn = FALSE;
return bReturn;
}
//******************************************************************************
//Indicates whether this Actor must be saved or not
BOOL CPA_Actor::m_pub_fn_bHasBeenModified()
{
return m_pri_bHasBeenModified;
}
//******************************************************************************
//To re-init the Actor as if it was in its intial state
void CPA_Actor::m_pub_fn_vReInitActor()
{
}
//******************************************************************************
CString CPA_Actor::fn_csComputeReferencedSectionName(const CString csNewName)
{
return m_pri_fn_csComputeReferencedSectionName(csNewName);
}
//******************************************************************************
CString CPA_Actor::m_pri_fn_csComputeReferencedSectionName(CString csName /*= ""*/,
CPA_Family *pclFamily /*= NULL*/)
{
CString csUsedName = ( csName.IsEmpty() ) ? GetName() : csName;
CPA_Family *pclUsedFamily = ( pclFamily == NULL ) ? m_pub_fn_pclGetFamily() : pclFamily;
CString csFamilyName = ( pclUsedFamily == NULL ) ? "No_Family" : pclUsedFamily->GetName();
CString csFileName;
if ( m_fn_bIsAnInstance() )
csFileName = csUsedName + g_csInstanceExtension;
else
csFileName = csUsedName + g_csModelExtension;
CString csTrueFileName;
if ( m_fn_bIsAnInstance() )
{
if ( m_pub_fn_bIsCommon() )
csTrueFileName = CString("_Common\\Families\\")
+ csFamilyName
+ s_g_c_csAntiSlash
+ m_fn_pclGetModel()->GetName()
+ s_g_c_csAntiSlash + C_ScriptCharacterDirectory
+ s_g_c_csAntiSlash + csFileName;
else
csTrueFileName = g_pclInterface->m_clDocument.m_fn_csGetLevelName()
+ s_g_c_csAntiSlash
+ CString("Families\\")
+ csFamilyName
+ s_g_c_csAntiSlash
+ m_fn_pclGetModel()->GetName()
+ s_g_c_csAntiSlash + C_ScriptCharacterDirectory
+ s_g_c_csAntiSlash + csFileName;
}
else
csTrueFileName = CString("_Common\\Families\\")
+ csFamilyName
+ s_g_c_csAntiSlash
+ csUsedName
+ s_g_c_csAntiSlash
+ csFileName;
CString csAction;
if ( m_fn_bIsAnInstance() )
csAction = C_SectionOneCharacters;
else
csAction = g_c_csActorScriptModelSectionName;
CString csReferencedSectioName = csTrueFileName + '^' + csAction + ':' + csUsedName;
return csReferencedSectioName;
}
//******************************************************************************
CString CPA_Actor::m_pri_fn_csComputeCompleteSectionName(CString csName /*= ""*/,
CPA_Family *pclFamily /*= NULL*/)
{
CString csUsedName = ( csName.IsEmpty() ) ? GetName() : csName;
CPA_Family *pclUsedFamily = ( pclFamily == NULL ) ? m_pub_fn_pclGetFamily() : pclFamily;
CString csFamilyName = ( pclUsedFamily == NULL ) ? "No_Family" : pclUsedFamily->GetName();
CString csFileName;
if ( m_fn_bIsAnInstance() )
csFileName = csUsedName + g_csInstanceExtension;
else
csFileName = csUsedName + g_csModelExtension;
CString csTrueFileName;
if ( m_fn_bIsAnInstance() )
csTrueFileName = g_pclInterface->m_clDocument.m_pub_csLevelDataPath
+ m_pri_fn_csComputeReferencedSectionName(csUsedName, pclUsedFamily);
else
csTrueFileName = g_pclInterface->m_clDocument.m_pub_csCommonDataPath
+ m_pri_fn_csComputeReferencedSectionName(csUsedName, pclUsedFamily);
CString csAction;
if ( m_fn_bIsAnInstance() )
csAction = C_SectionOneCharacters;
else
csAction = g_c_csActorScriptModelSectionName;
CString csCompleteSectioName = csTrueFileName + '^' + csAction + ':' + csUsedName;
return csCompleteSectioName;
}
//******************************************************************************
CString CPA_Actor::m_pri_fn_csComputeCompleteFileName(void)
{
CString csFileName = m_pri_fn_csComputeCompleteSectionName();
//Extracts File Name
short wIndex = csFileName.Find('^');
if ( wIndex != -1 )
csFileName = csFileName.Left(wIndex);
return csFileName;
}
//******************************************************************************
CString CPA_Actor::m_pri_fn_csComputeReferencedFileName(void)
{
CString csFileName = m_pri_fn_csComputeReferencedSectionName();
//Extracts File Name
short wIndex = csFileName.Find('^');
if ( wIndex != -1 )
csFileName = csFileName.Left(wIndex);
return csFileName;
}
//For Save
//******************************************************************************
void CPA_Actor::fn_vNotifySave(void)
{
if ( m_pclSectionSubObject != NULL )
{
m_pclSectionSubObject->fn_vWriteSection();
if ( !m_pri_bHasBeenModified )
{
m_pri_bHasBeenModified = TRUE;
g_pclInterface->m_clDocument.m_pclActorsView->m_pub_fn_vUpdateActorNameForModif(this);
}
}
}
//******************************************************************************
void CPA_Actor::fn_vNotifyUnSave(void)
{
if ( m_pclSectionSubObject != NULL )
{
m_pclSectionSubObject->fn_vDeleteSection();
if ( m_pri_bHasBeenModified )
{
m_pri_bHasBeenModified = FALSE;
g_pclInterface->m_clDocument.m_pclActorsView->m_pub_fn_vUpdateActorNameForModif(this);
}
}
}
//******************************************************************************
void CPA_Actor::fn_vNotifyRestore(void)
{
if ( m_pclSectionSubObject != NULL )
{
m_pclSectionSubObject->fn_vRestoreSection();
if ( !m_pri_bHasBeenModified )
{
m_pri_bHasBeenModified = TRUE;
g_pclInterface->m_clDocument.m_pclActorsView->m_pub_fn_vUpdateActorNameForModif(this);
}
}
}
//******************************************************************************
void CPA_Actor::fn_vNotifyRename(void)
{
if ( m_pclSectionSubObject != NULL )
{
m_pclSectionSubObject->fn_vRenameSection(m_pri_fn_csComputeReferencedFileName());
if ( !m_pri_bHasBeenModified )
{
m_pri_bHasBeenModified = TRUE;
g_pclInterface->m_clDocument.m_pclActorsView->m_pub_fn_vUpdateActorNameForModif(this);
}
}
//Update of main section name
SetReferencedSectionName(m_pri_fn_csComputeReferencedSectionName());
}
//******************************************************************************
void CPA_Actor::s_m_fn_vCallBackSaveActor(SCR_tdst_File_Description *_p_stFile,
char *_p_szSectionName,
void *_p_vData,
SCR_tde_Ntfy_Action _eAction)
{
CPA_Actor *p_clActor = (CPA_Actor *)_p_vData ;
switch ( _eAction )
{
case SCR_EA_Ntfy_AddSection:
case SCR_EA_Ntfy_AddOrModifySection:
case SCR_EA_Ntfy_AddOrRebuildSection:
case SCR_EA_Ntfy_RebuildSection:
case SCR_EA_Ntfy_ModifySection:
if ( p_clActor == NULL )
{
//Saves Motor Level
g_pclInterface->m_clDocument.m_fn_vSaveMotorLevel(_p_stFile, _p_szSectionName, _eAction);
}
else
{
//Saves Model
if ( p_clActor->m_fn_bIsAModel() )
{
//...
p_clActor->m_fn_pclGetEditorActor()->m_fn_vSaveActor(_p_stFile);
}
else
//For Instances, saves only motor Actor (in Motor File)
{
//Calls motor function
g_pclInterface->m_clDocument.m_fn_vSaveMotorInstance(_p_stFile, p_clActor);
}
p_clActor->m_pclSectionSubObject->fn_vSectionSaved();
}
break ;
case SCR_EA_Ntfy_DeleteIfExists:
case SCR_EA_Ntfy_DeleteSection:
if ( p_clActor != NULL )
p_clActor->m_pclSectionSubObject->fn_vSectionDeleted();
}
if ( p_clActor != NULL )
{
p_clActor->m_pri_bHasBeenModified = FALSE;
g_pclInterface->m_clDocument.m_pclActorsView->m_pub_fn_vUpdateActorNameForModif(p_clActor);
}
}
//******************************************************************************
//Virtual functions
//******************************************************************************
long CPA_Actor::GetDataType()
{
return HIE_C_ulActor;
}
//******************************************************************************
void *CPA_Actor::GetData()
{
return GetStruct();
}
// Shaitan Correction {
//******************************************************************************
void CPA_Actor::fn_vSetExistingSectionSubObject (BOOL bExist)
{
m_pclSectionSubObject->SetExistingSection(bExist);
}
//End Shaitan Correction }
//BEGIN ROMTEAM Cristi Petrescu 98-05-
/*
CPA_EdIR_DebugInfo *CPA_Actor::m_fn_pGetDebugInfo (tdstNodeInterpret *_pstNode)
{
EdActors_EditorActorModel *pModel = m_fn_pclGetEditorModel ();
ASSERT (pModel);
CPA_EdIR_Brain *pBrain = pModel -> m_pclBrain;
ASSERT (pBrain);
return pBrain -> m_clDebugInfoList . m_fn_pclGetDebugInfo (_pstNode);
}*/
//******************************************************************************
void CPA_Actor::m_fn_vMustBuildDebugInfo (BOOL bBuild)
{
CPA_DLLBase *pclIADLL=(CPA_DLLBase*)(g_pclInterface->GetMainWorld()->GetToolDLLWithName(C_szDLLAIEditorName));
if(pclIADLL!=NULL)
{
tdstActorsIACom stCom;
stCom.pvThis = this;
stCom.pvData = & bBuild;
pclIADLL -> OnQueryAction (g_pclInterface, C_uiAI_MustBuildDebugInfo, (long) (& stCom));
}
}
//******************************************************************************
CString CPA_Actor::m_fn_csGetBehaviourName (tdstNodeInterpret *_pstNode)
{
CPA_DLLBase *pclIADLL=(CPA_DLLBase*)(g_pclInterface->GetMainWorld()->GetToolDLLWithName(C_szDLLAIEditorName));
if(pclIADLL!=NULL)
{
tdstActorsIACom stCom;
stCom.pvThis = this;
stCom.pvData = _pstNode;
pclIADLL -> OnQueryAction (g_pclInterface, C_uiAI_GetBehaviourName, (long) (& stCom));
return stCom . csData;
}
return _T("");
}
//******************************************************************************
void CPA_Actor::m_fn_vClearExecutedNodes (CString csBehaviourName)
{
CPA_DLLBase *pclIADLL=(CPA_DLLBase*)(g_pclInterface->GetMainWorld()->GetToolDLLWithName(C_szDLLAIEditorName));
if(pclIADLL!=NULL)
{
tdstActorsIACom stCom;
stCom.pvThis = this;
stCom.pvData = & csBehaviourName;
pclIADLL -> OnQueryAction (g_pclInterface, C_uiAI_ClearExecutedNodes, (long) (& stCom));
}
}
//******************************************************************************
void CPA_Actor::m_fn_vSetOneExecutedNode (tdstNodeInterpret *_pstNode)
{
CPA_DLLBase *pclIADLL=(CPA_DLLBase*)(g_pclInterface->GetMainWorld()->GetToolDLLWithName(C_szDLLAIEditorName));
if(pclIADLL!=NULL)
{
tdstActorsIACom stCom;
stCom.pvThis = this;
stCom.pvData = _pstNode;
pclIADLL -> OnQueryAction (g_pclInterface, C_uiAI_SetOneExecutedNode, (long) (& stCom));
}
}
//******************************************************************************
void CPA_Actor::m_fn_vShowBehaviour (tdstNodeInterpret *_pstNode)
{
CPA_DLLBase *pclIADLL=(CPA_DLLBase*)(g_pclInterface->GetMainWorld()->GetToolDLLWithName(C_szDLLAIEditorName));
if(pclIADLL!=NULL)
{
tdstActorsIACom stCom;
stCom.pvThis = this;
stCom.pvData = _pstNode;
pclIADLL -> OnQueryAction (g_pclInterface, C_uiAI_ShowBehaviourByEngineNode, (long) (& stCom));
}
}
//******************************************************************************
void CPA_Actor::m_fn_vShowBehaviour (CString csBehaviourName)
{
CPA_DLLBase *pclIADLL=(CPA_DLLBase*)(g_pclInterface->GetMainWorld()->GetToolDLLWithName(C_szDLLAIEditorName));
if(pclIADLL!=NULL)
{
tdstActorsIACom stCom;
stCom.pvThis = this;
stCom.pvData = & csBehaviourName;
pclIADLL -> OnQueryAction (g_pclInterface, C_uiAI_ShowBehaviourByName, (long) (& stCom));
}
}
//END ROMTEAM Cristi Petrescu 98-05-
//******************************************************************************
void CPA_Actor::m_fn_vSetModelDefaultValues (void)
{
EdActors_EditorActorModel * pclEditorModel;
CTL_Editor_BooleanData * pclBooleanData;
CTL_Editor_IntegerData * pclIntegerData;
// check if it is a model
if (!m_fn_bIsAModel())
return;
pclEditorModel = m_fn_pclGetEditorModel();
// set default values for hit points
pclIntegerData = (CTL_Editor_IntegerData *) pclEditorModel->m_fn_p_oFindDataByName("Initial_Hit_Points");
pclIntegerData->mfn_lSetCurrentValue (3);
pclIntegerData->m_fn_vUpdateMotorData(CTL_UPDATE_REASON__DATA_MODIFIED_BY_USER, 0);
pclIntegerData = (CTL_Editor_IntegerData *) pclEditorModel->m_fn_p_oFindDataByName("Initial_Hit_Points_Max");
pclIntegerData->mfn_lSetCurrentValue (3);
pclIntegerData->m_fn_vUpdateMotorData(CTL_UPDATE_REASON__DATA_MODIFIED_BY_USER, 0);
pclIntegerData = (CTL_Editor_IntegerData *) pclEditorModel->m_fn_p_oFindDataByName("Hit_Points_Max_Max");
pclIntegerData->mfn_lSetCurrentValue (3);
pclIntegerData->m_fn_vUpdateMotorData(CTL_UPDATE_REASON__DATA_MODIFIED_BY_USER, 0);
// set default values for transparency zone
pclIntegerData = (CTL_Editor_IntegerData *) pclEditorModel->m_fn_p_oFindDataByName("Transparency_Zone_Min");
pclIntegerData->mfn_lSetCurrentValue (20);
pclIntegerData->m_fn_vUpdateMotorData(CTL_UPDATE_REASON__DATA_MODIFIED_BY_USER, 0);
pclIntegerData = (CTL_Editor_IntegerData *) pclEditorModel->m_fn_p_oFindDataByName("Transparency_Zone_Max");
pclIntegerData->mfn_lSetCurrentValue (30);
pclIntegerData->m_fn_vUpdateMotorData(CTL_UPDATE_REASON__DATA_MODIFIED_BY_USER, 0);
// set default values for custom bits
pclBooleanData = (CTL_Editor_BooleanData *) pclEditorModel->m_fn_p_oFindDataByName("Initial_CustomBit_1");
pclBooleanData->mfn_bSetCurrentState (TRUE);
pclBooleanData->m_fn_vUpdateMotorData(CTL_UPDATE_REASON__DATA_MODIFIED_BY_USER, 0);
pclBooleanData = (CTL_Editor_BooleanData *) pclEditorModel->m_fn_p_oFindDataByName("Initial_CustomBit_13");
pclBooleanData->mfn_bSetCurrentState (TRUE);
pclBooleanData->m_fn_vUpdateMotorData(CTL_UPDATE_REASON__DATA_MODIFIED_BY_USER, 0);
pclBooleanData = (CTL_Editor_BooleanData *) pclEditorModel->m_fn_p_oFindDataByName("Initial_CustomBit_22");
pclBooleanData->mfn_bSetCurrentState (TRUE);
pclBooleanData->m_fn_vUpdateMotorData(CTL_UPDATE_REASON__DATA_MODIFIED_BY_USER, 0);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Method : mfn_vSaveToINI
// Date : 98-06
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Description :
// Author : Stegaru Cristian - CPA
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Modification :
// Date :
// By :
//////////////////////////////////////////////////////////////////////////////////////////////////////
void CPA_Actor::mfn_vSaveToINI ()
{
if (!m_fn_bIsAModel())
return;
CString csKeyValue = m_bHideVariable? "TRUE":"FALSE";
CString csINIFileName = M_GetMainApp()->m_csEditorDataPath + m_csINIFileName;
WritePrivateProfileString (m_csHideVariableSection, GetName (), csKeyValue, csINIFileName);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Method : mfn_vLoadFromINI
// Date : 98-06
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Description :
// Author : Stegaru Cristian - CPA
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Modification :
// Date :
// By :
//////////////////////////////////////////////////////////////////////////////////////////////////////
void CPA_Actor::mfn_vLoadFromINI ()
{
if (!m_fn_bIsAModel())
return;
char szKeyValue [10];
CString csINIFileName = M_GetMainApp()->m_csEditorDataPath + m_csINIFileName;
GetPrivateProfileString (m_csHideVariableSection, GetName (), "FALSE", szKeyValue, sizeof (szKeyValue), csINIFileName);
if (szKeyValue == CString ("TRUE"))
m_bHideVariable = TRUE;
else
m_bHideVariable = FALSE;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Method : mfn_bIsHideVarChecked
// Date : 98-06
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Description :
// Author : Stegaru Cristian - CPA
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Modification :
// Date :
// By :
//////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL CPA_Actor::mfn_bIsHideVarChecked ()
{
if (m_fn_bIsAModel())
return m_bHideVariable;
else
{
CPA_Actor *pModel = m_fn_pclGetModel();
if (pModel)
return pModel->mfn_bIsHideVarChecked ();
else
return FALSE;
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Method : mfn_vCheckHideVar
// Date : 98-06
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Description :
// Author : Stegaru Cristian - CPA
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Modification :
// Date :
// By :
//////////////////////////////////////////////////////////////////////////////////////////////////////
void CPA_Actor::mfn_vCheckHideVar (BOOL bHideVar)
{
if (m_fn_bIsAModel())
{
m_bHideVariable = bHideVar;
mfn_vSaveToINI ();
}
else
{
CPA_Actor *pModel = m_fn_pclGetModel();
if (pModel)
pModel->mfn_vCheckHideVar (bHideVar);
else
TRACE0 ("This actor doesn't have a model!\n");
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Method : fn_eCheckValidity
// Date : 98-06
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Description :
// Author : Stegaru Cristian - CPA
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Modification :
// Date :
// By :
//////////////////////////////////////////////////////////////////////////////////////////////////////
tdeMissingCriteria CPA_Actor::fn_eCheckValidity (const CString csNewName)
{
tdeMissingCriteria eResult = CPA_SaveObject::fn_eCheckValidity (csNewName);
if (eResult != E_mc_None)
return eResult;
// test here if the name is used for an unloaded always
//CPA2 Stegaru Cristian 98-06
//check unicity against the UnloadedAlwyas object's list
CPA_BaseObjectList * p_oBaseObjectList = GetEditor ()->GetBaseObjectList(g_c_csUnloadedAlwaysType);
if (p_oBaseObjectList)
{
CPA_Interface *pInterface = GetEditor()->GetInterface();
long lNbObjects = p_oBaseObjectList->fn_lFindObjects(NULL, csNewName, g_c_csUnloadedAlwaysType);
if (lNbObjects > 0) //name conflict
return E_mc_CustomValidity;
}
// name is valid
return E_mc_None;
}
//SHAITAN
void CPA_Actor::mfn_vUpdateAIModel (AI_tdstAIModel *p_stAIModel)
{
CAR_EDIT_TDSTACTOR *p_tdstActor = (CAR_EDIT_TDSTACTOR *) GetStruct();
p_tdstActor->h_Brain->p_stMind->p_stAIModel = p_stAIModel;
EdActors_ActorMiniStructure *pclModelMS = m_fn_pclGetEditorActor()->m_clListOfAMSLists.m_fn_pclGetAMSFromName("Brain");
POSITION pos = pclModelMS->m_pclDataList->GetHeadPosition();
(pclModelMS->m_pclDataList->GetNext(pos))->m_fn_vSetMotorDataPtr((void *)(&(p_tdstActor->h_Brain->p_stMind->p_stAIModel->CFast_bIsC)));
(pclModelMS->m_pclDataList->GetNext(pos))->m_fn_vSetMotorDataPtr((void *)(&(p_tdstActor->h_Brain->p_stMind->p_stAIModel->CFast_lFunction)));
}
void CPA_Actor::mfn_vUpdateAllInstancesForFastC (void)
{
if (!m_fn_bIsAModel())
return;
EdActors_EditorActorModel * pclEditorModel = m_fn_pclGetEditorModel();
// update model editor values
CTL_Editor_Data * pclData = pclEditorModel->m_fn_p_oFindDataByName("FastC_Run");
pclData->m_fn_vGetMotorData();
pclData = pclEditorModel->m_fn_p_oFindDataByName("FastC_Index");
pclData->m_fn_vGetMotorData();
// update all instances editor values
EdActors_EditorActorInstance *pclCurrentInstance;
POSITION InstancesPos = pclEditorModel->m_clInstancesList.GetHeadPosition();
while ( InstancesPos != NULL )
{
pclCurrentInstance = pclEditorModel->m_clInstancesList.GetNext(InstancesPos);
pclData = pclCurrentInstance->m_fn_p_oFindDataByName("FastC_Run");
pclData->m_fn_vGetMotorData();
pclData = pclCurrentInstance->m_fn_p_oFindDataByName("FastC_Index");
pclData->m_fn_vGetMotorData();
}
}
//SHAITAN
//******************************************************************************
//MakeAlways
//******************************************************************************
CPA_MakeAlways::CPA_MakeAlways (EdActors_MyDocument *pDocument, CPA_List<CPA_SuperObject> *pSOActors, BOOL bMakeAlways)
: CPA_Modif (0, "Make Always", FALSE)
{
CPA_SuperObject *pSupObj;
CPA_Actor *pActor;
POSITION pos;
m_pDocument = pDocument;
m_bMakeAlways = bMakeAlways;
// CPA2 ASilvescu 98-04-24
m_bIsCommon = FALSE;
// End CPA2 ASilvescu 98-04-24
pos = pSOActors->GetHeadPosition();
while (pos)
{
pSupObj = pSOActors->GetNext(pos);
pActor = (CPA_Actor *)pSupObj->GetObject();
m_lstActors.AddTail(pActor);
}
}
CPA_MakeAlways::CPA_MakeAlways (EdActors_MyDocument *pDocument, CPA_Actor *pActor, BOOL bMakeAlways)
: CPA_Modif (0, "Make Always", FALSE)
{
m_pDocument = pDocument;
m_bMakeAlways = bMakeAlways;
m_lstActors.AddTail(pActor);
}
CPA_MakeAlways::~CPA_MakeAlways (void)
{
}
BOOL CPA_MakeAlways::Do (void)
{
CPA_Actor *pActor;
POSITION pos = m_lstActors.GetHeadPosition();
while (pos)
{
pActor = m_lstActors.GetNext(pos);
//Notifies Level
m_pDocument->m_fn_vNotifyLevel(pActor, FALSE);
// make always
pActor->m_fn_vMakeAlways(m_bMakeAlways);
// CPA2 ASilvescu 98-04-24
m_bIsCommon = pActor->m_pub_fn_bIsCommon();
pActor->m_pub_fn_vSetCommon(m_bMakeAlways);
// End CPA2 ASilvescu 98-04-24
//Notifies Level
m_pDocument->m_fn_vNotifyLevel(pActor, TRUE);
// update dialog
m_pDocument->m_pclDialogList->fn_vUpdateSelection(E_lrm_ReinitList);
}
return TRUE;
}
BOOL CPA_MakeAlways::Undo (void)
{
CPA_Actor *pActor;
POSITION pos = m_lstActors.GetHeadPosition();
while (pos)
{
pActor = m_lstActors.GetNext(pos);
//Notifies Level
m_pDocument->m_fn_vNotifyLevel(pActor, FALSE);
// make always
pActor->m_fn_vMakeAlways(!m_bMakeAlways);
// CPA2 ASilvescu 98-04-24
pActor->m_pub_fn_vSetCommon(m_bIsCommon);
// End CPA2 ASilvescu 98-04-24
//Notifies Level
m_pDocument->m_fn_vNotifyLevel(pActor, TRUE);
// update dialog
m_pDocument->m_pclDialogList->fn_vUpdateSelection(E_lrm_ReinitList);
}
return TRUE;
}