From 3a57a18b4f465c1eda896d4c424277042675c43f Mon Sep 17 00:00:00 2001 From: ViktorLjung Date: Thu, 13 Mar 2014 20:51:47 +0100 Subject: [PATCH] =?UTF-8?q?Kameran=20f=C3=B6ljer=20spelaren=20:3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Escape-the-Dawn/GameWorld.cpp | 28 +++--- Escape-the-Dawn/Models/powerupTexture.png | Bin 6608 -> 6735 bytes .../Systems/LevelGenerationSystem.cpp | 14 +-- Escape-the-Dawn/Systems/PlayerSystem.cpp | 85 ++++++++++++------ Escape-the-Dawn/Systems/PlayerSystem.h | 6 ++ 5 files changed, 82 insertions(+), 51 deletions(-) diff --git a/Escape-the-Dawn/GameWorld.cpp b/Escape-the-Dawn/GameWorld.cpp index 31c2855..3697aa8 100644 --- a/Escape-the-Dawn/GameWorld.cpp +++ b/Escape-the-Dawn/GameWorld.cpp @@ -69,11 +69,25 @@ void GameWorld::Initialize() model = AddComponent(ent, "Model"); model->ModelFile = "Models/plane.obj"; + // Camera + entcamera = CreateEntity(); + SetProperty(entcamera, "Name", std::string("Camera")); + transform = AddComponent(entcamera, "Transform"); + AddComponent(entcamera, "Input"); + transform->Position = glm::vec3(0.f, 10.f, 14.f); + camera = AddComponent(entcamera, "Camera"); + camera->FOV = 45.f; + camera->FarClip = 1000.f; + camera->NearClip = 0.01f; + transform->Orientation = glm::angleAxis(glm::radians(15.0f),glm::vec3(1,0,0)); + // Player m_Player = CreateEntity(); - SetProperty(m_Player, "Name", std::string("PlayerShip")); + SetProperty(m_Player, "Name", std::string("Player")); + SetProperty(m_Player, "Camera", entcamera); transform = AddComponent(m_Player, "Transform"); transform->Position = glm::vec3(0.f, 2.f, -5.f); + transform->Velocity = glm::vec3(10.f, 0.f, 100.f); transform->Scale = glm::vec3(1.0f); model = AddComponent(m_Player, "Model"); model->ModelFile = "Models/ship.obj"; @@ -93,17 +107,7 @@ void GameWorld::Initialize() bounds->VolumeVector = glm::vec3(4.f, 0.7f, 1); - // Camera - entcamera = CreateEntity(m_Player); - SetProperty(entcamera, "Name", std::string("Camera")); - transform = AddComponent(entcamera, "Transform"); - AddComponent(entcamera, "Input"); - transform->Position = glm::vec3(0.f, 10.f, 14.f); - camera = AddComponent(entcamera, "Camera"); - camera->FOV = 45.f; - camera->FarClip = 1000.f; - camera->NearClip = 0.01f; - transform->Orientation = glm::angleAxis(glm::radians(15.0f),glm::vec3(1,0,0)); + diff --git a/Escape-the-Dawn/Models/powerupTexture.png b/Escape-the-Dawn/Models/powerupTexture.png index 4a0b5862a6568d5ccfd3ca4309eb416607f293f3..fa4e133d8a03eb4a592c7ae61b98dfe73e38d947 100644 GIT binary patch literal 6735 zcmeAS@N?(olHy`uVBq!ia0y~yU;#2&7&zE~RK2WrGmv60@$_|NzsJlgEXnWk^$t)C zgLsK+L`iUdT1k0gQ7VJGj|Nu#}_(O%MMFKM8ANfmF;8S(*8o|0J>k`D{tv?k)`fL2$v|<&zm0B(*(V978JRyt!e>%b*}|z~PT}t@whb z2^XaE-rq4bmImtial1+uNHN?=2ayg9j39~;3Z5n_w!)ViBv}rI} zCXQx<(WU{YG#qUjj5ZB`$zZf;0Llyl-!z!h`zX++%l)H<+|k7qEC~$tH>>we`zC7y Oa-FBEpUXO@geCwt5tGgU diff --git a/Escape-the-Dawn/Systems/LevelGenerationSystem.cpp b/Escape-the-Dawn/Systems/LevelGenerationSystem.cpp index 2e71570..05fcf0a 100644 --- a/Escape-the-Dawn/Systems/LevelGenerationSystem.cpp +++ b/Escape-the-Dawn/Systems/LevelGenerationSystem.cpp @@ -64,13 +64,7 @@ void Systems::LevelGenerationSystem::SpawnObstacle() float scale = (float)(rand() % 1000) / 100; bounds->VolumeVector = glm::vec3(4, 4, 4); bounds->Origin = glm::vec3(0,4,0); - pointLight = m_World->AddComponent(ent, "PointLight"); - pointLight->Specular = glm::vec3(1.0, 1.0, 1.0); - pointLight->Diffuse = glm::vec3(0.3, 1.0, 0.3); - pointLight->constantAttenuation = 0.f; - pointLight->linearAttenuation = 1.f; - pointLight->quadraticAttenuation = 0.f; - pointLight->spotExponent = 0.0f; + powerUp = m_World->AddComponent(ent, "PowerUp"); powerUp->Speed = 10.f; @@ -80,7 +74,7 @@ void Systems::LevelGenerationSystem::SpawnObstacle() // Put it below ground level - transform->Position.y -= bounds->VolumeVector.y * 2.f; + //transform->Position.y -= bounds->VolumeVector.y * 2.f; } @@ -100,7 +94,7 @@ void Systems::LevelGenerationSystem::Update( double dt ) { auto transform = m_World->GetComponent(ent, "Transform"); - transform->Velocity.z = -velocity; + transform->Velocity.z = velocity; transform->Position += transform->Velocity * (float)dt; // Stop raising obstacles when they reach ground level @@ -126,7 +120,7 @@ void Systems::LevelGenerationSystem::Update( double dt ) void Systems::LevelGenerationSystem::UpdateEntity( double dt, EntityID entity, EntityID parent ) { - if( m_World->GetProperty(entity, "Name") == "PlayerShip") + if( m_World->GetProperty(entity, "Name") == "Player") { auto transformComponent = m_World->GetComponent(entity, "Transform"); startyz = glm::vec2(0, transformComponent->Position.z - 1000); diff --git a/Escape-the-Dawn/Systems/PlayerSystem.cpp b/Escape-the-Dawn/Systems/PlayerSystem.cpp index 6e44d64..7dc1959 100644 --- a/Escape-the-Dawn/Systems/PlayerSystem.cpp +++ b/Escape-the-Dawn/Systems/PlayerSystem.cpp @@ -5,6 +5,12 @@ Systems::PlayerSystem::PlayerSystem( World* world ) : System(world) { m_PlayerSpeed = 20; m_PlayerOriginalBounds = glm::vec3(0); + + m_CameraOffset = glm::vec3(0.f, 5.f, 14.f); + m_CameraOrientation = glm::angleAxis(glm::radians(15.0f),glm::vec3(1,0,0)); + + freecamEnabled = false; + } void Systems::PlayerSystem::Update(double dt) @@ -21,35 +27,36 @@ void Systems::PlayerSystem::UpdateEntity(double dt, EntityID entity, EntityID pa return; auto name = m_World->GetProperty(entity, "Name"); - if (name == "Camera") { - 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); + if (name == "Camera" && freecamEnabled) { + 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 = m_PlayerSpeed; + if(input->KeyState[GLFW_KEY_LEFT_SHIFT]) { + speed *= 4.0f; + } + if(input->KeyState[GLFW_KEY_LEFT_ALT]) { + speed /= 4.0f; + } + if(input->KeyState[GLFW_KEY_A]) { + transform->Position -= Camera_Right * (float)dt * speed; + } + else if(input->KeyState[GLFW_KEY_D]) { + transform->Position += Camera_Right * (float)dt * speed; + } + if(input->KeyState[GLFW_KEY_W]) { + transform->Position -= Camera_Forward * (float)dt * speed; + } + if(input->KeyState[GLFW_KEY_S]) { + transform->Position += Camera_Forward * (float)dt * speed; + } + if(input->KeyState[GLFW_KEY_SPACE]) { + transform->Position += glm::vec3(0, 1, 0) * (float)dt * speed; + } + if(input->KeyState[GLFW_KEY_LEFT_CONTROL]) { + transform->Position -= glm::vec3(0, 1, 0) * (float)dt * speed; + } - float speed = m_PlayerSpeed; - if(input->KeyState[GLFW_KEY_LEFT_SHIFT]) { - speed *= 4.0f; - } - if(input->KeyState[GLFW_KEY_LEFT_ALT]) { - speed /= 4.0f; - } - if(input->KeyState[GLFW_KEY_A] || input->KeyState[GLFW_KEY_LEFT]) { - transform->Position -= Camera_Right * (float)dt * speed; - } - else if(input->KeyState[GLFW_KEY_D] || input->KeyState[GLFW_KEY_RIGHT]) { - transform->Position += Camera_Right * (float)dt * speed; - } - if(input->KeyState[GLFW_KEY_W]) { - transform->Position -= Camera_Forward * (float)dt * speed; - } - if(input->KeyState[GLFW_KEY_S]) { - transform->Position += Camera_Forward * (float)dt * speed; - } - if(input->KeyState[GLFW_KEY_SPACE]) { - transform->Position += glm::vec3(0, 1, 0) * (float)dt * speed; - } - 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 //--------------------------------------------------------------------- @@ -61,7 +68,7 @@ void Systems::PlayerSystem::UpdateEntity(double dt, EntityID entity, EntityID pa } } - if (name == "PlayerShip") + if (name == "Player") { auto bounds = m_World->GetComponent(entity, "Bounds"); if (bounds && m_PlayerOriginalBounds == glm::vec3(0)) { @@ -121,6 +128,26 @@ void Systems::PlayerSystem::UpdateEntity(double dt, EntityID entity, EntityID pa Euler = glm::eulerAngles(transform->Orientation); bounds->VolumeVector.x = m_PlayerOriginalBounds.x * glm::cos(glm::radians(Euler.z)); } + + + if(input->KeyState[GLFW_KEY_F4] && !input->LastKeyState[GLFW_KEY_F4]) { + if(freecamEnabled) + freecamEnabled = false; + else + freecamEnabled = true; + } + + + // Update camera + if(! freecamEnabled) + { + auto cameraEntity = m_World->GetProperty(entity, "Camera"); + auto cameraTransform = m_World->GetComponent(cameraEntity, "Transform"); + if (cameraTransform) { + cameraTransform->Position = transform->Position + m_CameraOffset; + cameraTransform->Orientation = m_CameraOrientation; + } + } } } diff --git a/Escape-the-Dawn/Systems/PlayerSystem.h b/Escape-the-Dawn/Systems/PlayerSystem.h index 0d5ccad..12ea648 100644 --- a/Escape-the-Dawn/Systems/PlayerSystem.h +++ b/Escape-the-Dawn/Systems/PlayerSystem.h @@ -7,6 +7,7 @@ #include "Components/Transform.h" #include "Components/Input.h" #include "Components/Collision.h" +#include "Components/Camera.h" #include "Components/Bounds.h" #include "logging.h" @@ -26,6 +27,11 @@ namespace Systems private: float m_PlayerSpeed; glm::vec3 m_PlayerOriginalBounds; + + glm::vec3 m_CameraOffset; + glm::quat m_CameraOrientation; + + bool freecamEnabled; }; }