reman3/Rayman_X/cpa/main/Src/P5/GameITF.cpp

432 lines
12 KiB
C++

#include "MainCPA.h"
#include "ITF.h"
#include "SND.h"
#ifdef USE_PROFILER
#include "prf.h"
#endif
#include "GameITF.h"
#include "DlgOpt.h"
#include "acp_driver.h"
// ANNECY AV {
#ifdef __cplusplus
extern "C" {
#endif
extern void MOR_fn_vRemoveAllMorphedObjects (void);
#ifdef __cplusplus
};
#endif
// ENDANNECY AV }
//************************************************************************************
void fn_vChangeWindowTitle(char *szWindowName)
{
M_GetMainWnd()->SetWindowText(szWindowName);
#ifdef ACTIVE_EDITOR
CString act;
char actc[255], *p;
g_oBaseFrame.GetWindowText(act);
strcpy(actc, (char *) (LPCSTR) act);
p = strchr(actc, ']') + 1;
*p = '\0';
act = actc;
act += " ("+CString(szWindowName)+")";
g_oBaseFrame.SetWindowText(act);
#endif
}
//************************************************************************************
void fn_vForceToCloseApplication()
{
M_GetMainWnd()->PostMessage(WM_CLOSE);
Sleep(0);
}
//************************************************************************************
void fn_vSetEngineWorldForITF(HIE_tdxHandleToSuperObject _hActualWorld)
{
M_GetMainDevice3D()->SetEngineWorld(_hActualWorld);
}
//************************************************************************************
GLD_tdhDevice fn_hGetGLDDevice(unsigned long _ulValue)
{
return(M_GetMainGLDDevice(_ulValue));
}
//************************************************************************************
GLD_tdhViewport fn_hGetGLDViewport(unsigned long _ulValue)
{
return(M_GetMainGLDViewport(_ulValue));
}
//************************************************************************************
void * fn_hGetDrawSemaphore(void)
{
return(M_GetMainApp()->m_hDrawSem);
}
//************************************************************************************
void GAMITF_fn_vResizeGameViewport(void)
{
GAM_fn_vActualizeAllGameViewportSize();
}
//************************************************************************************
#if defined(ACTIVE_EDITOR)
void fn_vEditorDrawObjectExpect0(void)
{
M_GetMainDevice()->SendMessage(CPA_MSG_DRAWOBJECTEXCEPT0);
}
#endif /* ACTIVE_EDITOR */
//************************************************************************************
#if defined(ACTIVE_EDITOR)
void fn_vEditorDataHasChange(void)
{
M_GetMainApp()->fn_vDataHasChanged();
}
#endif /* ACTIVE_EDITOR */
//************************************************************************************
#if defined(ACTIVE_EDITOR)
void fn_vEnableEditorsMainWnd(unsigned char _ulValue)
{
M_GetMainWnd()->fn_vEnableEditors(_ulValue);
}
#endif /* ACTIVE_EDITOR */
//************************************************************************************
#if defined(ACTIVE_EDITOR)
void fn_vEditorSetCurrentMap(char *_szCurrentMap)
{
M_GetMainApp()->fn_vSetCurrentMap(_szCurrentMap);
}
#endif /* ACTIVE_EDITOR */
//************************************************************************************
HWND fn_hGetBaseFrameWnd(void)
{
#if defined(ACTIVE_EDITOR)
return g_oBaseFrame . m_hWnd;
#else
return fn_hGetApplicationWindow();
#endif /* ACTIVE_EDITOR */
}
//************************************************************************************
void fn_vInitSoundStruct(void *SndInit)
{
((SND_tdstInitStruct*)SndInit)->hProcessInstance=AfxGetInstanceHandle();
#if defined(ACTIVE_EDITOR)
((SND_tdstInitStruct*)SndInit)->hMainWindow=g_oBaseFrame.GetSafeHwnd();
#else
((SND_tdstInitStruct*)SndInit)->hMainWindow=fn_hGetApplicationWindow();
#endif /* ACTIVE_EDITOR */
((SND_tdstInitStruct*)SndInit)->hMutexDX=NULL;
}
//************************************************************************************
void fn_vSwapDeviceToFullScreen(void)
{
M_GetMainApp()->PostThreadMessage(WM_USER,USERM_SWAP_FULLSCREEN,0);
}
void fn_vChangeDeviceResolution(void)
{
}
//************************************************************************************
BOOL fn_bInFullScreen() // MR1106
{
return M_GetMainDevice()->GetDevice(0)->IsFullScreen();
}
//************************************************************************************
BOOL fn_bBadRes()
{
return M_GetMainApp()->m_bBadResolution;
}
//ANNECY VL SPOFLAG 04/12/97{
//************************************************************************************
BOOL fn_bIsEditorsActive(void)
{
return M_GetMainApp()->m_bEditorsAreActive;
}
//ENDANNECY VL SPOFLAG}
//************************************************************************************
HINSTANCE fn_hGetApplicationInstance(void)
{
return(AfxGetInstanceHandle());
}
//************************************************************************************
#ifndef USE_DIRECTX
HWND fn_hGetApplicationWindow(void)
{
return(AfxGetMainWnd()->m_hWnd);
}
#else
// In fact, this should work also under DX7 version
HWND fn_hGetApplicationWindow(void)
{
HWND hResult;
CWnd * hCwnd;
hCwnd = (CWnd *)M_GetMainDevice()->GetDevice(0)->GetViewPort();;
hResult = hCwnd->m_hWnd;
HWND hwnd0=(AfxGetMainWnd()->m_hWnd);
static int kk=0;
if(kk==0)
{
return( hResult );
}else
return hwnd0;
}
HWND fn_hGetApplicationWindowWithChoise(BOOL _isFullScreen)
{
HWND hResult;
CWnd * hCwnd;
hCwnd = (CWnd *)M_GetMainDevice()->GetDevice(0)->GetViewPort();;
hResult = hCwnd->m_hWnd;
HWND hwnd0=(AfxGetMainWnd()->m_hWnd);
if(_isFullScreen)
{
return hwnd0;
}else
return( hResult );
}
#endif /* USE8DX8 */
//************************************************************************************
char *fn_szGetExeCommandLine(void)
{
return (AfxGetApp()->m_lpCmdLine);
}
//************************************************************************************
unsigned long g_ulDeviceWidth,g_ulDeviceHeight;
//VL0
unsigned long g_ulDeviceMode;
//EVL
void MAIN_fn_vSetDeviceWidth(unsigned long ulWidth,unsigned long ulHeight)
{
g_ulDeviceWidth = ulWidth;
g_ulDeviceHeight = ulHeight;
}
//VL0
void MAIN_fn_vSetDeviceMode(unsigned long ulIsFullScreen )
{
g_ulDeviceMode = ulIsFullScreen;
}
//EVL
//************************************************************************************
unsigned long MAIN_fn_ulGetDeviceWidth(void)
{
return(g_ulDeviceWidth);
}
//************************************************************************************
unsigned long MAIN_fn_ulGetDeviceHeight(void)
{
return(g_ulDeviceHeight);
}
//VL
//************************************************************************************
unsigned long MAIN_fn_ulDeviceIsFullScreen(void)
{
return(g_ulDeviceMode);
}
//EVL
//************************************************************************************
//************************************************************************************
//************************************************************************************
//************************** nouvelle synchro ****************************************
//************************************************************************************
//************************************************************************************
//************************************************************************************
//************************************************************************************
//************************************************************************************
//************************************************************************************
// check if appli asked to end the game
// if not, return
// if yes, change the engine mode to stop program
// tell the appli that engine is leaving
// return...
void fn_vCheckEnd()
{
// if no close was asked, return
if (M_GetMainApp()->m_bAppliAskedToEndGame == FALSE)
return;
// change engine mode to stop program
fn_vChangeEngineMode(EM_ModeStoppingProgram);
// tells the appli that the engine is beginning the closing procedure
M_GetMainApp()->PostThreadMessage(WM_USER,USERM_ENGINE_IS_CLOSING,0);
// and that's all
}
// Call fn_vCheckEnd and return TRUE if detected "End of Appli"
// return FALSE otherelse
ACP_tdxBool fn_bTestIfEndOfAppliAsked()
{
fn_vCheckEnd();
if (fn_eGetEngineMode()==EM_ModeStoppingProgram)
return TRUE;
else
return FALSE;
}
//************************************************************************************
//**********************************************************************************
// tells the appli that the engine has finished
// it will tell the appli that
// this function will return when appli is OK
void fn_vEngineHasFinished()
{
// tells the appli that the engine has finished
M_GetMainApp()->PostThreadMessage(WM_USER,USERM_ENGINE_IS_DONE,0);
// and wait until the engine is OK
while (M_GetMainApp()->m_bFinishEngine == FALSE)
Sleep(0);
}
//************************************************************************************
//************************************************************************************
// check if appli asked for a pause
// if no pause --> return
// if pause, stop engine and return when engine restart
void fn_vCheckPause()
{
// if no pause was asked, return
if (M_GetMainApp()->m_bAppliAskedToStopEngine == FALSE)
return;
fn_vSetEngineInPaused();
// reset one step pulse
M_GetMainApp()->m_bAppliPulsedOneStep = FALSE;
// tells appli to stop engine, and wait to restart
M_GetMainApp()->PostThreadMessage(WM_USER,USERM_STOP_ENGINE,0);
while ((M_GetMainApp()->m_bAppliAskedToStopEngine) && (M_GetMainApp()->m_bAppliPulsedOneStep == FALSE))
{
Sleep(0);
}
// reset one step pulse
M_GetMainApp()->m_bAppliPulsedOneStep = FALSE;
fn_vResetEngineFromPaused();
fn_vCheckEditor();
}
//************************************************************************************
//************************************************************************************
// check if appli asked to go in editor
// if no editor --> return
// if editor, stop engine, pass in editor and return when engine restart
void fn_vCheckEditor()
{
// if appli didn't ask to launch editor, return
if (M_GetMainApp()->m_bAppliAskedToActivateEditors == FALSE)
return;
// ANNECY AV {
// Remove all the morphed objects
MOR_fn_vRemoveAllMorphedObjects ();
#if defined(ACTIVE_EDITOR)
GAM_fn_vFillHierarchyBeforeEditor();
#endif
// ENDANNECY AV }
// Notify the engine for timer reinit
fn_vSetEngineInPaused();
// tells appli to go in editors.
// this will stop the engine
M_GetMainApp()->PostThreadMessage(WM_USER,USERM_START_EDITORS,0);
// wait for editors to stop
while (M_GetMainApp()->m_bAppliAskedToActivateEditors)
{
Sleep(0);
}
#if defined(ACTIVE_EDITOR)
if (g_DEMO_KeybTest == DEMO_PLAY)
{
DEMO_fn_vStopWhenPlaying();
if (! M_GetMainApp() -> m_bAutoReinitTheMap)
fn_vReinitTheMap ();
}
GAM_fn_vFillHierarchyAfterEditor();
#endif
#ifdef USE_PROFILER
// stop rasters until beginning of next frame
PRF_fn_vReinitAllChrono();
#endif
fn_vResetEngineFromPaused();
}
//************************************************************************************
//************************************************************************************
// force appli to start editor
// stop engine, pass in editor and return when engine restart
void fn_vForceEditor()
{
#if defined(ACTIVE_EDITOR)
// tells engine that the appli wants to go in editor
// the editors will be activated as soon as possible
M_GetMainApp()->m_bEngineAskedToForceEditors = TRUE;
M_GetMainApp()->m_bAppliAskedToActivateEditors = TRUE;
#endif
}
//************************************************************************************
//************************************************************************************
ACP_tdxBool fn_bTestIfEditorRunning()
{
return (unsigned char)M_GetMainApp()->m_bAppliAskedToActivateEditors;
}
//************************************************************************************
//************************************************************************************
//************************************************************************************
//************************************************************************************
void fn_vChoicePreferences(void)
{
CDlgUpdateOptions dlgPreferences;
dlgPreferences.DoModal();
}