2014-10-14 13:11:37 +00:00
/*
* This file is part of the Colobot : Gold Edition source code
2016-02-13 13:11:30 +00:00
* Copyright ( C ) 2001 - 2016 , Daniel Roux , EPSITEC SA & TerranovaTeam
2015-08-22 14:40:02 +00:00
* http : //epsitec.ch; http://colobot.info; http://github.com/colobot
2014-10-14 13:11:37 +00:00
*
* This program is free software : you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation , either version 3 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE .
* See the GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program . If not , see http : //gnu.org/licenses
*/
2012-06-26 20:23:05 +00:00
2012-10-17 19:55:45 +00:00
/**
2015-08-13 09:47:32 +00:00
* \ file level / robotmain . h
2012-10-17 19:55:45 +00:00
* \ brief CRobotMain - main class of Colobot game engine
*/
2012-06-26 20:23:05 +00:00
# pragma once
2015-08-02 11:09:48 +00:00
# include "app/pausemanager.h"
2012-10-17 19:55:45 +00:00
2015-08-15 12:02:07 +00:00
# include "common/error.h"
2015-09-27 14:28:11 +00:00
# include "common/event.h"
2012-09-19 16:32:18 +00:00
# include "common/singleton.h"
2015-10-03 20:05:14 +00:00
# include "graphics/engine/camera.h"
# include "graphics/engine/particle.h"
2015-08-15 12:02:07 +00:00
# include "level/build_type.h"
2015-08-13 09:47:32 +00:00
# include "level/level_category.h"
# include "level/mainmovie.h"
2015-08-15 12:02:07 +00:00
# include "level/research_type.h"
2015-08-13 09:47:32 +00:00
2015-06-25 17:05:56 +00:00
# include "object/drive_type.h"
2015-06-26 20:07:55 +00:00
# include "object/mission_type.h"
2015-08-02 11:09:48 +00:00
# include "object/object_type.h"
# include "object/tool_type.h"
2013-12-31 11:58:45 +00:00
2015-07-14 20:05:12 +00:00
# include <deque>
2015-08-14 16:50:40 +00:00
# include <stdexcept>
2015-07-14 20:05:12 +00:00
2012-06-26 20:23:05 +00:00
enum Phase
{
2015-07-19 21:11:41 +00:00
PHASE_WELCOME1 ,
PHASE_WELCOME2 ,
PHASE_WELCOME3 ,
PHASE_PLAYER_SELECT ,
PHASE_APPERANCE ,
PHASE_MAIN_MENU ,
2015-07-19 21:07:36 +00:00
PHASE_LEVEL_LIST ,
2012-06-26 20:23:05 +00:00
PHASE_SIMUL ,
PHASE_SETUPd ,
PHASE_SETUPg ,
PHASE_SETUPp ,
PHASE_SETUPc ,
PHASE_SETUPs ,
PHASE_SETUPds ,
PHASE_SETUPgs ,
PHASE_SETUPps ,
PHASE_SETUPcs ,
PHASE_SETUPss ,
PHASE_WRITEs ,
2015-08-04 21:28:58 +00:00
PHASE_READ ,
2012-06-26 20:23:05 +00:00
PHASE_READs ,
PHASE_WIN ,
PHASE_LOST ,
2015-07-19 21:11:41 +00:00
PHASE_QUIT_SCREEN ,
2016-02-10 16:04:26 +00:00
PHASE_SATCOM ,
2012-06-26 20:23:05 +00:00
} ;
2015-08-15 15:07:21 +00:00
std : : string PhaseToString ( Phase phase ) ;
2015-08-04 21:28:58 +00:00
bool IsInSimulationConfigPhase ( Phase phase ) ;
bool IsPhaseWithWorld ( Phase phase ) ;
2015-08-06 12:03:07 +00:00
bool IsMainMenuPhase ( Phase phase ) ;
2012-06-26 20:23:05 +00:00
2012-09-15 13:33:08 +00:00
class CEventQueue ;
class CSoundInterface ;
2014-11-10 13:16:32 +00:00
class CLevelParserLine ;
2014-12-11 18:01:57 +00:00
class CInput ;
2015-06-20 17:27:43 +00:00
class CObjectManager ;
2015-07-07 14:17:19 +00:00
class CSceneEndCondition ;
class CAudioChangeCondition ;
2015-07-19 13:34:49 +00:00
class CPlayerProfile ;
2015-08-04 10:45:52 +00:00
class CSettings ;
2015-08-11 21:13:57 +00:00
class COldObject ;
2015-08-31 19:47:55 +00:00
class CPauseManager ;
struct ActivePause ;
2012-09-15 13:33:08 +00:00
2015-08-02 09:40:47 +00:00
namespace Gfx
{
2012-09-15 13:33:08 +00:00
class CEngine ;
class CLightManager ;
2012-06-26 20:23:05 +00:00
class CWater ;
class CCloud ;
2012-09-15 13:33:08 +00:00
class CLightning ;
2012-06-26 20:23:05 +00:00
class CPlanet ;
class CTerrain ;
2015-07-11 17:48:37 +00:00
class CModelManager ;
2013-02-16 21:37:43 +00:00
}
2012-09-15 13:33:08 +00:00
2015-08-02 09:40:47 +00:00
namespace Ui
{
2015-08-06 10:59:09 +00:00
class CMainUserInterface ;
2012-09-15 13:33:08 +00:00
class CMainShort ;
class CMainMap ;
2012-06-26 20:23:05 +00:00
class CInterface ;
class CDisplayText ;
class CDisplayInfo ;
2016-03-28 11:51:39 +00:00
class CDebugMenu ;
2013-02-16 21:37:43 +00:00
}
2012-06-26 20:23:05 +00:00
struct NewScriptName
{
2015-08-14 21:11:24 +00:00
ObjectType type = OBJECT_NULL ;
2015-08-29 14:52:07 +00:00
std : : string name = " " ;
2012-06-26 20:23:05 +00:00
} ;
const int MAXSHOWLIMIT = 5 ;
const int MAXSHOWPARTI = 200 ;
const float SHOWLIMITTIME = 20.0f ;
2015-07-18 21:14:20 +00:00
const int MAXSCENE = 999 ;
2012-06-26 20:23:05 +00:00
struct ShowLimit
{
2015-08-14 21:11:24 +00:00
bool used = false ;
2012-09-15 13:33:08 +00:00
Math : : Vector pos ;
2015-08-14 21:11:24 +00:00
float radius = 0.0f ;
int total = 0 ;
2015-08-15 22:06:27 +00:00
int parti [ MAXSHOWPARTI ] = { } ;
2015-08-14 21:11:24 +00:00
CObject * link = nullptr ;
float duration = 0.0f ;
float time = 0.0f ;
2012-06-26 20:23:05 +00:00
} ;
2016-04-08 20:15:54 +00:00
struct MinMax
{
int min = - 1 ;
int max = - 1 ;
} ;
2012-06-26 20:23:05 +00:00
const int SATCOM_HUSTON = 0 ;
const int SATCOM_SAT = 1 ;
const int SATCOM_OBJECT = 2 ;
const int SATCOM_LOADING = 3 ;
const int SATCOM_PROG = 4 ;
const int SATCOM_SOLUCE = 5 ;
const int SATCOM_MAX = 6 ;
2012-09-19 16:32:18 +00:00
class CRobotMain : public CSingleton < CRobotMain >
2012-06-26 20:23:05 +00:00
{
public :
2015-08-06 10:59:09 +00:00
CRobotMain ( ) ;
2013-06-21 23:11:37 +00:00
virtual ~ CRobotMain ( ) ;
2012-06-26 20:23:05 +00:00
2013-02-16 21:37:43 +00:00
Gfx : : CCamera * GetCamera ( ) ;
Gfx : : CTerrain * GetTerrain ( ) ;
Ui : : CInterface * GetInterface ( ) ;
Ui : : CDisplayText * GetDisplayText ( ) ;
2015-10-01 16:55:41 +00:00
CPauseManager * GetPauseManager ( ) ;
2013-02-16 21:37:43 +00:00
2012-06-26 20:23:05 +00:00
void ChangePhase ( Phase phase ) ;
2013-06-16 19:39:21 +00:00
bool ProcessEvent ( Event & event ) ;
2015-08-15 15:07:21 +00:00
Phase GetPhase ( ) ;
2012-06-26 20:23:05 +00:00
bool CreateShortcuts ( ) ;
void ScenePerso ( ) ;
2012-09-15 13:33:08 +00:00
void SetMovieLock ( bool lock ) ;
2012-09-10 21:29:38 +00:00
bool GetMovieLock ( ) ;
bool GetInfoLock ( ) ;
2012-09-15 13:33:08 +00:00
void SetSatComLock ( bool lock ) ;
2012-09-10 21:29:38 +00:00
bool GetSatComLock ( ) ;
2012-09-15 13:33:08 +00:00
void SetEditLock ( bool lock , bool edit ) ;
2012-09-10 21:29:38 +00:00
bool GetEditLock ( ) ;
2012-09-15 13:33:08 +00:00
void SetEditFull ( bool full ) ;
2012-09-10 21:29:38 +00:00
bool GetEditFull ( ) ;
2012-09-15 13:33:08 +00:00
void SetFriendAim ( bool friendAim ) ;
2012-09-10 21:29:38 +00:00
bool GetFriendAim ( ) ;
2012-06-26 20:23:05 +00:00
void SetSpeed ( float speed ) ;
2012-09-10 21:29:38 +00:00
float GetSpeed ( ) ;
2012-06-26 20:23:05 +00:00
void UpdateShortcuts ( ) ;
void SelectHuman ( ) ;
CObject * SearchHuman ( ) ;
CObject * SearchToto ( ) ;
2015-10-03 20:05:14 +00:00
CObject * SearchNearest ( Math : : Vector pos , CObject * exclu ) ;
bool SelectObject ( CObject * obj , bool displayError = true ) ;
2012-09-10 21:29:38 +00:00
CObject * GetSelectObject ( ) ;
2012-06-26 20:23:05 +00:00
CObject * DeselectAll ( ) ;
void ResetObject ( ) ;
2013-04-13 09:44:16 +00:00
void UpdateAudio ( bool frame ) ;
2016-04-08 18:56:09 +00:00
void SetMissionResultFromScript ( Error result , float delay ) ;
2012-09-15 13:33:08 +00:00
Error CheckEndMission ( bool frame ) ;
2016-04-08 19:18:45 +00:00
Error ProcessEndMissionTake ( ) ;
2016-04-08 18:56:09 +00:00
Error ProcessEndMissionTakeForGroup ( std : : vector < CSceneEndCondition * > & endTakes ) ;
2016-04-08 20:15:54 +00:00
const std : : map < std : : string , MinMax > & GetObligatoryTokenList ( ) ;
2012-06-26 20:23:05 +00:00
void UpdateMap ( ) ;
2012-09-10 21:29:38 +00:00
bool GetShowMap ( ) ;
2012-06-26 20:23:05 +00:00
2012-09-10 21:29:38 +00:00
MainMovieType GetMainMovie ( ) ;
2012-06-26 20:23:05 +00:00
void FlushDisplayInfo ( ) ;
2012-09-15 13:33:08 +00:00
void StartDisplayInfo ( int index , bool movie ) ;
2015-08-11 20:47:07 +00:00
void StartDisplayInfo ( const std : : string & filename , int index ) ;
2012-06-26 20:23:05 +00:00
void StopDisplayInfo ( ) ;
2012-09-10 21:29:38 +00:00
char * GetDisplayInfoName ( int index ) ;
2012-06-26 20:23:05 +00:00
void StartSuspend ( ) ;
void StopSuspend ( ) ;
2012-09-10 21:29:38 +00:00
float GetGameTime ( ) ;
2012-06-26 20:23:05 +00:00
2015-10-01 17:37:31 +00:00
const std : : string & GetScriptName ( ) ;
const std : : string & GetScriptFile ( ) ;
2012-09-10 21:29:38 +00:00
bool GetTrainerPilot ( ) ;
bool GetFixScene ( ) ;
bool GetShowSoluce ( ) ;
bool GetSceneSoluce ( ) ;
bool GetShowAll ( ) ;
2012-09-29 23:51:37 +00:00
bool GetRadar ( ) ;
2015-06-26 20:07:55 +00:00
MissionType GetMissionType ( ) ;
2012-06-26 20:23:05 +00:00
2012-09-10 21:29:38 +00:00
int GetGamerFace ( ) ;
int GetGamerGlasses ( ) ;
bool GetGamerOnlyHead ( ) ;
float GetPersoAngle ( ) ;
2015-07-18 21:14:20 +00:00
2015-08-04 07:55:39 +00:00
void SetLevel ( LevelCategory cat , int chap , int rank ) ;
2015-07-18 16:52:37 +00:00
LevelCategory GetLevelCategory ( ) ;
2015-07-18 17:43:22 +00:00
int GetLevelChap ( ) ;
2015-07-18 16:52:37 +00:00
int GetLevelRank ( ) ;
2015-08-04 08:52:10 +00:00
std : : string GetCustomLevelDir ( ) ;
void SetReadScene ( std : : string path ) ;
2015-07-18 21:14:20 +00:00
void UpdateChapterPassed ( ) ;
2012-06-26 20:23:05 +00:00
void StartMusic ( ) ;
2015-08-31 19:47:55 +00:00
void UpdatePause ( PauseType pause ) ;
2015-10-01 16:55:41 +00:00
void UpdatePauseMusic ( PauseMusic music ) ;
2012-06-26 20:23:05 +00:00
void ClearInterface ( ) ;
void ChangeColor ( ) ;
float SearchNearestObject ( Math : : Vector center , CObject * exclu ) ;
bool FreeSpace ( Math : : Vector & center , float minRadius , float maxRadius , float space , CObject * exclu ) ;
2015-07-22 16:26:05 +00:00
bool FlatFreeSpace ( Math : : Vector & center , float minFlat , float minRadius , float maxRadius , float space , CObject * exclu ) ;
2012-09-10 21:29:38 +00:00
float GetFlatZoneRadius ( Math : : Vector center , float maxRadius , CObject * exclu ) ;
2012-06-26 20:23:05 +00:00
void HideDropZone ( CObject * metal ) ;
2015-06-29 21:05:31 +00:00
void ShowDropZone ( CObject * metal , CObject * transporter ) ;
2012-06-26 20:23:05 +00:00
void FlushShowLimit ( int i ) ;
2015-10-03 20:05:14 +00:00
void SetShowLimit ( int i , Gfx : : ParticleType parti , CObject * obj , Math : : Vector pos ,
2012-09-15 13:33:08 +00:00
float radius , float duration = SHOWLIMITTIME ) ;
2012-06-26 20:23:05 +00:00
void StartShowLimit ( ) ;
void FrameShowLimit ( float rTime ) ;
void SaveAllScript ( ) ;
2015-10-03 20:05:14 +00:00
void SaveOneScript ( CObject * obj ) ;
bool SaveFileStack ( CObject * obj , FILE * file , int objRank ) ;
bool ReadFileStack ( CObject * obj , FILE * file , int objRank ) ;
2012-06-26 20:23:05 +00:00
2015-08-29 14:52:07 +00:00
void FlushNewScriptName ( ) ;
void AddNewScriptName ( ObjectType type , const std : : string & name ) ;
std : : string GetNewScriptName ( ObjectType type , int rank ) ;
2012-06-26 20:23:05 +00:00
2015-07-18 21:14:20 +00:00
void SelectPlayer ( std : : string playerName ) ;
2015-07-19 13:34:49 +00:00
CPlayerProfile * GetPlayerProfile ( ) ;
2012-06-26 20:23:05 +00:00
2015-08-13 22:21:18 +00:00
bool IOIsBusy ( ) ;
2015-08-17 18:56:42 +00:00
bool IOWriteScene ( std : : string filename , std : : string filecbot , std : : string filescreenshot , const std : : string & info , bool emergencySave = false ) ;
2015-08-03 19:40:30 +00:00
void IOWriteSceneFinished ( ) ;
2015-08-04 08:52:10 +00:00
CObject * IOReadScene ( std : : string filename , std : : string filecbot ) ;
2015-08-15 21:29:21 +00:00
void IOWriteObject ( CLevelParserLine * line , CObject * obj , const std : : string & programDir , int objRank ) ;
CObject * IOReadObject ( CLevelParserLine * line , const std : : string & programDir , const std : : string & objCounterText , float objectProgress , int objRank = - 1 ) ;
2012-06-26 20:23:05 +00:00
2012-09-10 21:29:38 +00:00
int CreateSpot ( Math : : Vector pos , Gfx : : Color color ) ;
2013-05-26 15:47:54 +00:00
2013-05-02 16:07:20 +00:00
CObject * GetSelect ( ) ;
2013-06-24 20:09:39 +00:00
void DisplayError ( Error err , CObject * pObj , float time = 10.0f ) ;
void DisplayError ( Error err , Math : : Vector goal , float height = 15.0f , float dist = 60.0f , float time = 10.0f ) ;
2015-06-25 17:05:56 +00:00
2015-08-04 07:55:39 +00:00
void UpdateCustomLevelList ( ) ;
2015-07-19 21:07:36 +00:00
std : : string GetCustomLevelName ( int id ) ;
2015-08-04 07:55:39 +00:00
const std : : vector < std : : string > & GetCustomLevelList ( ) ;
2015-06-25 17:05:56 +00:00
2015-09-01 14:15:59 +00:00
//! Returns true if the game is on the loading screen
bool IsLoading ( ) ;
2014-10-29 16:53:46 +00:00
void StartMissionTimer ( ) ;
2015-06-25 17:05:56 +00:00
2014-11-11 13:50:44 +00:00
void SetAutosave ( bool enable ) ;
bool GetAutosave ( ) ;
void SetAutosaveInterval ( int interval ) ;
int GetAutosaveInterval ( ) ;
void SetAutosaveSlots ( int slots ) ;
int GetAutosaveSlots ( ) ;
2015-06-25 17:05:56 +00:00
2014-12-22 09:35:05 +00:00
//! Enable mode where completing mission closes the game
void SetExitAfterMission ( bool exit ) ;
2013-06-24 20:09:39 +00:00
2015-06-26 20:07:55 +00:00
//! Returns true if player can interact with things manually
bool CanPlayerInteract ( ) ;
2015-07-07 19:25:13 +00:00
//! Returns team name for the given team id
const std : : string & GetTeamName ( int id ) ;
2015-07-22 10:45:50 +00:00
//! Returns true if team-specific colored texture is available
bool IsTeamColorDefined ( int id ) ;
2015-07-13 15:38:19 +00:00
//! Get/set enabled buildings
//@{
int GetEnableBuild ( ) ;
void SetEnableBuild ( int enableBuild ) ;
//@}
//! Get/set enabled researches
//@{
int GetEnableResearch ( ) ;
void SetEnableResearch ( int enableResearch ) ;
//@}
//! Get/set done researches
//@{
2015-07-13 16:13:28 +00:00
int GetDoneResearch ( int team ) ;
void SetDoneResearch ( int doneResearch , int team ) ;
2015-07-13 15:38:19 +00:00
//@}
//! Returns true if the given building is enabled
//@{
bool IsBuildingEnabled ( BuildType type ) ;
bool IsBuildingEnabled ( ObjectType type ) ;
//@}
//! Returns true if the given research is enabled
bool IsResearchEnabled ( ResearchType type ) ;
//! Returns true if the given research is done
2015-07-13 16:13:28 +00:00
bool IsResearchDone ( ResearchType type , int team ) ;
2015-07-13 15:38:19 +00:00
//! Marks research as done
2015-07-13 16:13:28 +00:00
void MarkResearchDone ( ResearchType type , int team ) ;
2015-07-13 15:38:19 +00:00
//! Retruns true if all requirements to build this object are met (EnableBuild + DoneResearch)
//@{
2015-07-13 16:13:28 +00:00
bool CanBuild ( ObjectType type , int team ) ;
Error CanBuildError ( ObjectType type , int team ) ;
2015-07-13 15:38:19 +00:00
//@}
//! Retruns true if all requirements to create this object in BotFactory are met (DoneResearch)
//@{
2015-07-13 16:13:28 +00:00
bool CanFactory ( ObjectType type , int team ) ;
Error CanFactoryError ( ObjectType type , int team ) ;
2015-07-13 15:38:19 +00:00
//@}
2015-07-14 20:05:12 +00:00
void RemoveFromSelectionHistory ( CObject * object ) ;
2015-07-15 16:10:49 +00:00
//! Returns global magnifyDamage setting
float GetGlobalMagnifyDamage ( ) ;
2015-08-11 21:13:57 +00:00
void StartDetectEffect ( COldObject * object , CObject * target ) ;
2015-10-03 20:05:14 +00:00
bool IsSelectable ( CObject * obj ) ;
2015-08-25 15:25:53 +00:00
2016-03-28 11:51:39 +00:00
void SetDebugCrashSpheres ( bool draw ) ;
bool GetDebugCrashSpheres ( ) ;
2012-06-26 20:23:05 +00:00
protected :
bool EventFrame ( const Event & event ) ;
bool EventObject ( const Event & event ) ;
void InitEye ( ) ;
2015-08-07 13:59:05 +00:00
void ShowSaveIndicator ( bool show ) ;
2012-09-15 13:33:08 +00:00
void CreateScene ( bool soluce , bool fixScene , bool resetObject ) ;
2015-07-13 19:51:18 +00:00
void ResetCreate ( ) ;
2012-06-26 20:23:05 +00:00
2015-08-06 16:19:01 +00:00
void LevelLoadingError ( const std : : string & error , const std : : runtime_error & exception , Phase exitPhase = PHASE_LEVEL_LIST ) ;
2012-09-10 21:29:38 +00:00
int CreateLight ( Math : : Vector direction , Gfx : : Color color ) ;
2012-06-26 20:23:05 +00:00
void HiliteClear ( ) ;
void HiliteObject ( Math : : Point pos ) ;
void HiliteFrame ( float rTime ) ;
2013-12-02 23:11:26 +00:00
void CreateTooltip ( Math : : Point pos , const std : : string & text ) ;
2012-06-26 20:23:05 +00:00
void ClearTooltip ( ) ;
CObject * DetectObject ( Math : : Point pos ) ;
void ChangeCamera ( ) ;
void RemoteCamera ( float pan , float zoom , float rTime ) ;
2014-12-11 18:01:57 +00:00
void KeyCamera ( EventType event , InputSlot key ) ;
2012-06-26 20:23:05 +00:00
void AbortMovie ( ) ;
2015-10-03 20:05:14 +00:00
void SelectOneObject ( CObject * obj , bool displayError = true ) ;
2012-06-26 20:23:05 +00:00
void HelpObject ( ) ;
bool DeselectObject ( ) ;
void DeleteAllObjects ( ) ;
void UpdateInfoText ( ) ;
2012-09-10 21:29:38 +00:00
void StartDisplayVisit ( EventType event ) ;
2012-06-26 20:23:05 +00:00
void FrameVisit ( float rTime ) ;
void StopDisplayVisit ( ) ;
2016-03-26 18:05:58 +00:00
void ExecuteCmd ( const std : : string & cmd ) ;
2012-10-06 21:35:27 +00:00
void UpdateSpeedLabel ( ) ;
2015-06-25 17:05:56 +00:00
2014-11-11 13:50:44 +00:00
int AutosaveRotate ( bool freeOne ) ;
void Autosave ( ) ;
2015-09-06 10:37:49 +00:00
bool DestroySelectedObject ( ) ;
2015-07-14 20:05:12 +00:00
void PushToSelectionHistory ( CObject * obj ) ;
CObject * PopFromSelectionHistory ( ) ;
2013-05-26 15:47:54 +00:00
2015-09-06 17:12:00 +00:00
void CreateCodeBattleInterface ( ) ;
void DestroyCodeBattleInterface ( ) ;
2015-09-13 13:59:42 +00:00
void SetCodeBattleSpectatorMode ( bool mode ) ;
2016-03-17 03:31:16 +00:00
void UpdateDebugCrashSpheres ( ) ;
2015-09-06 17:12:00 +00:00
2012-06-26 20:23:05 +00:00
protected :
2015-08-14 21:11:24 +00:00
CApplication * m_app = nullptr ;
CEventQueue * m_eventQueue = nullptr ;
Gfx : : CEngine * m_engine = nullptr ;
Gfx : : CParticle * m_particle = nullptr ;
Gfx : : CWater * m_water = nullptr ;
Gfx : : CCloud * m_cloud = nullptr ;
Gfx : : CLightning * m_lightning = nullptr ;
Gfx : : CPlanet * m_planet = nullptr ;
Gfx : : COldModelManager * m_oldModelManager = nullptr ;
Gfx : : CLightManager * m_lightMan = nullptr ;
CSoundInterface * m_sound = nullptr ;
CInput * m_input = nullptr ;
std : : unique_ptr < CObjectManager > m_objMan ;
std : : unique_ptr < CMainMovie > m_movie ;
2015-10-01 16:55:41 +00:00
std : : unique_ptr < CPauseManager > m_pause ;
2015-07-11 17:48:37 +00:00
std : : unique_ptr < Gfx : : CModelManager > m_modelManager ;
2015-08-14 21:11:24 +00:00
std : : unique_ptr < Gfx : : CTerrain > m_terrain ;
std : : unique_ptr < Gfx : : CCamera > m_camera ;
2015-08-06 10:59:09 +00:00
std : : unique_ptr < Ui : : CMainUserInterface > m_ui ;
2015-08-14 21:11:24 +00:00
std : : unique_ptr < Ui : : CMainShort > m_short ;
std : : unique_ptr < Ui : : CMainMap > m_map ;
std : : unique_ptr < Ui : : CInterface > m_interface ;
std : : unique_ptr < Ui : : CDisplayInfo > m_displayInfo ;
std : : unique_ptr < Ui : : CDisplayText > m_displayText ;
2016-03-28 11:51:39 +00:00
std : : unique_ptr < Ui : : CDebugMenu > m_debugMenu ;
2015-08-14 21:11:24 +00:00
std : : unique_ptr < CSettings > m_settings ;
2012-09-19 19:23:42 +00:00
2015-07-18 21:14:20 +00:00
//! Progress of loaded player
2015-07-19 13:34:49 +00:00
std : : unique_ptr < CPlayerProfile > m_playerProfile ;
2015-07-18 21:14:20 +00:00
2012-09-19 16:32:18 +00:00
2015-07-09 21:15:30 +00:00
//! Time since level start, including pause and intro movie
2015-08-14 21:11:24 +00:00
float m_time = 0.0f ;
2015-07-09 21:15:30 +00:00
//! Playing time since level start
2015-08-14 21:11:24 +00:00
float m_gameTime = 0.0f ;
2015-07-09 21:15:30 +00:00
//! Playing time since level start, not dependent on simulation speed
2015-08-14 21:11:24 +00:00
float m_gameTimeAbsolute = 0.0f ;
2015-07-12 10:13:19 +00:00
2015-08-04 08:52:10 +00:00
LevelCategory m_levelCategory ;
2015-08-14 21:11:24 +00:00
int m_levelChap = 0 ;
int m_levelRank = 0 ;
2015-08-04 08:52:10 +00:00
std : : string m_sceneReadPath ;
2015-08-14 21:11:24 +00:00
float m_winDelay = 0.0f ;
float m_lostDelay = 0.0f ;
bool m_fixScene = false ; // scene fixed, no interraction
CObject * m_base = nullptr ; // OBJECT_BASE exists in mission
CObject * m_selectObject = nullptr ;
2012-06-26 20:23:05 +00:00
2015-08-14 21:11:24 +00:00
Phase m_phase = PHASE_WELCOME1 ;
2015-08-31 19:47:55 +00:00
ActivePause * m_userPause = nullptr ;
2016-02-13 20:35:01 +00:00
ActivePause * m_focusPause = nullptr ;
2015-08-31 19:47:55 +00:00
ActivePause * m_freePhotoPause = nullptr ;
2015-08-14 21:11:24 +00:00
bool m_cmdEdit = false ;
2015-08-31 19:47:55 +00:00
ActivePause * m_cmdEditPause = nullptr ;
2015-08-14 21:11:24 +00:00
bool m_selectInsect = false ;
bool m_showSoluce = false ;
bool m_showAll = false ;
bool m_cheatRadar = false ;
bool m_shortCut = false ;
2013-04-13 14:35:35 +00:00
std : : string m_audioTrack ;
2015-08-14 21:11:24 +00:00
bool m_audioRepeat = false ;
2014-02-21 13:19:58 +00:00
std : : string m_satcomTrack ;
2015-08-14 21:11:24 +00:00
bool m_satcomRepeat = false ;
2014-02-21 13:19:58 +00:00
std : : string m_editorTrack ;
2015-08-14 21:11:24 +00:00
bool m_editorRepeat = false ;
int m_movieInfoIndex = 0 ;
CObject * m_controller = nullptr ;
MissionType m_missionType = MISSION_NORMAL ;
bool m_immediatSatCom = false ; // SatCom immediately?
bool m_beginSatCom = false ; // messages SatCom poster?
bool m_lockedSatCom = false ; // SatCom locked?
bool m_movieLock = false ; // movie in progress?
bool m_satComLock = false ; // call of SatCom is possible?
bool m_editLock = false ; // edition in progress?
bool m_editFull = false ; // edition in full screen?
bool m_hilite = false ;
bool m_trainerPilot = false ; // remote trainer?
bool m_friendAim = false ;
bool m_resetCreate = false ;
bool m_mapShow = false ;
bool m_mapImage = false ;
char m_mapFilename [ 100 ] = { } ;
2015-08-31 19:47:55 +00:00
ActivePause * m_suspend = nullptr ;
2015-08-14 21:11:24 +00:00
Gfx : : CameraType m_suspendInitCamera = Gfx : : CAM_TYPE_NULL ;
2015-08-04 21:28:58 +00:00
2012-09-15 13:33:08 +00:00
Math : : Point m_tooltipPos ;
2013-12-02 23:11:26 +00:00
std : : string m_tooltipName ;
2015-08-14 21:11:24 +00:00
float m_tooltipTime = 0.0f ;
2012-06-26 20:23:05 +00:00
2015-08-14 21:11:24 +00:00
char m_infoFilename [ SATCOM_MAX ] [ 100 ] = { } ; // names of text files
CObject * m_infoObject = nullptr ;
int m_infoUsed = 0 ;
2015-08-31 19:47:55 +00:00
ActivePause * m_satcomMoviePause = nullptr ;
2012-06-26 20:23:05 +00:00
2015-10-01 17:37:31 +00:00
std : : string m_scriptName = " " ;
std : : string m_scriptFile = " " ;
2015-08-14 21:11:24 +00:00
int m_endingWinRank = 0 ;
int m_endingLostRank = 0 ;
bool m_winTerminate = false ;
2015-06-25 17:05:56 +00:00
2015-08-14 21:11:24 +00:00
float m_globalMagnifyDamage = 0.0f ;
2015-07-15 16:10:49 +00:00
2015-08-14 21:11:24 +00:00
bool m_exitAfterMission = false ;
2012-06-26 20:23:05 +00:00
2015-08-14 21:11:24 +00:00
bool m_codeBattleInit = false ;
bool m_codeBattleStarted = false ;
2015-09-13 13:59:42 +00:00
//! Code battle spectator mode, hides object UI, changes camera to CAM_TYPE_PLANE and allows for switching to free camera by clicking outside of any object
bool m_codeBattleSpectator = true ;
2015-06-26 20:07:55 +00:00
2015-07-07 19:25:13 +00:00
std : : map < int , std : : string > m_teamNames ;
2015-08-29 14:52:07 +00:00
std : : vector < NewScriptName > m_newScriptName ;
2012-06-26 20:23:05 +00:00
2015-08-14 21:11:24 +00:00
float m_cameraPan = 0.0f ;
float m_cameraZoom = 0.0f ;
2012-06-26 20:23:05 +00:00
2015-08-14 21:11:24 +00:00
EventType m_visitLast = EVENT_NULL ;
CObject * m_visitObject = nullptr ;
CObject * m_visitArrow = nullptr ;
float m_visitTime = 0.0f ;
float m_visitParticle = 0.0f ;
2012-09-15 13:33:08 +00:00
Math : : Vector m_visitPos ;
Math : : Vector m_visitPosArrow ;
2015-08-31 19:47:55 +00:00
ActivePause * m_visitPause = nullptr ;
2012-06-26 20:23:05 +00:00
2015-07-07 14:17:19 +00:00
std : : vector < std : : unique_ptr < CSceneEndCondition > > m_endTake ;
2016-04-08 18:56:09 +00:00
//! If true, the mission ends immediately after completing the requirements without requiring SpaceShip takeoff
bool m_endTakeImmediat = false ;
2015-08-14 21:11:24 +00:00
long m_endTakeResearch = 0 ;
float m_endTakeWinDelay = 0.0f ;
float m_endTakeLostDelay = 0.0f ;
2013-05-26 15:47:54 +00:00
2015-07-07 14:17:19 +00:00
std : : vector < std : : unique_ptr < CAudioChangeCondition > > m_audioChange ;
2012-06-26 20:23:05 +00:00
2016-04-08 20:15:54 +00:00
std : : map < std : : string , MinMax > m_obligatoryTokens ;
2012-06-26 20:23:05 +00:00
2015-07-13 16:13:28 +00:00
//! Enabled buildings
2015-08-14 21:11:24 +00:00
int m_build = 0 ;
2015-07-13 16:13:28 +00:00
//! Available researches
2015-08-14 21:11:24 +00:00
long m_researchEnable = 0 ;
2015-07-13 16:13:28 +00:00
//! Done researches for each team
std : : map < int , int > m_researchDone ;
2015-08-14 21:11:24 +00:00
Error m_missionResult = ERR_OK ;
2016-04-08 18:56:09 +00:00
//! true if m_missionResult has been set by LevelController script, this disables normal EndMissionTake processing
bool m_missionResultFromScript = false ;
2013-04-30 19:43:59 +00:00
2012-06-26 20:23:05 +00:00
ShowLimit m_showLimit [ MAXSHOWLIMIT ] ;
2015-07-22 10:45:50 +00:00
std : : map < int , Gfx : : Color > m_colorNewBot ;
2012-09-15 13:33:08 +00:00
Gfx : : Color m_colorNewAlien ;
Gfx : : Color m_colorNewGreen ;
Gfx : : Color m_colorNewWater ;
2015-08-14 21:11:24 +00:00
float m_colorShiftWater = 0.0f ;
2015-06-25 17:05:56 +00:00
2015-08-14 21:11:24 +00:00
bool m_missionTimerEnabled = false ;
bool m_missionTimerStarted = false ;
float m_missionTimer = 0.0f ;
2015-06-25 17:05:56 +00:00
2015-08-14 21:11:24 +00:00
bool m_autosave = false ;
int m_autosaveInterval = 0 ;
int m_autosaveSlots = 0 ;
float m_autosaveLast = 0.0f ;
2015-07-14 20:05:12 +00:00
2015-08-14 21:11:24 +00:00
int m_shotSaving = 0 ;
2015-08-06 18:15:17 +00:00
2015-07-14 20:05:12 +00:00
std : : deque < CObject * > m_selectionHistory ;
2016-03-17 03:31:16 +00:00
bool m_debugCrashSpheres ;
2012-06-26 20:23:05 +00:00
} ;