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 87683ae..9a1d074 100644 --- a/Escape-the-Dawn/GameWorld.cpp +++ b/Escape-the-Dawn/GameWorld.cpp @@ -91,10 +91,13 @@ 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 = "ship.obj"; + AddComponent(m_Player, "Input"); collision = AddComponent(m_Player, "Collision"); collision->Phantom = false; bounds = AddComponent(m_Player, "Bounds"); @@ -120,9 +123,6 @@ void GameWorld::Update(double dt) World::Update(dt); if(GetSystem("CollisionSystem")->Intersects(m_Player, entcamera)) assert(false); - - 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/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 aeb7ca2..361f33a 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 = 8.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