From 1757c67ab3539f909cd56b2886b726214ee404b6 Mon Sep 17 00:00:00 2001 From: Ben Date: Wed, 10 Oct 2018 11:32:32 +0100 Subject: [PATCH] Camera class now can be passed to renderer and game to apply an active camera --- crumpet-engine/Game.cpp | 8 ++++++++ crumpet-engine/game.h | 6 +++++- crumpet-engine/main.cpp | 3 ++- crumpet-engine/renderer.cpp | 5 ++++- crumpet-engine/renderer.h | 7 +++++-- 5 files changed, 24 insertions(+), 5 deletions(-) diff --git a/crumpet-engine/Game.cpp b/crumpet-engine/Game.cpp index fb283aa..f0e85e8 100644 --- a/crumpet-engine/Game.cpp +++ b/crumpet-engine/Game.cpp @@ -15,6 +15,14 @@ void Game::PollEvents() { this->renderer->CloseDisplay(); } +void Game::AddCamera(std::string name, Camera* camera) { + Cameras[name] = camera; +} + +void Game::UseCamera(std::string name) { + renderer->ApplyCameraToScene(Cameras[name]); +} + Game::~Game() { } diff --git a/crumpet-engine/game.h b/crumpet-engine/game.h index 69579e0..3bca8e2 100644 --- a/crumpet-engine/game.h +++ b/crumpet-engine/game.h @@ -1,6 +1,7 @@ #pragma once #include +#include #include #include "renderer.h" #include "camera.h" @@ -10,7 +11,10 @@ public: Game(std::string title, int width, int height, int targetFramerate, int targetUpdaterate); Renderer* renderer; - Camera* camera; + std::map Cameras; + + void AddCamera(std::string name, Camera* camera); + void UseCamera(std::string name); void PollEvents(); diff --git a/crumpet-engine/main.cpp b/crumpet-engine/main.cpp index c81b06a..0b2e1df 100644 --- a/crumpet-engine/main.cpp +++ b/crumpet-engine/main.cpp @@ -8,7 +8,8 @@ int main(int argc, char** argv) { Game game("Crumpet engine", SCREEN_WIDTH, SCREEN_HEIGHT, 0, 1000 / 60); // 1000 / 60); Camera camera(SCREEN_WIDTH, SCREEN_HEIGHT); - game.camera = &camera; + game.AddCamera("follow", &camera); + game.UseCamera("follow"); Timer timer; Sprite sans("sans", game.renderer, SpriteType::SPRITE_ANIMATED); diff --git a/crumpet-engine/renderer.cpp b/crumpet-engine/renderer.cpp index 983415a..26023b3 100644 --- a/crumpet-engine/renderer.cpp +++ b/crumpet-engine/renderer.cpp @@ -1,5 +1,4 @@ #include "renderer.h" -#include "entity.h" Renderer::Renderer(std::string title, int width, int height, int targetFramerate) { if (SDL_Init(SDL_INIT_VIDEO) < 0) { @@ -63,6 +62,10 @@ void Renderer::RenderTexture(Rect* fromRect, Rect* toRect, SDL_Surface* surface, SDL_DestroyTexture(texture); } +void Renderer::ApplyCameraToScene(Camera* camera) { + this->ActiveCamera = camera; +} + void Renderer::RenderUpdate() { SDL_SetRenderDrawColor(SDLRenderer, 66, 134, 244, 255); SDL_RenderPresent(SDLRenderer); diff --git a/crumpet-engine/renderer.h b/crumpet-engine/renderer.h index ea149a8..0d8f69a 100644 --- a/crumpet-engine/renderer.h +++ b/crumpet-engine/renderer.h @@ -4,14 +4,15 @@ #include #include #include -#include "rect.h" +#include "camera.h" class Renderer { public: Renderer(std::string title, int width, int height, int targetFramerate); SDL_Renderer *SDLRenderer; - + Camera* ActiveCamera; + void SetRendererColour(Vec4* col); void RenderEmptyRect(Rect* rect); void RenderFilledRect(Rect* rect); @@ -21,6 +22,8 @@ public: void RenderTexture(Rect* fromRect, Rect* toRect, SDL_Texture* surface, const double angle, Vec2* rotationCenter); void RenderTexture(Rect* fromRect, Rect* toRect, SDL_Surface* surface, const double angle, Vec2* rotationCenter); + void ApplyCameraToScene(Camera* camera); + void RenderUpdate(); void RenderClear();