diff --git a/Escape-the-Dawn/Escape-the-Dawn.vcxproj b/Escape-the-Dawn/Escape-the-Dawn.vcxproj index 8a6c3db..cb14255 100644 --- a/Escape-the-Dawn/Escape-the-Dawn.vcxproj +++ b/Escape-the-Dawn/Escape-the-Dawn.vcxproj @@ -166,6 +166,7 @@ + diff --git a/Escape-the-Dawn/Escape-the-Dawn.vcxproj.filters b/Escape-the-Dawn/Escape-the-Dawn.vcxproj.filters index da3ea10..94202f3 100644 --- a/Escape-the-Dawn/Escape-the-Dawn.vcxproj.filters +++ b/Escape-the-Dawn/Escape-the-Dawn.vcxproj.filters @@ -176,6 +176,9 @@ Shaders + + Shaders + diff --git a/Escape-the-Dawn/GameWorld.cpp b/Escape-the-Dawn/GameWorld.cpp index 82f5a5d..8c4fb70 100644 --- a/Escape-the-Dawn/GameWorld.cpp +++ b/Escape-the-Dawn/GameWorld.cpp @@ -84,15 +84,18 @@ void GameWorld::Initialize() model->ModelFile = "Models/plane.obj"; // Player - ent = CreateEntity(); - transform = AddComponent(ent, "Transform"); - transform->Position = glm::vec3(0.f, 0.f, 0.f); - model = AddComponent(ent, "Model"); + m_Player = CreateEntity(); + transform = AddComponent(m_Player, "Transform"); + transform->Position = glm::vec3(0.f, 4.f, 0.f); + model = AddComponent(m_Player, "Model"); model->ModelFile = "Models/ship.obj"; + auto bounds = AddComponent(m_Player, "Bounds"); + bounds->Origin = glm::vec3(0.f); + bounds->VolumeVector = glm::vec3(1.0f, 2.0f, 3.0f); ent = CreateEntity(); transform = AddComponent(ent, "Transform"); - transform->Position = glm::vec3(10.f, 0.f, 0.f); + transform->Position = glm::vec3(10.f, 4.f, 0.f); model = AddComponent(ent, "Model"); model->ModelFile = "Models/ship.obj"; } @@ -100,6 +103,9 @@ void GameWorld::Initialize() void GameWorld::Update(double dt) { World::Update(dt); + + auto transform = GetComponent(m_Player, "Transform"); + transform->Orientation = transform->Orientation * glm::angleAxis(dt, glm::vec3(0, 0, 1)); } void GameWorld::RegisterComponents() diff --git a/Escape-the-Dawn/GameWorld.cpp.orig b/Escape-the-Dawn/GameWorld.cpp.orig new file mode 100644 index 0000000..3cda4eb --- /dev/null +++ b/Escape-the-Dawn/GameWorld.cpp.orig @@ -0,0 +1,146 @@ +#include "GameWorld.h" + + +void GameWorld::Initialize() +{ + World::Initialize(); + + AddSystem("LevelGenerationSystem"); + AddSystem("InputSystem"); + //AddSystem("CollisionSystem"); + //AddSystem("ParticleSystem"); + AddSystem("PlayerSystem"); + AddSystem("SoundSystem"); + AddSystem("RenderSystem"); + + std::shared_ptr transform; + std::shared_ptr model; + std::shared_ptr pointLight; + std::shared_ptr camera; + EntityID ent; + + // Camera + ent = CreateEntity(); + SetProperty(ent, "Name", std::string("Camera")); + transform = AddComponent(ent, "Transform"); + AddComponent(ent, "Input"); + transform->Position = glm::vec3(0.f, 2.f, 10.f); + camera = AddComponent(ent, "Camera"); + camera->FOV = 45.f; + camera->FarClip = 1000.f; + camera->NearClip = 0.01f; + transform->Orientation = glm::angleAxis(glm::radians(25.0f),glm::vec3(1,0,0)); + + // Fucking lights + ent = CreateEntity(); + transform = AddComponent(ent, "Transform"); + transform->Position = glm::vec3(0.f, 4.f, 0.f); + transform->Position = glm::vec3(10.f, 2.f, 5.f); + pointLight = AddComponent(ent, "PointLight"); + pointLight->Specular = glm::vec3(1.0, 1.0, 1.0); + pointLight->Diffuse = glm::vec3(1.0, 1.0, 1.0); + pointLight->Diffuse = glm::vec3(1.0, 1.0, 5.0); + pointLight->constantAttenuation = 0.f; + pointLight->linearAttenuation = 1.f; + pointLight->quadraticAttenuation = 0.f; + pointLight->spotExponent = 0.0f; + model = AddComponent(ent, "Model"); + model->ModelFile = "Models/sphere.obj"; + ent = CreateEntity(); + transform = AddComponent(ent, "Transform"); + transform->Position = glm::vec3(10.f, 4.f, 0.f); + transform->Position = glm::vec3(0.f, 2.f, 5.f); + pointLight = AddComponent(ent, "PointLight"); + pointLight->Specular = glm::vec3(1.0, 1.0, 1.0); + pointLight->Diffuse = glm::vec3(1.0, 1.0, 1.0); + pointLight->Specular = glm::vec3(3.0, 3.0, 3.0); + pointLight->Diffuse = glm::vec3(3.0, 0.0, 0.0); + pointLight->constantAttenuation = 0.f; + pointLight->linearAttenuation = 1.f; + pointLight->quadraticAttenuation = 0.f; + pointLight->spotExponent = 0.0f; + model = AddComponent(ent, "Model"); + model->ModelFile = "Models/sphere.obj"; + ent = CreateEntity(); + transform = AddComponent(ent, "Transform"); + transform->Position = glm::vec3(0.f, -4.f, 0.f); + transform->Position = glm::vec3(-10.f, 2.f, 5.f); + pointLight = AddComponent(ent, "PointLight"); + pointLight->Specular = glm::vec3(1.0, 1.0, 1.0); + pointLight->Diffuse = glm::vec3(1.0, 1.0, 1.0); + pointLight->Diffuse = glm::vec3(0.0, 3.0, 0.0); + pointLight->constantAttenuation = 0.f; + pointLight->linearAttenuation = 1.f; + pointLight->quadraticAttenuation = 0.f; + pointLight->spotExponent = 0.0f; + model = AddComponent(ent, "Model"); + model->ModelFile = "Models/sphere.obj"; + + //ground + ent = CreateEntity(); + transform = AddComponent(ent, "Transform"); + transform->Position = glm::vec3(0.f, 0.f, 0.f); + model = AddComponent(ent, "Model"); + model->ModelFile = "Models/plane.obj"; + + // Player +<<<<<<< HEAD + ent = CreateEntity(); + transform = AddComponent(ent, "Transform"); + transform->Position = glm::vec3(0.f, 0.f, 0.f); + model = AddComponent(ent, "Model"); + model->ModelFile = "Models/ship.obj"; +======= + m_Player = CreateEntity(); + transform = AddComponent(m_Player, "Transform"); + transform->Position = glm::vec3(0.f, 4.f, 0.f); + model = AddComponent(m_Player, "Model"); + model->ModelFile = "ship.obj"; + auto bounds = AddComponent(m_Player, "Bounds"); + bounds->Origin = glm::vec3(0.f); + bounds->VolumeVector = glm::vec3(1.0f, 2.0f, 3.0f); +>>>>>>> 21b2e3bdc15ac8b21f027a7f531574f46187ae80 + + ent = CreateEntity(); + transform = AddComponent(ent, "Transform"); + transform->Position = glm::vec3(10.f, 4.f, 0.f); + model = AddComponent(ent, "Model"); + model->ModelFile = "Models/ship.obj"; +} + +void GameWorld::Update(double dt) +{ + World::Update(dt); + + auto transform = GetComponent(m_Player, "Transform"); + transform->Orientation = transform->Orientation * glm::angleAxis(dt, glm::vec3(0, 0, 1)); +} + +void GameWorld::RegisterComponents() +{ + m_ComponentFactory.Register("Bounds", []() { return new Components::Bounds(); }); + m_ComponentFactory.Register("Camera", []() { return new Components::Camera(); }); + m_ComponentFactory.Register("Collision", []() { return new Components::Collision(); }); + m_ComponentFactory.Register("DirectionalLight", []() { return new Components::DirectionalLight(); }); + m_ComponentFactory.Register("Input", []() { return new Components::Input(); }); + m_ComponentFactory.Register("Model", []() { return new Components::Model(); }); + m_ComponentFactory.Register("ParticleEmitter", []() { return new Components::ParticleEmitter(); }); + m_ComponentFactory.Register("PointLight", []() { return new Components::PointLight(); }); + m_ComponentFactory.Register("PowerUp", []() { return new Components::PowerUp(); }); + m_ComponentFactory.Register("SoundEmitter", []() { return new Components::SoundEmitter(); }); + m_ComponentFactory.Register("Sprite", []() { return new Components::Sprite(); }); + m_ComponentFactory.Register("Stat", []() { return new Components::Stat(); }); + m_ComponentFactory.Register("Template", []() { return new Components::Template(); }); + m_ComponentFactory.Register("Transform", []() { return new Components::Transform(); }); +} + +void GameWorld::RegisterSystems() +{ + m_SystemFactory.Register("LevelGenerationSystem", [this]() { return new Systems::LevelGenerationSystem(this); }); + m_SystemFactory.Register("InputSystem", [this]() { return new Systems::InputSystem(this, m_Renderer); }); + //m_SystemFactory.Register("CollisionSystem", [this]() { return new Systems::CollisionSystem(this); }); + //m_SystemFactory.Register("ParticleSystem", [this]() { return new Systems::ParticleSystem(this); }); + m_SystemFactory.Register("PlayerSystem", [this]() { return new Systems::PlayerSystem(this); }); + m_SystemFactory.Register("SoundSystem", [this]() { return new Systems::SoundSystem(this); }); + m_SystemFactory.Register("RenderSystem", [this]() { return new Systems::RenderSystem(this, m_Renderer); }); +} \ No newline at end of file diff --git a/Escape-the-Dawn/GameWorld.h b/Escape-the-Dawn/GameWorld.h index 49ff95a..d797ca9 100644 --- a/Escape-the-Dawn/GameWorld.h +++ b/Escape-the-Dawn/GameWorld.h @@ -42,6 +42,8 @@ public: private: std::shared_ptr m_Renderer; + + EntityID m_Player; }; #endif // GameWorld_h__ diff --git a/Escape-the-Dawn/Models/obstacle_mountain_3.mtl b/Escape-the-Dawn/Models/obstacle_mountain_3.mtl deleted file mode 100644 index 5367bd3..0000000 --- a/Escape-the-Dawn/Models/obstacle_mountain_3.mtl +++ /dev/null @@ -1,12 +0,0 @@ -# Blender MTL File: 'obstaclesandstuff.blend' -# Material Count: 1 - -newmtl Material -Ns 96.078431 -Ka 0.000000 0.000000 0.000000 -Kd 0.559600 0.559600 0.559600 -Ks 0.500000 0.500000 0.500000 -Ni 1.000000 -d 1.000000 -illum 2 -map_Kd ObstacleTexture.png diff --git a/Escape-the-Dawn/Models/obstacle_mountain_4.mtl b/Escape-the-Dawn/Models/obstacle_mountain_4.mtl deleted file mode 100644 index 5367bd3..0000000 --- a/Escape-the-Dawn/Models/obstacle_mountain_4.mtl +++ /dev/null @@ -1,12 +0,0 @@ -# Blender MTL File: 'obstaclesandstuff.blend' -# Material Count: 1 - -newmtl Material -Ns 96.078431 -Ka 0.000000 0.000000 0.000000 -Kd 0.559600 0.559600 0.559600 -Ks 0.500000 0.500000 0.500000 -Ni 1.000000 -d 1.000000 -illum 2 -map_Kd ObstacleTexture.png diff --git a/Escape-the-Dawn/Renderer.cpp b/Escape-the-Dawn/Renderer.cpp index bffbaae..1c5aa20 100644 --- a/Escape-the-Dawn/Renderer.cpp +++ b/Escape-the-Dawn/Renderer.cpp @@ -7,7 +7,7 @@ Renderer::Renderer() m_DrawWireframe = false; m_SunPosition = glm::vec3(0, 10, 10); - m_SunTarget = glm::vec3(0); + m_SunTarget = glm::vec3(0, 0, 0); m_SunProjection = glm::ortho(-20, 20, -20, 20, -10, 20); } @@ -85,6 +85,12 @@ void Renderer::LoadContent() m_ShaderProgramShadowsDrawDepth.Compile(); m_ShaderProgramShadowsDrawDepth.Link(); + m_ShaderProgramDebugAABB.AddShader(standardVS); + m_ShaderProgramDebugAABB.AddShader(std::shared_ptr(new FragmentShader("Shaders/AABB.frag.glsl"))); + m_ShaderProgramDebugAABB.Compile(); + m_ShaderProgramDebugAABB.Link(); + + m_DebugAABB = CreateAABB(); m_ScreenQuad = CreateQuad(); CreateShadowMap(2048*2); } @@ -116,9 +122,25 @@ void Renderer::CreateShadowMap(int resolution) } void Renderer::Draw(double dt) { + glDisable(GL_BLEND); + DrawShadowMap(); DrawScene(); +#ifdef DEBUG + glEnable(GL_BLEND); + glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ZERO); + m_ShaderProgramDebugAABB.Bind(); + for (auto aabbModelMatrix : AABBsToRender) { + glm::mat4 cameraMatrix = m_Camera->ProjectionMatrix() * m_Camera->ViewMatrix(); + glm::mat4 MVP = cameraMatrix * aabbModelMatrix; + glUniformMatrix4fv(glGetUniformLocation(m_ShaderProgramDebugAABB.GetHandle(), "MVP"), 1, GL_FALSE, glm::value_ptr(MVP)); + glBindVertexArray(m_DebugAABB); + glDrawArrays(GL_LINES, 0, 24); + } + AABBsToRender.clear(); +#endif + DrawDebugShadowMap(); ModelsToRender.clear(); @@ -336,4 +358,63 @@ GLuint Renderer::CreateQuad() glBindBuffer(GL_ARRAY_BUFFER, 0); return vao; -} \ No newline at end of file +} + +GLuint Renderer::CreateAABB() +{ + float vertices[] = { + // Bottom + -1.0f, -1.0f, 1.0f, // 0 + 1.0f, -1.0f, 1.0f, // 1 + 1.0f, -1.0f, 1.0f, // 1 + 1.0f, -1.0f, -1.0f, // 2 + 1.0f, -1.0f, -1.0f, // 2 + -1.0f, -1.0f, -1.0f, // 3 + -1.0f, -1.0f, -1.0f, // 3 + -1.0f, -1.0f, 1.0f, // 0 + + // Top + -1.0f, 1.0f, 1.0f, // 4 + 1.0f, 1.0f, 1.0f, // 5 + 1.0f, 1.0f, 1.0f, // 5 + 1.0f, 1.0f, -1.0f, // 6 + 1.0f, 1.0f, -1.0f, // 6 + -1.0f, 1.0f, -1.0f, // 7 + -1.0f, 1.0f, -1.0f, // 7 + -1.0f, 1.0f, 1.0f, // 4 + + // Connectors + -1.0f, -1.0f, 1.0f, // 0 + -1.0f, 1.0f, 1.0f, // 4 + 1.0f, -1.0f, 1.0f, // 1 + 1.0f, 1.0f, 1.0f, // 5 + 1.0f, -1.0f, -1.0f, // 2 + 1.0f, 1.0f, -1.0f, // 6 + -1.0f, -1.0f, -1.0f, // 3 + -1.0f, 1.0f, -1.0f, // 7 + }; + + GLuint vbo, vao; + glGenBuffers(1, &vbo); + glBindBuffer(GL_ARRAY_BUFFER, vbo); + glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); + + glGenVertexArrays(1, &vao); + glBindVertexArray(vao); + glBindBuffer(GL_ARRAY_BUFFER, vbo); + glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0); + glEnableVertexAttribArray(0); + + glBindVertexArray(0); + glBindBuffer(GL_ARRAY_BUFFER, 0); + + return vao; +} + +void Renderer::AddAABBToDraw(glm::vec3 origin, glm::vec3 volumeVector) +{ + glm::mat4 model; + model *= glm::translate(origin); + model *= glm::scale(volumeVector); + AABBsToRender.push_back(model); +} diff --git a/Escape-the-Dawn/Renderer.h b/Escape-the-Dawn/Renderer.h index 7fcca0d..7ec2264 100644 --- a/Escape-the-Dawn/Renderer.h +++ b/Escape-the-Dawn/Renderer.h @@ -46,6 +46,7 @@ public: std::vector Light_linearAttenuation; std::vector Light_quadraticAttenuation; std::vector Light_spotExponent; + std::vector AABBsToRender; Renderer(); @@ -64,6 +65,7 @@ public: float _quadraticAttenuation, float _spotExponent ); + void AddAABBToDraw(glm::vec3 origin, glm::vec3 volumeVector); void LoadContent(); @@ -87,6 +89,7 @@ private: glm::vec3 m_SunTarget; glm::mat4 m_SunProjection; + GLuint m_DebugAABB; GLuint m_ScreenQuad; GLuint m_ShadowFrameBuffer; GLuint m_ShadowDepthTexture; @@ -97,6 +100,7 @@ private: ShaderProgram m_ShaderProgramNormals; ShaderProgram m_ShaderProgramShadows; ShaderProgram m_ShaderProgramShadowsDrawDepth; + ShaderProgram m_ShaderProgramDebugAABB; void DrawScene(); void DrawModels(ShaderProgram &shader); @@ -104,6 +108,7 @@ private: void CreateShadowMap(int resolution); GLuint CreateQuad(); void DrawDebugShadowMap(); + GLuint CreateAABB(); }; diff --git a/Escape-the-Dawn/Shaders/AABB.frag.glsl b/Escape-the-Dawn/Shaders/AABB.frag.glsl new file mode 100644 index 0000000..00cb7ab --- /dev/null +++ b/Escape-the-Dawn/Shaders/AABB.frag.glsl @@ -0,0 +1,15 @@ +#version 430 + +in VertexData { + vec3 Position; + vec3 Normal; + vec2 TextureCoord; + vec3 ShadowCoord; +} Input; + +out vec4 FragmentColor; + +void main() { + //FragmentColor = vec4(1.0 - gl_Color.r, 1.0 - gl_Color.g, 1.0 - gl_Color.b, 0.0); + FragmentColor = vec4(1.0, 1.0, 1.0, 1.0); +} \ No newline at end of file diff --git a/Escape-the-Dawn/Sounds/Zelda_Gerudo.wav b/Escape-the-Dawn/Sounds/Zelda_Gerudo.wav new file mode 100644 index 0000000..75ea48b Binary files /dev/null and b/Escape-the-Dawn/Sounds/Zelda_Gerudo.wav differ diff --git a/Escape-the-Dawn/Systems/LevelGenerationSystem.cpp b/Escape-the-Dawn/Systems/LevelGenerationSystem.cpp index 75ea71c..d5e71a9 100644 --- a/Escape-the-Dawn/Systems/LevelGenerationSystem.cpp +++ b/Escape-the-Dawn/Systems/LevelGenerationSystem.cpp @@ -4,7 +4,7 @@ Systems::LevelGenerationSystem::LevelGenerationSystem( World* world ) : System(world) { elapsedtime = 0; - startyz = glm::vec2(0, -200); + startyz = glm::vec2(0, -1000); } void Systems::LevelGenerationSystem::SpawnObstacle() @@ -12,7 +12,7 @@ void Systems::LevelGenerationSystem::SpawnObstacle() - typeRandom = 0 + (rand() % 5); + typeRandom = 0 + (rand() % 3); EntityID ent; @@ -25,45 +25,28 @@ void Systems::LevelGenerationSystem::SpawnObstacle() collision = m_World->AddComponent(ent, "Collision"); model = m_World->AddComponent(ent, "Model"); + positionRandom = -500 + (rand() % 1000); + switch (typeRandom) { case 0: - - positionRandom = -500 + (rand() % 1000); transform->Position = glm::vec3( positionRandom, startyz); // fix position - bounds->VolumeVector = glm::vec3(4, 4, 4); + bounds->VolumeVector = glm::vec3(9, 12, 7); + bounds->Origin = glm::vec3(1,11,-1); model->ModelFile = "Models/obstacle_mountain_1.obj"; break; case 1: - - positionRandom = -100 + (rand() % 200); transform->Position = glm::vec3( positionRandom, startyz); // fix position - bounds->VolumeVector = glm::vec3(4, 4, 4); + bounds->VolumeVector = glm::vec3(3.5f, 7.5f, 3.5f); + bounds->Origin = glm::vec3(0,7.5f,0); model->ModelFile = "Models/obstacle_mountain_2.obj"; break; case 2: - - positionRandom = -100 + (rand() % 200); transform->Position = glm::vec3( positionRandom, startyz); // fix position - bounds->VolumeVector = glm::vec3(4, 4, 4); - model->ModelFile = "Models/obstacle_mountain_3.obj"; - - break; - case 3: - - positionRandom = -100 + (rand() % 200); - transform->Position = glm::vec3( positionRandom, startyz); // fix position - bounds->VolumeVector = glm::vec3(4, 4, 4); - model->ModelFile = "Models/obstacle_mountain_4.obj"; - - break; - case 4: - - positionRandom = -100 + (rand() % 200); - transform->Position = glm::vec3( positionRandom, startyz); // fix position - bounds->VolumeVector = glm::vec3(4, 4, 4); + bounds->VolumeVector = glm::vec3(1, 1, 1); + bounds->Origin = glm::vec3(0,1,0); model->ModelFile = "Models/obstacle_cube_1.obj"; break; @@ -78,16 +61,32 @@ void Systems::LevelGenerationSystem::Update( double dt ) elapsedtime += dt; - if(elapsedtime > 1.0){ + if(elapsedtime > 0.1){ SpawnObstacle(); elapsedtime = 0; } + std::vector removethis; + for(auto ent : obstacles) { auto transformComponent = m_World->GetComponent(ent, "Transform"); - transformComponent->Position.z += 15.f * dt; + transformComponent->Position.z += 100.f * dt; + + if(transformComponent->Position.z > 100) + { + removethis.push_back(ent); + + } } + + for(auto ent : removethis) + { + m_World->RemoveEntity(ent); + obstacles.remove(ent); + } + removethis.clear(); + } diff --git a/Escape-the-Dawn/Systems/LevelGenerationSystem.h b/Escape-the-Dawn/Systems/LevelGenerationSystem.h index 65ecfe7..5bf91d6 100644 --- a/Escape-the-Dawn/Systems/LevelGenerationSystem.h +++ b/Escape-the-Dawn/Systems/LevelGenerationSystem.h @@ -9,7 +9,6 @@ #include "Components/Model.h" - namespace Systems { class LevelGenerationSystem : public System @@ -28,7 +27,8 @@ namespace Systems glm::vec2 startyz; double elapsedtime; - std::vector obstacles; + std::list obstacles; + std::shared_ptr transform; std::shared_ptr bounds; diff --git a/Escape-the-Dawn/Systems/PlayerSystem.cpp b/Escape-the-Dawn/Systems/PlayerSystem.cpp index aeb7ca2..eb0d928 100644 --- a/Escape-the-Dawn/Systems/PlayerSystem.cpp +++ b/Escape-the-Dawn/Systems/PlayerSystem.cpp @@ -23,7 +23,7 @@ void Systems::PlayerSystem::UpdateEntity(double dt, EntityID entity, EntityID pa glm::vec3 Camera_Right = glm::vec3(glm::vec4(1, 0, 0, 0) * transform->Orientation); glm::vec3 Camera_Forward = glm::vec3(glm::vec4(0, 0, 1, 0) * transform->Orientation); - float speed = 8.0f; + float speed = 15.0f; if(input->KeyState[GLFW_KEY_LEFT_SHIFT]) { speed *= 2.0f; } diff --git a/Escape-the-Dawn/Systems/RenderSystem.cpp b/Escape-the-Dawn/Systems/RenderSystem.cpp index 8a7681a..1c3fb20 100644 --- a/Escape-the-Dawn/Systems/RenderSystem.cpp +++ b/Escape-the-Dawn/Systems/RenderSystem.cpp @@ -27,10 +27,19 @@ void Systems::RenderSystem::UpdateEntity( double dt, EntityID entity, EntityID p auto model = m_CachedModels[modelComponent->ModelFile]; m_Renderer->AddModelToDraw(model, transformComponent->Position, transformComponent->Orientation); } + + // Debug draw bounds +#ifdef DEBUG + auto bounds = m_World->GetComponent(entity, "Bounds"); + if (bounds != nullptr) { + glm::vec3 origin = transformComponent->Position + bounds->Origin; + m_Renderer->AddAABBToDraw(origin, bounds->VolumeVector); + } +#endif + auto pointLightComponent = m_World->GetComponent(entity, "PointLight"); if (pointLightComponent != nullptr) { - m_Renderer->AddPointLightToDraw( transformComponent->Position, pointLightComponent->Specular, diff --git a/Escape-the-Dawn/Systems/RenderSystem.h b/Escape-the-Dawn/Systems/RenderSystem.h index fbec504..85ac40e 100644 --- a/Escape-the-Dawn/Systems/RenderSystem.h +++ b/Escape-the-Dawn/Systems/RenderSystem.h @@ -9,6 +9,7 @@ #include "Components/Model.h" #include "Components/Transform.h" #include "Components/Camera.h" +#include "Components/Bounds.h" #include "Renderer.h" namespace Systems diff --git a/Escape-the-Dawn/World.cpp b/Escape-the-Dawn/World.cpp index cda58ae..4c03697 100644 --- a/Escape-the-Dawn/World.cpp +++ b/Escape-the-Dawn/World.cpp @@ -61,6 +61,12 @@ bool World::ValidEntity(EntityID entity) void World::RemoveEntity(EntityID entity) { m_EntityParents.erase(entity); + m_EntityComponents.erase(entity); + for (auto pair : m_EntityComponents[entity]) { + auto type = pair.first; + auto component = pair.second; + m_ComponentsOfType[type].erase(std::remove(m_ComponentsOfType[type].begin(), m_ComponentsOfType[type].end(), component)); + } RecycleEntityID(entity); }