diff --git a/Escape-the-Dawn/Components/Transform.h b/Escape-the-Dawn/Components/Transform.h index 9f2df7a..5d20a67 100644 --- a/Escape-the-Dawn/Components/Transform.h +++ b/Escape-the-Dawn/Components/Transform.h @@ -9,9 +9,13 @@ namespace Components struct Transform : Component { + Transform() + : Scale(glm::vec3(1.f)) { } + glm::vec3 Position; glm::quat Orientation; glm::vec3 Velocity; + glm::vec3 Scale; }; } diff --git a/Escape-the-Dawn/GameWorld.cpp b/Escape-the-Dawn/GameWorld.cpp index 8c4fb70..7dda8b8 100644 --- a/Escape-the-Dawn/GameWorld.cpp +++ b/Escape-the-Dawn/GameWorld.cpp @@ -85,12 +85,14 @@ void GameWorld::Initialize() // Player m_Player = CreateEntity(); + SetProperty(m_Player, "Name", std::string("PlayerShip")); transform = AddComponent(m_Player, "Transform"); transform->Position = glm::vec3(0.f, 4.f, 0.f); + transform->Scale = glm::vec3(2.0f); model = AddComponent(m_Player, "Model"); model->ModelFile = "Models/ship.obj"; + AddComponent(m_Player, "Input"); auto bounds = AddComponent(m_Player, "Bounds"); - bounds->Origin = glm::vec3(0.f); bounds->VolumeVector = glm::vec3(1.0f, 2.0f, 3.0f); ent = CreateEntity(); @@ -103,9 +105,6 @@ 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 deleted file mode 100644 index 3cda4eb..0000000 --- a/Escape-the-Dawn/GameWorld.cpp.orig +++ /dev/null @@ -1,146 +0,0 @@ -#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/Renderer.cpp b/Escape-the-Dawn/Renderer.cpp index 1c5aa20..0948515 100644 --- a/Escape-the-Dawn/Renderer.cpp +++ b/Escape-the-Dawn/Renderer.cpp @@ -285,12 +285,11 @@ void Renderer::AddTextToDraw() //Add to draw shit vector } -void Renderer::AddModelToDraw(std::shared_ptr _model, glm::vec3 _position, glm::quat _orientation) +void Renderer::AddModelToDraw(std::shared_ptr model, glm::vec3 position, glm::quat orientation, glm::vec3 scale) { - glm::mat4 RotationMatrix = glm::toMat4(_orientation); - glm::mat4 ModelMatrix = glm::translate(glm::mat4(), _position) * RotationMatrix ; + glm::mat4 ModelMatrix = glm::translate(glm::mat4(), position) * glm::toMat4(orientation) * glm::scale(scale); // You can now use ModelMatrix to build the MVP matrix - ModelsToRender.push_back(new ModelData(_model, ModelMatrix)); + ModelsToRender.push_back(new ModelData(model, ModelMatrix)); } void Renderer::AddPointLightToDraw( diff --git a/Escape-the-Dawn/Renderer.h b/Escape-the-Dawn/Renderer.h index 7ec2264..1f4ef77 100644 --- a/Escape-the-Dawn/Renderer.h +++ b/Escape-the-Dawn/Renderer.h @@ -54,7 +54,7 @@ public: void Draw(double dt); void DrawText(); - void AddModelToDraw(std::shared_ptr model, glm::vec3 position, glm::quat orientation); + void AddModelToDraw(std::shared_ptr model, glm::vec3 position, glm::quat orientation, glm::vec3 scale); void AddTextToDraw(); void AddPointLightToDraw( glm::vec3 _position, diff --git a/Escape-the-Dawn/Systems/PlayerSystem.cpp b/Escape-the-Dawn/Systems/PlayerSystem.cpp index eb0d928..a37dacf 100644 --- a/Escape-the-Dawn/Systems/PlayerSystem.cpp +++ b/Escape-the-Dawn/Systems/PlayerSystem.cpp @@ -1,11 +1,12 @@ #include "PlayerSystem.h" #include "World.h" - +Systems::PlayerSystem::PlayerSystem( World* world ) : System(world) +{ +} void Systems::PlayerSystem::Update(double dt) { - } void Systems::PlayerSystem::UpdateEntity(double dt, EntityID entity, EntityID parent) @@ -17,23 +18,25 @@ void Systems::PlayerSystem::UpdateEntity(double dt, EntityID entity, EntityID pa if (input == nullptr) return; + float speed = 10.0f; + auto name = m_World->GetProperty(entity, "Name"); if (name == "Camera") { - if (input->MouseState[GLFW_MOUSE_BUTTON_LEFT]) { + 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 = 15.0f; if(input->KeyState[GLFW_KEY_LEFT_SHIFT]) { - speed *= 2.0f; + speed *= 4.0f; } if(input->KeyState[GLFW_KEY_LEFT_ALT]) { - speed /= 2.0f; + speed /= 4.0f; } - if(input->KeyState[GLFW_KEY_A]) { + if(input->KeyState[GLFW_KEY_A] || input->KeyState[GLFW_KEY_LEFT]) { transform->Position -= Camera_Right * (float)dt * speed; } - if(input->KeyState[GLFW_KEY_D]) { + if(input->KeyState[GLFW_KEY_D] || input->KeyState[GLFW_KEY_RIGHT]) { transform->Position += Camera_Right * (float)dt * speed; } if(input->KeyState[GLFW_KEY_W]) { @@ -48,7 +51,7 @@ void Systems::PlayerSystem::UpdateEntity(double dt, EntityID entity, EntityID pa if(input->KeyState[GLFW_KEY_LEFT_CONTROL]) { transform->Position -= glm::vec3(0, 1, 0) * (float)dt * speed; } - + if (input->MouseState[GLFW_MOUSE_BUTTON_LEFT]) { // TOUCHING THIS CODE MIGHT COUSE THE UNIVERSE TO IMPLODE, ALSO DRAGONS //--------------------------------------------------------------------- transform->Orientation = glm::angleAxis(input->dY/300.f,glm::vec3(1,0,0)) * transform->Orientation; @@ -57,6 +60,43 @@ void Systems::PlayerSystem::UpdateEntity(double dt, EntityID entity, EntityID pa //--------------------------------------------------------------------- // TOUCHING THIS CODE MIGHT COUSE THE UNIVERSE TO IMPLODE, ALSO DRAGONS } - + } + + name = m_World->GetProperty(entity, "Name"); + if (name == "PlayerShip") + { + glm::vec3 Ship_Right = glm::vec3(glm::vec4(1, 0, 0, 0)); + glm::vec3 Ship_Forward = glm::vec3(glm::vec4(0, 0, 1, 0)); + + float TurnSpeed = 2.0f; + glm::vec3 Euler = glm::eulerAngles(transform->Orientation); + LOG_DEBUG("Euler: %f", Euler.z); + + if(input->KeyState[GLFW_KEY_LEFT]) { + transform->Position -= Ship_Right * (float)dt * speed; + + if(Euler.z < 25.f) + { + transform->Orientation = transform->Orientation * glm::angleAxis((float)dt * TurnSpeed,glm::vec3(0,0,1)); + } + } + else if(input->KeyState[GLFW_KEY_RIGHT]) { + transform->Position += Ship_Right * (float)dt * speed; + + if(Euler.z > -25.f) + { + transform->Orientation = transform->Orientation * glm::angleAxis((float)dt * TurnSpeed,glm::vec3(0,0,-1)); + } + } + else + { + if(Euler.z < 0.5f && Euler.z > -0.5f) + transform->Orientation = glm::angleAxis(0,glm::vec3(0,0,1)); + else if(Euler.z < 0.f) + transform->Orientation = transform->Orientation * glm::angleAxis((float)dt,glm::vec3(0,0,1)); + else if(Euler.z > 0.f) + transform->Orientation = transform->Orientation * glm::angleAxis((float)dt,glm::vec3(0,0,-1)); + } } } + diff --git a/Escape-the-Dawn/Systems/PlayerSystem.h b/Escape-the-Dawn/Systems/PlayerSystem.h index 8058956..6d995e0 100644 --- a/Escape-the-Dawn/Systems/PlayerSystem.h +++ b/Escape-the-Dawn/Systems/PlayerSystem.h @@ -14,8 +14,7 @@ namespace Systems class PlayerSystem : public System { public: - PlayerSystem(World* world) - : System(world) { } + PlayerSystem(World* world); void Update(double dt) override; void UpdateEntity(double dt, EntityID entity, EntityID parent) override; diff --git a/Escape-the-Dawn/Systems/RenderSystem.cpp b/Escape-the-Dawn/Systems/RenderSystem.cpp index 1c3fb20..c113486 100644 --- a/Escape-the-Dawn/Systems/RenderSystem.cpp +++ b/Escape-the-Dawn/Systems/RenderSystem.cpp @@ -25,7 +25,7 @@ void Systems::RenderSystem::UpdateEntity( double dt, EntityID entity, EntityID p } auto model = m_CachedModels[modelComponent->ModelFile]; - m_Renderer->AddModelToDraw(model, transformComponent->Position, transformComponent->Orientation); + m_Renderer->AddModelToDraw(model, transformComponent->Position, transformComponent->Orientation, transformComponent->Scale); } // Debug draw bounds @@ -33,7 +33,8 @@ void Systems::RenderSystem::UpdateEntity( double dt, EntityID entity, EntityID p auto bounds = m_World->GetComponent(entity, "Bounds"); if (bounds != nullptr) { glm::vec3 origin = transformComponent->Position + bounds->Origin; - m_Renderer->AddAABBToDraw(origin, bounds->VolumeVector); + glm::vec3 volumeVector = transformComponent->Scale * bounds->VolumeVector; + m_Renderer->AddAABBToDraw(origin, volumeVector); } #endif