From cb16ecb5d62853264e30732bf3bc84ca1f2ce44d Mon Sep 17 00:00:00 2001 From: Tobias Dahl Date: Mon, 10 Mar 2014 01:51:00 +0100 Subject: [PATCH] WIP Camera Control --- Escape-the-Dawn/GameWorld.h | 11 ++--- Escape-the-Dawn/Systems/PlayerSystem.cpp | 52 ++++++++++++++++++++++++ Escape-the-Dawn/Systems/PlayerSystem.h | 30 ++++++++++++++ Escape-the-Dawn/Systems/SoundsSystem.cpp | 1 - Escape-the-Dawn/World.h | 5 +++ 5 files changed, 93 insertions(+), 6 deletions(-) diff --git a/Escape-the-Dawn/GameWorld.h b/Escape-the-Dawn/GameWorld.h index 8c10dcb..afe8dc8 100644 --- a/Escape-the-Dawn/GameWorld.h +++ b/Escape-the-Dawn/GameWorld.h @@ -56,7 +56,7 @@ void GameWorld::Initialize() AddSystem("InputSystem"); //AddSystem("CollisionSystem"); //AddSystem("ParticleSystem"); - //AddSystem("PlayerSystem"); + AddSystem("PlayerSystem"); //AddSystem("SoundSystem"); AddSystem("RenderSystem"); @@ -72,14 +72,15 @@ void GameWorld::Initialize() model->ModelFile = "ship.obj"; ent = CreateEntity(); - SetProperty(ent, "Name", "Camera"); + SetProperty(ent, "Name", std::string("Camera")); transform = AddComponent(ent, "Transform"); - transform->Position = glm::vec3(0.f, 0.f, 10.f); + 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)); } void GameWorld::RegisterSystems() @@ -88,7 +89,7 @@ void GameWorld::RegisterSystems() 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("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); }); } diff --git a/Escape-the-Dawn/Systems/PlayerSystem.cpp b/Escape-the-Dawn/Systems/PlayerSystem.cpp index e69de29..a237a8f 100644 --- a/Escape-the-Dawn/Systems/PlayerSystem.cpp +++ b/Escape-the-Dawn/Systems/PlayerSystem.cpp @@ -0,0 +1,52 @@ +#include "PlayerSystem.h" +#include "World.h" + + + +void Systems::PlayerSystem::Update(double dt) +{ + +} + +void Systems::PlayerSystem::UpdateEntity(double dt, EntityID entity, EntityID parent) +{ + auto transform = m_World->GetComponent(entity, "Transform"); + if (transform == nullptr) + return; + auto input = m_World->GetComponent(entity, "Input"); + if (input == nullptr) + return; + + auto name = m_World->GetProperty(entity, "Name"); + if (name == "Camera") { + + glm::vec3 Camera_Right = glm::rotate(transform->Orientation, glm::vec3(1, 0, 0)); + glm::vec3 Camera_Forward = glm::rotate(transform->Orientation, glm::vec3(0, 0, 1)); + + + float speed = 4.0f; + if(input->KeyState[GLFW_KEY_LEFT_SHIFT] == GLFW_PRESS) + { + speed = 1.0f; + } + if(input->KeyState[GLFW_KEY_A] == GLFW_PRESS) + { + transform->Position -= Camera_Right * (float)dt*2.f * speed; + } + if(input->KeyState[GLFW_KEY_D] == GLFW_PRESS) + { + transform->Position += Camera_Right * (float)dt*2.f * speed; + } + if(input->KeyState[GLFW_KEY_W] == GLFW_PRESS) + { + transform->Position -= Camera_Forward * (float)dt*2.f * speed; + } + if(input->KeyState[GLFW_KEY_S] == GLFW_PRESS) + { + transform->Position += Camera_Forward * (float)dt*2.f * speed; + } + + transform->Orientation = transform->Orientation * glm::angleAxis(-(input->dX/300.f),glm::vec3(0,1,0)); + transform->Orientation = transform->Orientation * glm::angleAxis(-(input->dY/300.f),glm::vec3(1,0,0)); + } +} diff --git a/Escape-the-Dawn/Systems/PlayerSystem.h b/Escape-the-Dawn/Systems/PlayerSystem.h index e69de29..99efd8b 100644 --- a/Escape-the-Dawn/Systems/PlayerSystem.h +++ b/Escape-the-Dawn/Systems/PlayerSystem.h @@ -0,0 +1,30 @@ +#ifndef PlayerSystem_h__ +#define PlayerSystem_h__ + +#include + +#include "System.h" +#include "Renderer.h" +#include "Components/Transform.h" +#include "Components/Input.h" +#include "logging.h" + +namespace Systems +{ + + class PlayerSystem : public System + { + public: + PlayerSystem(World* world) + : System(world) { } + + void Update(double dt) override; + void UpdateEntity(double dt, EntityID entity, EntityID parent) override; + + private: + + }; + +} + +#endif // InputSystem_h__ diff --git a/Escape-the-Dawn/Systems/SoundsSystem.cpp b/Escape-the-Dawn/Systems/SoundsSystem.cpp index bfc7e23..92a415d 100644 --- a/Escape-the-Dawn/Systems/SoundsSystem.cpp +++ b/Escape-the-Dawn/Systems/SoundsSystem.cpp @@ -28,7 +28,6 @@ void Systems::SoundSystem::UpdateEntity(double dt, EntityID entity, EntityID par if(soundEmitter == nullptr) return; - } void Systems::SoundSystem::PlaySound(std::shared_ptr emitter, std::string fileName) diff --git a/Escape-the-Dawn/World.h b/Escape-the-Dawn/World.h index 7f46c7f..0e1a652 100644 --- a/Escape-the-Dawn/World.h +++ b/Escape-the-Dawn/World.h @@ -42,6 +42,11 @@ public: template T GetProperty(EntityID entity, std::string property) { + if(m_EntityProperties.find(entity) == m_EntityProperties.end()) + return T(); + if(m_EntityProperties[entity].find(property) == m_EntityProperties[entity].end()) + return T(); + return boost::any_cast(m_EntityProperties[entity][property]); }