2248 lines
70 KiB
C++
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;
|
|
}
|
|
|
|
|