From 6226457580a845ba15099706dc4dd7439b794cc8 Mon Sep 17 00:00:00 2001 From: Fredrick Johansson Date: Mon, 24 Aug 2020 20:35:24 +0200 Subject: [PATCH] JAMSPOOK-23 - Camera system in place - Implemented the camera system into the engine. - Implemented an active follow camera into the game. --- src/JamSpookGame.cpp | 54 ++++++++++++++++++++++++++++++++++++++++---- src/JamSpookGame.h | 12 ++++++---- 2 files changed, 58 insertions(+), 8 deletions(-) diff --git a/src/JamSpookGame.cpp b/src/JamSpookGame.cpp index 9b4562c..f48aa25 100644 --- a/src/JamSpookGame.cpp +++ b/src/JamSpookGame.cpp @@ -31,8 +31,9 @@ JamSpookGame::JamSpookGame(): addSystem(assetSystem); // Create window + // Resolution (256x224 scaled to whatever) Log::write(LogLevel::info, "Game - Constructor - Creating window"); - mWindow = make_shared("BouncyBalls", 1024, 1024, Window::WindowMode::window); + mWindow = make_shared("BouncyBalls", 480, 272, Window::WindowMode::window); mWindow->hide(); // Create renderer @@ -47,6 +48,9 @@ JamSpookGame::JamSpookGame(): // Create animation system addSystem(make_shared()); + // Create camera system + addSystem(make_shared()); + // Create interaction system addSystem(make_shared()); shared_ptr interactionSystem = dynamic_pointer_cast(findSystem(IDCache::get("InteractionSystem"))); @@ -96,7 +100,7 @@ JamSpookGame::JamSpookGame(): // 16.0f/9.0f, // mCamera = camFactory->createPerspective(vec3(1.0f, 100.0f, 0.0f), - mCamera = camFactory->createPerspective(vec3(-60.0f, 40.0f, 60.0f), + mCamera = camFactory->createPerspective(vec3(0.0f, 0.0f, 0.0f), // The follow cam implementation will change the position during runtime. vec3(0.0f, -20.0f, 0.0f), vec3(0.0f, 1.0f, 0.0f), 90.0f/2, @@ -302,10 +306,52 @@ void JamSpookGame::set() dynamic_pointer_cast(findSystem(IDCache::get("InteractionSystem"))), renderLayerGame); - kartFactory->createKart(vec3(0, 3, 0), // position - vec3(0, 180, 0)); // euler degrees rotation, XYZ + shared_ptr kartEntity = kartFactory->createKart( + vec3(0, 3, 0), // position + vec3(0, 180, 0)); // euler degrees rotation, XYZ kartFactory.reset(); + + // Create the follow camera, and lock it to the kart + unique_ptr cameraFactory = make_unique(); + cameraFactory->createActiveFollowCamera("followKartCamera", + mCamera, + kartEntity, + vec3(0 ,10 ,-25), + vec3(0, 5, 0)); + cameraFactory.reset(); + + + + /** + const string name, + shared_ptr, + weak_ptr wTargetEntity, + const vec3 cameraPositionOffset, + const vec3 targetPositionOffset + */ + + + + + + + + + + + + + + + + + + + + + + // Set game state setGameState(ecos::core::GameState::InGame); diff --git a/src/JamSpookGame.h b/src/JamSpookGame.h index 7da067b..eed9071 100644 --- a/src/JamSpookGame.h +++ b/src/JamSpookGame.h @@ -39,6 +39,10 @@ #include +#include +#include +#include + #include #include @@ -49,8 +53,6 @@ #include #include #include -#include -#include #include #include #include @@ -114,6 +116,10 @@ using ecos::physics::CollisionShapeLoader; using ecos::animation::AnimationSystem; +using ecos::camera::CameraSystem; +using ecos::camera::CameraFactory; +using ecos::camera::Camera; + using ecos::interaction::InteractionSystem; using ecos::interaction::InputDeviceState; using ecos::interaction::ButtonState; @@ -127,8 +133,6 @@ using ecos::graphics::ShaderProgramFactory; using ecos::graphics::DevILSystem; using ecos::graphics::Renderer; using ecos::graphics::GL4Renderer; -using ecos::graphics::Camera; -using ecos::graphics::CameraFactory; using ecos::graphics::MeshLoader; using ecos::graphics::ShaderLoader; using ecos::graphics::ShaderProgramLoader;