Program Listing for File scene.h¶
↰ Return to documentation for file (rootex/framework/scene.h
)
#pragma once
#include "common/common.h"
#include "entity.h"
#include "core/input/input_manager.h"
class Entity;
#define ROOT_SCENE_ID 1
struct SceneSettings
{
ResourceCollection preloads;
SceneID camera = ROOT_SCENE_ID;
SceneID listener = ROOT_SCENE_ID;
HashMap<String, InputScheme> inputSchemes;
String startScheme = {};
void drawCameraSceneSelectables(Scene* scene, SceneID& toSet);
void drawListenerSceneSelectables(Scene* scene, SceneID& toSet);
void drawInputScheme(InputDescription& floatInput);
void draw();
};
void to_json(JSON::json& j, const SceneSettings& s);
void from_json(const JSON::json& j, SceneSettings& s);
class Scene
{
public:
enum class ImportStyle
{
Local,
External
};
private:
bool m_IsScenePaused;
static Vector<Scene*> s_Scenes;
SceneID m_ID;
String m_Name;
String m_FullName;
ImportStyle m_ImportStyle;
String m_SceneFile;
SceneSettings m_Settings;
Entity m_Entity;
Scene* m_ParentScene = nullptr;
Vector<Ptr<Scene>> m_ChildrenScenes;
bool checkCycle(Scene* child);
public:
static void ResetNextID();
static Ptr<Scene> Create(const JSON::json& sceneData, const bool assignNewIDs);
static Ptr<Scene> CreateFromFile(const String& sceneFile);
static Ptr<Scene> CreateEmpty();
static Ptr<Scene> CreateEmptyAtPath(const String& sceneFile);
static Ptr<Scene> CreateRootScene();
static bool isReservedName(const String& sceneName);
static Vector<Scene*> FindScenesByName(const String& name);
static Scene* FindSceneByID(const SceneID& id);
static const Vector<Scene*>& FindAllScenes();
Scene(SceneID id, const String& name, const SceneSettings& settings, ImportStyle importStyle, const String& sceneFile);
~Scene();
Scene* findScene(SceneID scene);
void reimport();
void onLoad();
bool snatchChild(Scene* child);
bool addChild(Ptr<Scene>& child);
bool removeChild(Scene* toRemove);
void setName(const String& name);
JSON::json getJSON() const;
bool& getIsScenePaused() { return m_IsScenePaused; }
void setIsScenePaused(bool pause) { m_IsScenePaused = pause; }
Vector<Ptr<Scene>>& getChildren() { return m_ChildrenScenes; }
SceneID getID() const { return m_ID; }
ImportStyle getImportStyle() const { return m_ImportStyle; }
String getScenePath() const { return m_SceneFile; }
Scene* getParent() const { return m_ParentScene; }
Entity& getEntity() { return m_Entity; }
const String& getName() const { return m_Name; }
const String& getFullName() const { return m_FullName; }
void setFullName(String& name) { m_FullName = name; }
SceneSettings& getSettings() { return m_Settings; }
};