aboutsummaryrefslogtreecommitdiff
path: root/source/30-game/Level.hpp
diff options
context:
space:
mode:
authorrtk0c <[email protected]>2023-10-19 22:50:07 -0700
committerrtk0c <[email protected]>2025-08-16 11:31:16 -0700
commit297232d21594b138bb368a42b5b0d085ff9ed6aa (patch)
tree075d5407e1e12a9d35cbee6e4c20ad34e0765c42 /source/30-game/Level.hpp
parentd5cd34ff69f7fd134d5450696f298af1a864afbc (diff)
The great renaming: switch to "module style"
Diffstat (limited to 'source/30-game/Level.hpp')
-rw-r--r--source/30-game/Level.hpp95
1 files changed, 0 insertions, 95 deletions
diff --git a/source/30-game/Level.hpp b/source/30-game/Level.hpp
deleted file mode 100644
index c030b8e..0000000
--- a/source/30-game/Level.hpp
+++ /dev/null
@@ -1,95 +0,0 @@
-#pragma once
-
-#include "EditorCore.hpp"
-#include "GameObject.hpp"
-
-#include <MacrosCodegen.hpp>
-#include <RcPtr.hpp>
-#include <Uid.hpp>
-
-#include <robin_hood.h>
-#include <filesystem>
-#include <vector>
-
-// Forward declarations
-class Level;
-class LevelManager;
-
-/// Represents a seralized GameObject tree.
-class Level : public RefCounted {
- friend class LevelManager;
-
-private:
- struct InstanciationEntry;
-
- LevelManager* mMan;
- Uid mUid;
- std::vector<InstanciationEntry> mEntries;
-
-public:
- Level();
- ~Level();
-
- void Instanciate(GameObject* relRoot) const;
-
- LevelManager* GetLinkedLevelManager() const { return mMan; }
- const Uid& GetUid() const { return mUid; }
-
- // Editor stuff
- void ShowInstanciationEntries(IEditor& editor);
-};
-
-class LevelManager {
-public:
- static inline LevelManager* instance = nullptr;
-
-public: // NOTE: public for the editor; actual game components should not modify the map using this
- // TODO maybe cut this struct to only the first RcPtr<Level> field in release mode?
- struct LoadableObject {
- RcPtr<Level> level; // TODO make weak pointer
- std::filesystem::path filePath;
- // NOTE: these fields are only loaded in dev mode
- std::string name;
- std::string description;
-
- // Editor book keeping fields
- bool edited = false;
- };
- // We want pointer stability here for the editor (inspector object)
- robin_hood::unordered_node_map<Uid, LoadableObject> mObjByUid;
-
-public:
- void DiscoverFilesDesignatedLocation();
- void DiscoverFiles(const std::filesystem::path& dir);
-
- Level* FindLevel(const Uid& uid) const;
- /// Get or load the given level
- Level* LoadLevel(const Uid& uid);
- /// Send the given level to be loaded on another thread
- void PrepareLevel(const Uid& uid);
-
- /// Create and add a new level object with the given uid.
- /// Should only be used by the editor.
- LoadableObject& AddLevel(const Uid& uid);
- /// Should only be used by the editor.
- void SaveLevel(const Uid& uid) const;
- /// Should only be used by the editor.
- void SaveLevel(const Uid& uid, const std::filesystem::path& path) const;
-
-private:
- void SaveLevelImpl(const LoadableObject& obj, const std::filesystem::path& path) const;
-};
-
-class LevelWrapperObject : public GameObject {
- BRUSSEL_CLASS()
-
-private:
- RcPtr<Level> mLevel;
-
-public:
- LevelWrapperObject(GameWorld* world);
- ~LevelWrapperObject() override;
-
- Level* GetBoundLevel() const;
- void SetBoundLevel(Level* level);
-};