reman3/Rayman_X/cpa/tempgrp/TID/Src/_IADItrf.cpp

381 lines
11 KiB
C++

//#################################################################################
//
// BASE CLASS OF YOUR DLL interface
//
//#################################################################################
#include "StdAfx.h"
#include "ACP_Base.h"
#include "ITF.h"
#include "IncMEC.h"
#define D_State_Define
#include "IncGAM.h"
#undef D_State_Define
#include "GLI.h"
#include "SCR.h"
#include "_IADItrf.hpp"
#include "IADVwMn.hpp"
#include "IADStrg.hpp"
#include "IAD_Res.h"
//BEGIN ROMTEAM Cristi Petrescu 98-05-
#include "IADvwrst.hpp"
#include "IADVrVw.hpp"
//END ROMTEAM Cristi Petrescu 98-05-
// BEGIN ROMTEAM Cristi Petrescu 98-06-
#include "IADglob.hpp"
#include "debugcom.h"
// END ROMTEAM Cristi Petrescu 98-06-
//External Modules
#include "ErO.h"
//End of External Modules
// infos
static CString g_csTIDName = "IA_Debugger";
static CString g_csTIDAuthor = "Y. Babitch";
static CString g_csTIDVersion = "V 2.0.1 18/03/98";
static CString g_csTIDFrenchHelpFile = "";
static CString g_csTIDEnglishHelpFile = "";
BOOL g_bTipFirstTime = TRUE;
IAD_Interface *g_pclInterface;
#define C_IAD_uiOpenID 51
#define C_IAD_uiCloseID 52
#define C_IAD_PopupID_Exit_Editor 61
#define C_IAD_PopupID_Setup 71
// the DLL global definition
tdstDLLIdentity g_stIADDLLIdentity;
//--------------------------------------------------------------------------------
// CONSTRUCTOR.
// You must put here all your DLL interface definitions.
//--------------------------------------------------------------------------------
IAD_Interface::IAD_Interface(void)
{
// ************************** private internal
m_p_stDLLIdentity = &g_stIADDLLIdentity;
// Does your DLL can output in main game view ?
m_stBaseDLLDefinition.bCanOutputIn3DView = FALSE;
// Does your DLL can be refresh by engine ?
m_stBaseDLLDefinition.bCanBeRefreshedByEngine = FALSE;
// Specific Init.
m_pclIADMainFrame = NULL;
m_csEditorVersion = "1.1.0 [" + CString(__DATE__) + "]";
SetEditorInfo(g_csTIDName, g_csTIDAuthor, g_csTIDVersion, g_csTIDFrenchHelpFile, g_csTIDEnglishHelpFile);
//For errors
ERROR_g_fn_vAddAModuleDescriptor( g_c_csIADebuggerModuleNameForErrors,
m_csEditorVersion,
"Yves BABITCH",
"01 48 18 53 74 (Montreuil)",
"ybabitch@ubisoft.fr",
"Daniel PALIX",
"04 50 51 26 63 (Annecy)",
"dpalix@ubisoft.fr",
"David REIZER",
"01 48 18 53 74 (Montreuil)",
"dreizer@ubisoft.fr"
);
SetCurrent(FALSE);
}
//**************************************************************************************
void IAD_Interface::fn_vJustAfterRegistered(void)
{
}
//**************************************************************************************
void IAD_Interface::fn_vConstruct()
{
//Windows constructions
//Creates the main frame
if ( m_pclIADMainFrame == NULL )
{
m_pclIADMainFrame = new IAD_MainFrame;
m_pclIADMainFrame->CreateBase("",
1,
2,
GetInterface()->GetMainWorld() );
m_pclIADMainFrame->mfn_vEnableCaption(FALSE);
m_pclIADMainFrame->m_iInitWidth = 400;
m_pclIADMainFrame->m_bKeepPos = TRUE;
m_pclIADMainFrame->m_stWinRight.cLinkSame = FRM_C_MoveLeft;
}
}
//**************************************************************************************
void IAD_Interface::fn_vLevelChanges()
{
}
//**************************************************************************************
tdePermission IAD_Interface::fn_eAcceptNewEditor(CPA_EditorBase *pNewEditor)
{
return C_Allow;
}
//**************************************************************************************
BOOL IAD_Interface::fn_bCanActivateEditor(CPA_List<CPA_BaseObject> *pParams)
{
return TRUE;
}
//**************************************************************************************
void IAD_Interface::fn_vOnActivateEditor(CPA_List<CPA_BaseObject> *pParams,
BOOL bBackActivated)
{
m_fn_vShowEditor();
}
//**************************************************************************************
BOOL IAD_Interface::fn_bCanCloseEditor(void)
{
return TRUE;
}
//**************************************************************************************
void IAD_Interface::fn_vOnCloseEditor(void)
{
}
//**************************************************************************************
void IAD_Interface::fn_vBeforeEngine(void)
{
//Re-inits the Trace of Actors
m_clDocument.m_pub_fn_vReInitEditorTraceForActors();
m_fn_vHideEditor();
}
//**************************************************************************************
void IAD_Interface::fn_vBeforeEditor(void)
{
if ( fn_bIsCurrentEditor() )
{
m_fn_vShowEditor();
// BEGIN ROMTEAM Cristi Petrescu 98-08-
// hack for bug-fixing
m_clDocument.m_pclControlView -> m_fn_vDisplayActorsList();
// END ROMTEAM Cristi Petrescu 98-08-
// BEGIN ROMTEAM Cristi Petrescu 98-08-
// do we really need this here?
// do it before the engine if you like...
// as you do.
//m_clDocument.m_pub_fn_vFreeEditorTraceForEditedActor();
// END ROMTEAM Cristi Petrescu 98-08-
}
}
//**************************************************************************************
void IAD_Interface::fn_vHasLostFocus(void)
{
}
//**************************************************************************************
BOOL IAD_Interface::fn_bHasGainedFocus(void)
{
m_clDocument.m_pclControlView->m_pub_fn_vBuildActorsList();
m_clDocument.m_pub_fn_vFreeEditorTraceForEditedActor();
// display Tip of the Day
GetInterface()->fn_vDisplayTipOfDay("AI Debugger", "TID", g_bTipFirstTime);
g_bTipFirstTime = FALSE;
return TRUE;
}
//**************************************************************************************
BOOL IAD_Interface::fn_bDefineSubMenu(EDT_SubMenu *_p_oEDTSubMenu)
{
if ( _p_oEDTSubMenu->GetSubMenuType() == C_SubMenuTool )
{
if ( fn_bIsCurrentEditor() )
_p_oEDTSubMenu->AddAnEntry(this, "IA Debugger", C_IAD_uiCloseID, TRUE);
else
_p_oEDTSubMenu->AddAnEntry(this, "IA Debugger", C_IAD_uiOpenID, FALSE);
}
else if ( _p_oEDTSubMenu->GetSubMenuType() == C_SubMenuPreference )
{
if ( fn_bIsCurrentEditor() )
_p_oEDTSubMenu->AddAnEntry(this, "Internal Setup (IA Debugger)", C_IAD_PopupID_Setup, FALSE);
}
return TRUE;
}
//**************************************************************************************
void IAD_Interface::_OnSubMenuCommand(EDT_SubMenu *_p_oEDTSubMenu,
UINT uiMsgID)
{
switch (uiMsgID)
{
case C_IAD_uiOpenID:
if ( !fn_bIsCurrentEditor() )
GetMainWorld()->fn_bActivateEditor(this, NULL);
break;
case C_IAD_uiCloseID:
if ( fn_bIsCurrentEditor() )
GetMainWorld()->fn_bCloseEditor(this);
break;
case C_IAD_PopupID_Setup:
m_clDocument.m_pub_fn_vDisplaySetup();
break;
}
}
//**************************************************************************************
//**************************************************************************************
// Popup
//**************************************************************************************
BOOL IAD_Interface::fn_bDefinePopupMenu(EDT_PopUpMenu *pPopup,
CPA_List<CPA_SuperObject> *pSelection,
BOOL bIsAlone)
{
BOOL bReturn = FALSE;
if ( !bIsAlone )
{
if ( fn_bIsCurrentEditor() )
{
pPopup->AddAnEntry(this, "Exit IA Debugger", C_IAD_PopupID_Exit_Editor);
bReturn = TRUE;
}
}
return bReturn;
}
//**************************************************************************************
void IAD_Interface::_OnPopUpMenuCommand(UINT m_IDCmdMsg)
{
switch (m_IDCmdMsg)
{
case C_IAD_PopupID_Exit_Editor:
if ( fn_bIsCurrentEditor() )
GetMainWorld()->fn_bCloseEditor(this);
break;
}
}
//**************************************************************************************
//**************************************************************************************
//**************************************************************************************
// Specific members
//***********************************************************************
void IAD_Interface::m_fn_vShowEditor()
{
g_oFrameGest.mfn_vSetRefresh(FALSE);
if ( m_pclIADMainFrame != NULL )
g_oFrameGest.mfn_vActivateWindow(m_pclIADMainFrame);
g_oFrameGest.mfn_vSetRefresh(TRUE);
}
//***********************************************************************
void IAD_Interface::m_fn_vHideEditor()
{
g_oFrameGest.mfn_vSetRefresh(FALSE);
if ( m_pclIADMainFrame != NULL )
g_oFrameGest.mfn_vDisactivateWindow(m_pclIADMainFrame);
g_oFrameGest.mfn_vSetRefresh(TRUE);
}
//**************************************************************************************
IAD_MyDocument *IAD_Interface::m_fn_pclGetDocument()
{
ASSERT ( AfxIsValidAddress(&m_clDocument, sizeof(IAD_MyDocument)) );
return &m_clDocument;
}
//BEGIN ROMTEAM Cristi Petrescu 98-05-
//**************************************************************************************
//**************************************************************************************
//**************************************************************************************
// Comunication
//**************************************************************************************
long IAD_Interface::OnQueryAction(CPA_EditorBase *p_oSender,WPARAM wParam,LPARAM lParam)
{
long lResult=0;
// BEGIN ROMTEAM Cristi Petrescu 98-06-
static CString csResult;
// END ROMTEAM Cristi Petrescu 98-06-
switch(wParam)
{
case C_uiAI_ViewVariable:
{
// BEGIN ROMTEAM Cristi Petrescu 98-06-
tdstDebugAICom *p_tdstDebugAICom = (tdstDebugAICom *) lParam;
m_clDocument . m_pclVariableView -> m_fn_vAddVariable (p_tdstDebugAICom -> csName, p_tdstDebugAICom -> csValue);
lResult = 1;
// END ROMTEAM Cristi Petrescu 98-06-
}
break;
// BEGIN ROMTEAM Cristi Petrescu 98-06-
case C_uiAI_GetVariableValue:
{
// get the current node
IAD_MyDocument *pclDocument = m_fn_pclGetDocument ();
ASSERT (pclDocument);
IAD_ResultView *pclResultView = pclDocument -> m_pclResultView;
ASSERT (pclResultView);
IAD_EditorTreeNode *pclCurrentNode = pclResultView -> m_fn_pclGetSelectedEditorNode ();
if (pclCurrentNode)
{
IAD_EditorTreeNode *pclEngineLoopNode = pclCurrentNode -> m_fn_pclGetEngineLoopParentNode ();
tdstGetSetParam *p_stVariableValue = pclEngineLoopNode -> m_fn_p_tdstGetVariableValue (lParam);
if (p_stVariableValue)
{
csResult = IAD_fn_csComputeValueFromGetSetParam (p_stVariableValue);
lResult = (long) & csResult;
}
}
break;
}
// END ROMTEAM Cristi Petrescu 98-06-
}
return lResult;
}
//END ROMTEAM Cristi Petrescu 98-05-