BVB Source Codes

CRYENGINE Show LevelSystem.h Source code

Return Download CRYENGINE: download LevelSystem.h Source code - Download CRYENGINE Source code - Type:.h
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. #ifndef __LEVELSYSTEM_H__
  4. #define __LEVELSYSTEM_H__
  5.  
  6. #if _MSC_VER > 1000
  7.         #pragma once
  8. #endif
  9.  
  10. #include "ILevelSystem.h"
  11.  
  12. #define LEVEL_ROTATION_DEBUG 0
  13.  
  14. #if LEVEL_ROTATION_DEBUG
  15.         #define Log_LevelRotation(...) CryLog("CLevelRotation" __VA_ARGS__)
  16. #else
  17.         #define Log_LevelRotation(...)
  18. #endif
  19.  
  20. class CLevelInfo :
  21.         public ILevelInfo
  22. {
  23.         friend class CLevelSystem;
  24. public:
  25.         CLevelInfo() : m_heightmapSize(0), m_bMetaDataRead(false), m_isModLevel(false), m_scanTag(ILevelSystem::TAG_UNKNOWN), m_levelTag(ILevelSystem::TAG_UNKNOWN)
  26.         {
  27.                 SwapEndian(m_scanTag, eBigEndian);
  28.                 SwapEndian(m_levelTag, eBigEndian);
  29.         };
  30.         virtual ~CLevelInfo() {};
  31.  
  32.         // ILevelInfo
  33.         virtual const char*                      GetName() const                 { return m_levelName.c_str(); };
  34.         virtual const bool                       IsOfType(const char* sType) const;
  35.         virtual const char*                      GetPath() const                 { return m_levelPath.c_str(); };
  36.         virtual const char*                      GetPaks() const                 { return m_levelPaks.c_str(); };
  37.         virtual bool                             GetIsModLevel() const           { return m_isModLevel; }
  38.         virtual const uint32                     GetScanTag() const              { return m_scanTag; }
  39.         virtual const uint32                     GetLevelTag() const             { return m_levelTag; }
  40.         virtual const char*                      GetDisplayName() const;
  41.         virtual const char*                      GetPreviewImagePath() const     { return m_previewImagePath.c_str(); }
  42.         virtual const char*                      GetBackgroundImagePath() const  { return m_backgroundImagePath.c_str(); }
  43.         virtual const char*                      GetMinimapImagePath() const     { return m_minimapImagePath.c_str(); }
  44.         virtual int                              GetHeightmapSize() const        { return m_heightmapSize; };
  45.         virtual const bool                       MetadataLoaded() const          { return m_bMetaDataRead; }
  46.  
  47.         virtual int                              GetGameTypeCount() const        { return m_gameTypes.size(); };
  48.         virtual const ILevelInfo::TGameTypeInfo* GetGameType(int gameType) const { return &m_gameTypes[gameType]; };
  49.         virtual bool                             SupportsGameType(const char* gameTypeName) const;
  50.         virtual const ILevelInfo::TGameTypeInfo* GetDefaultGameType() const;
  51.         virtual bool                             HasGameRules() const        { return !m_gamerules.empty(); }
  52.  
  53.         virtual const ILevelInfo::SMinimapInfo&  GetMinimapInfo() const      { return m_minimapInfo; }
  54.  
  55.         virtual const char*                      GetDefaultGameRules() const { return m_gamerules.empty() ? NULL : m_gamerules[0].c_str(); }
  56.         virtual ILevelInfo::TStringVec           GetGameRules() const        { return m_gamerules; }
  57.         virtual bool                             GetAttribute(const char* name, TFlowInputData& val) const;
  58.         // ~ILevelInfo
  59.  
  60.         void GetMemoryUsage(ICrySizer*) const;
  61.  
  62. private:
  63.         void ReadMetaData();
  64.         bool ReadInfo();
  65.  
  66.         bool OpenLevelPak();
  67.         void CloseLevelPak();
  68.  
  69.         string                                 m_levelName;
  70.         string                                 m_levelPath;
  71.         string                                 m_levelPaks;
  72.         string                                 m_levelDisplayName;
  73.         string                                 m_previewImagePath;
  74.         string                                 m_backgroundImagePath;
  75.         string                                 m_minimapImagePath;
  76.  
  77.         string                                 m_levelPakFullPath;
  78.         string                                 m_levelMMPakFullPath;
  79.  
  80.         TStringVec                             m_gamerules;
  81.         int                                    m_heightmapSize;
  82.         uint32                                 m_scanTag;
  83.         uint32                                 m_levelTag;
  84.         bool                                   m_bMetaDataRead;
  85.         std::vector<ILevelInfo::TGameTypeInfo> m_gameTypes;
  86.         bool                                   m_isModLevel;
  87.         SMinimapInfo                           m_minimapInfo;
  88.         typedef std::map<string, TFlowInputData, stl::less_stricmp<string>> TAttributeList;
  89.         TAttributeList                         m_levelAttributes;
  90.  
  91.         DynArray<string>                       m_levelTypeList;
  92. };
  93.  
  94. class CLevelRotation : public ILevelRotation
  95. {
  96. public:
  97.         CLevelRotation();
  98.         virtual ~CLevelRotation();
  99.  
  100.         typedef struct SLevelRotationEntry
  101.         {
  102.                 string              levelName;
  103.                 std::vector<string> gameRulesNames;
  104.                 std::vector<int>    gameRulesShuffle;
  105.                 int                 currentModeIndex;
  106.  
  107.                 const char* GameModeName() const; //will return next game mode/rules according to shuffle
  108.         } SLevelRotationEntry;
  109.  
  110.         typedef std::vector<SLevelRotationEntry> TLevelRotationVector;
  111.  
  112.         // ILevelRotation
  113.         virtual bool Load(ILevelRotationFile* file);
  114.         virtual bool LoadFromXmlRootNode(const XmlNodeRef rootNode, const char* altRootTag);
  115.  
  116.         virtual void Reset();
  117.         virtual int  AddLevel(const char* level);
  118.         virtual void AddGameMode(int level, const char* gameMode);
  119.  
  120.         virtual int  AddLevel(const char* level, const char* gameMode);
  121.  
  122.         //call to set the playlist ready for a new session
  123.         virtual void                Initialise(int nSeed);
  124.  
  125.         virtual bool                First();
  126.         virtual bool                Advance();
  127.  
  128.         virtual bool                AdvanceAndLoopIfNeeded();
  129.  
  130.         virtual const char*         GetNextLevel() const;
  131.         virtual const char*         GetNextGameRules() const;
  132.  
  133.         virtual const char*         GetLevel(uint32 idx, bool accessShuffled = true) const;
  134.         virtual int                 GetNGameRulesForEntry(uint32 idx, bool accessShuffled = true) const;
  135.         virtual const char*         GetGameRules(uint32 idx, uint32 iMode, bool accessShuffled = true) const;
  136.  
  137.         virtual const char*         GetNextGameRulesForEntry(int idx) const; //always matches shuffling
  138.  
  139.         virtual const int           NumAdvancesTaken() const;
  140.         virtual void                ResetAdvancement();
  141.  
  142.         virtual int                 GetLength() const;
  143.         virtual int                 GetTotalGameModeEntries() const;
  144.         virtual int                 GetNext() const;
  145.  
  146.         virtual void                ChangeLevel(IConsoleCmdArgs* pArgs = NULL);
  147.  
  148.         virtual bool                NextPairMatch() const;
  149.  
  150.         virtual TRandomisationFlags GetRandomisationFlags() const { return m_randFlags; }
  151.         virtual void                SetRandomisationFlags(TRandomisationFlags flags);
  152.  
  153.         virtual bool                IsRandom() const;
  154.         //~ILevelRotation
  155.  
  156.         ILINE void                       SetExtendedInfoId(const ILevelRotation::TExtInfoId id) { m_extInfoId = id; }
  157.         ILINE ILevelRotation::TExtInfoId GetExtendedInfoId()                                    { return m_extInfoId; }
  158.  
  159. protected:
  160.  
  161.         void      ModeShuffle();
  162.         void      ShallowShuffle();
  163.         void      AddGameMode(SLevelRotationEntry& level, const char* gameMode);
  164.         void      AddLevelFromNode(const char* levelName, XmlNodeRef& levelNode);
  165.  
  166.         ILINE int GetRealRotationIndex(uint idx, bool accessShuffled) const
  167.         {
  168.                 int realId = idx;
  169.                 if (idx < m_rotation.size())
  170.                 {
  171.                         if (accessShuffled && (m_randFlags & ePRF_Shuffle))
  172.                         {
  173.                                 realId = m_shuffle[idx];
  174.                         }
  175.                 }
  176.                 else
  177.                 {
  178.                         realId = -1;
  179.                 }
  180.  
  181.                 Log_LevelRotation(" GetRealRotationIndex passed %d returning %d", idx, realId);
  182.                 return realId;
  183.         }
  184.  
  185.         TLevelRotationVector       m_rotation;
  186.         TRandomisationFlags        m_randFlags;
  187.         int                        m_next;
  188.         std::vector<uint>          m_shuffle;
  189.         int                        m_advancesTaken;
  190.  
  191.         ILevelRotation::TExtInfoId m_extInfoId;   //if this ID is set, we disable implicit shuffling
  192.         bool                       m_hasGameModesDecks;
  193. };
  194.  
  195. class CLevelSystem :
  196.         public ILevelSystem,
  197.         public ISystem::ILoadingProgressListener
  198. {
  199. public:
  200.         CLevelSystem(ISystem* pSystem, const char* levelsFolder);
  201.         virtual ~CLevelSystem();
  202.  
  203.         void Release() { delete this; };
  204.  
  205.         // ILevelSystem
  206.         virtual DynArray<string>* GetLevelTypeList();
  207.         virtual void              Rescan(const char* levelsFolder, const uint32 tag);
  208.         virtual void              LoadRotation();
  209.         virtual int               GetLevelCount();
  210.         virtual ILevelInfo*       GetLevelInfo(int level);
  211.         virtual ILevelInfo*       GetLevelInfo(const char* levelName);
  212.  
  213.         virtual void              AddListener(ILevelSystemListener* pListener);
  214.         virtual void              RemoveListener(ILevelSystemListener* pListener);
  215.  
  216.         virtual ILevelInfo*       GetCurrentLevel() const { return m_pCurrentLevelInfo; }
  217.         virtual ILevelInfo*       LoadLevel(const char* levelName);
  218.         virtual void              UnLoadLevel();
  219.         virtual ILevelInfo*       SetEditorLoadedLevel(const char* levelName, bool bReadLevelInfoMetaData = false);
  220.         virtual void              PrepareNextLevel(const char* levelName);
  221.         virtual float             GetLastLevelLoadTime() { return m_fLastLevelLoadTime; };
  222.         virtual bool              IsLevelLoaded()        { return m_bLevelLoaded; }
  223.  
  224.         virtual ILevelRotation*   GetLevelRotation()     { return &m_levelRotation; };
  225.  
  226.         virtual ILevelRotation*   FindLevelRotationForExtInfoId(const ILevelRotation::TExtInfoId findId);
  227.  
  228.         virtual bool              AddExtendedLevelRotationFromXmlRootNode(const XmlNodeRef rootNode, const char* altRootTag, const ILevelRotation::TExtInfoId extInfoId);
  229.         virtual void              ClearExtendedLevelRotations();
  230.         virtual ILevelRotation*   CreateNewRotation(const ILevelRotation::TExtInfoId id);
  231.         // ~ILevelSystem
  232.  
  233.         // ILoadingProgessListener
  234.         virtual void OnLoadingProgress(int steps);
  235.         // ~ILoadingProgessListener
  236.  
  237.         void PrecacheLevelRenderData();
  238.         void GetMemoryUsage(ICrySizer* s) const;
  239.  
  240.         void SaveOpenedFilesList();
  241.  
  242. private:
  243.  
  244.         // ILevelSystemListener events notification
  245.         void OnLevelNotFound(const char* levelName);
  246.         void OnLoadingStart(ILevelInfo* pLevel);
  247.         void OnLoadingLevelEntitiesStart(ILevelInfo* pLevelInfo);
  248.         void OnLoadingComplete(ILevelInfo* pLevel);
  249.         void OnLoadingError(ILevelInfo* pLevel, const char* error);
  250.         void OnLoadingProgress(ILevelInfo* pLevel, int progressAmount);
  251.         void OnUnloadComplete(ILevelInfo* pLevel);
  252.  
  253.         // lowercase string and replace backslashes with forward slashes
  254.         // TODO: move this to a more general place in CryEngine
  255.         string& UnifyName(string& name);
  256.         void    ScanFolder(const char* subfolder, bool modFolder, const uint32 tag);
  257.         void    LogLoadingTime();
  258.         bool    LoadLevelInfo(CLevelInfo& levelInfo);
  259.  
  260.         // internal get functions for the level infos ... they preserve the type and don't
  261.         // directly cast to the interface
  262.         CLevelInfo* GetLevelInfoInternal(int level);
  263.         CLevelInfo* GetLevelInfoInternal(const char* levelName);
  264.  
  265.         typedef std::vector<CLevelRotation> TExtendedLevelRotations;
  266.  
  267.         ISystem*                           m_pSystem;
  268.         std::vector<CLevelInfo>            m_levelInfos;
  269.         string                             m_levelsFolder;
  270.         ILevelInfo*                        m_pCurrentLevelInfo;
  271.         ILevelInfo*                        m_pLoadingLevelInfo;
  272.  
  273.         TExtendedLevelRotations            m_extLevelRotations;
  274.         CLevelRotation                     m_levelRotation;
  275.  
  276.         string                             m_lastLevelName;
  277.         float                              m_fLastLevelLoadTime;
  278.         float                              m_fFilteredProgress;
  279.         float                              m_fLastTime;
  280.  
  281.         bool                               m_bLevelLoaded;
  282.         bool                               m_bRecordingFileOpens;
  283.  
  284.         int                                m_nLoadedLevelsCount;
  285.  
  286.         CTimeValue                         m_levelLoadStartTime;
  287.  
  288.         static int                         s_loadCount;
  289.  
  290.         std::vector<ILevelSystemListener*> m_listeners;
  291.  
  292.         DynArray<string>                   m_levelTypeList;
  293. };
  294.  
  295. #endif //__LEVELSYSTEM_H__
  296.  
downloadLevelSystem.h Source code - Download CRYENGINE Source code
Related Source Codes/Software:
postal - 2017-06-11
reactide - Reactide is the first dedicated IDE for React web ... 2017-06-11
rkt - rkt is a pod-native container engine for Linux. It... 2017-06-11
uWebSockets - Tiny WebSockets https://for... 2017-06-11
realworld - TodoMVC for the RealWorld - Exemplary fullstack Me... 2017-06-11
CRYENGINE - CRYENGINE is a powerful real-time game development... 2017-06-11
goreplay - GoReplay is an open-source tool for capturing and ... 2017-06-10
pyenv - Simple Python version management 2017-06-10
redux-saga - An alternative side effect model for Redux apps ... 2017-06-10
angular-starter - 2017-06-10

 Back to top