#pragma once #include #include #include "Maths.h" #include "DataTypes.h" #include "Camera.h" namespace dae { //Forward Declarations class Timer; class Material; struct Plane; struct Sphere; struct Light; //Scene Base Class class Scene { public: Scene(); virtual ~Scene(); Scene(const Scene&) = delete; Scene(Scene&&) noexcept = delete; Scene& operator=(const Scene&) = delete; Scene& operator=(Scene&&) noexcept = delete; virtual void Initialize() = 0; virtual void Update(dae::Timer* pTimer) { m_Camera.Update(pTimer); } Camera& GetCamera() { return m_Camera; } void GetClosestHit(const Ray& ray, HitRecord& closestHit) const; bool DoesHit(const Ray& ray) const; const std::vector& GetPlaneGeometries() const { return m_PlaneGeometries; } const std::vector& GetSphereGeometries() const { return m_SphereGeometries; } const std::vector& GetLights() const { return m_Lights; } const std::vector GetMaterials() const { return m_Materials; } protected: std::string sceneName; std::vector m_PlaneGeometries{}; std::vector m_SphereGeometries{}; std::vector m_TriangleMeshGeometries{}; std::vector m_Lights{}; std::vector m_Materials{}; Camera m_Camera{}; Sphere* AddSphere(const Vector3& origin, float radius, unsigned char materialIndex = 0); Plane* AddPlane(const Vector3& origin, const Vector3& normal, unsigned char materialIndex = 0); TriangleMesh* AddTriangleMesh(TriangleCullMode cullMode, unsigned char materialIndex = 0); Light* AddPointLight(const Vector3& origin, float intensity, const ColorRGB& color); Light* AddDirectionalLight(const Vector3& direction, float intensity, const ColorRGB& color); unsigned char AddMaterial(Material* pMaterial); }; //+++++++++++++++++++++++++++++++++++++++++ //WEEK 1 Test Scene class Scene_W1 final : public Scene { public: Scene_W1() = default; ~Scene_W1() override = default; Scene_W1(const Scene_W1&) = delete; Scene_W1(Scene_W1&&) noexcept = delete; Scene_W1& operator=(const Scene_W1&) = delete; Scene_W1& operator=(Scene_W1&&) noexcept = delete; void Initialize() override; }; }