File Scene.h
Go to the documentation of this file
#pragma once
#include "Mesh.h"
#include "Camera.h"
#include "Light.h"
#include "PolygonLight.h"
#include "Environment.h"
#include "DebugLine.h"
#include "DebugPoints.h"
#include "PostProcessing.h"
#include "SDFField.h"
class Scene : public UID
{
public:
Scene();
~Scene();
public:
template<class Object>
using Resource = std::shared_ptr<Object>;
template<class Object>
using ResPool = std::unordered_map<int, Resource<Object>>;
template<class Object>
using ResList = std::vector<Resource<Object>>;
public:
enum SceneModifStatus
{
NoChanges = 0,
ObjectTransChanged = 1 << 0,
LightChanged = 1 << 1,
CameraChanged = 1 << 2,
ShaderChanged = 1 << 3,
MaterialChanged = 1 << 4,
SceneChanged = ObjectTransChanged | LightChanged | CameraChanged | ShaderChanged | MaterialChanged,
SDFChanged = 1 << 8,
};
void UpdateSceneStatus(int tar, bool value);
void SetSceneStatus(int tar, bool value);
bool CheckStatus(SceneModifStatus tar);
void _debugStatus();
private:
SceneModifStatus status = SceneModifStatus::SceneChanged;
public:
ResPool<ObjectID> obj_list;
ResPool<Camera> cam_list;
ResPool<Mesh> mesh_list;
ResPool<Light> light_list;
ResPool<PolygonLight> poly_light_list;
ResPool<Environment> envir_list;
ResPool<Sprite> sprite_list;
ResPool<DebugLine> dLine_list;
ResPool<DebugPoints> dPoints_list;
ResList<PostProcessing> pps_list;
Resource<SDFField> sdf_field;
public:
void UseCamera(Resource<Camera> camera);
void UseMesh(Resource<Mesh> mesh);
void UseLight(Resource<Light> light);
void UsePolygonLight(Resource<PolygonLight> polyLight);
void UseEnvironment(Resource<Environment> envir);
void UseDebugLine(Resource<DebugLine> dline);
void UseDebugPoints(Resource<DebugPoints> dpoints);
void UsePostProcessing(Resource<PostProcessing> pps);
void UseSDF(Resource<SDFField> sdf);
ObjectID* GetObjectID(int _id);
Camera* GetActiveCamera();
Environment* GetActiveEnvironment();
PostProcessing* GetPPS(int _tar);
public:
void UpdateObjTransforms();
void ResetStatus();
};