From 5e2536e4517c3f4041083c18b82b76598d805745 Mon Sep 17 00:00:00 2001 From: KosmX <kosmx.mc@gmail.com> Date: Mon, 10 May 2021 17:48:33 +0200 Subject: [PATCH] issue with olc screen offset --- DungeonGenerator.h | 7 ++++++- Entity.cpp | 2 +- TestGenerator.cpp | 7 +++++-- TestGenerator.h | 2 +- mainGame.cpp | 16 +++++++++++++--- mainGame.h | 3 +++ 6 files changed, 29 insertions(+), 8 deletions(-) diff --git a/DungeonGenerator.h b/DungeonGenerator.h index ba83889..d100a2c 100644 --- a/DungeonGenerator.h +++ b/DungeonGenerator.h @@ -1,4 +1,9 @@ #pragma once +#include <memory> + +namespace entities { + class PlayerEntity; +} class GameClient; @@ -8,6 +13,6 @@ class GameClient; class DungeonGenerator { public: - virtual void generate(GameClient& client) = 0; + virtual std::shared_ptr<entities::PlayerEntity> generate(GameClient& client) = 0; }; diff --git a/Entity.cpp b/Entity.cpp index ff0c886..8f54a5c 100644 --- a/Entity.cpp +++ b/Entity.cpp @@ -5,7 +5,7 @@ using namespace std; using namespace olc; // fine tuning the collision engine, the edges of a box won't collide -const float ignoreDistance = 0.08f; +const float ignoreDistance = 0.1f; namespace entities { /* diff --git a/TestGenerator.cpp b/TestGenerator.cpp index ee0244d..e1dd538 100644 --- a/TestGenerator.cpp +++ b/TestGenerator.cpp @@ -8,7 +8,7 @@ using namespace entities; using namespace std; -void TestGenerator::generate(GameClient& client) +shared_ptr<PlayerEntity> TestGenerator::generate(GameClient& client) { auto* asd = new WallEntity({ -1, 0 }); //some random walls, just because why not??? @@ -19,5 +19,8 @@ void TestGenerator::generate(GameClient& client) client += make_shared<WallEntity>(*new WallEntity(olc::vf2d(-1, -1))); client += make_shared<WallEntity>(*asd); - client += make_shared<PlayerEntity>(*new PlayerEntity({ 0, -4 }, render::CharacterTexture::EngineerTexture)); + shared_ptr<PlayerEntity> player(new PlayerEntity({ 0, -4 }, render::CharacterTexture::MageTexture)); + + client += player; + return player; } diff --git a/TestGenerator.h b/TestGenerator.h index dd534e9..a16fa5f 100644 --- a/TestGenerator.h +++ b/TestGenerator.h @@ -4,6 +4,6 @@ class TestGenerator : public DungeonGenerator { public: - void generate(GameClient& client) override; + std::shared_ptr<entities::PlayerEntity> generate(GameClient& client) override; }; diff --git a/mainGame.cpp b/mainGame.cpp index 7f8c3a1..5c3678d 100644 --- a/mainGame.cpp +++ b/mainGame.cpp @@ -9,6 +9,9 @@ using namespace std; using namespace entities; using namespace olc; +const float screenMoveScale = 8; +const int worldToScreenScale = 16; + GameClient& GameClient::createInstance(bool debug) { instance = new GameClient(debug); @@ -26,6 +29,12 @@ DynamicArray<std::shared_ptr<entities::Entity>>& GameClient::getEntities() return this->entities; } +void GameClient::updateWorldOffset(float dTick) +{ + vf2d delta = scene.GetWorldOffset() + this->GetScreenPixelSize()/2.f + vf2d(4, 0); + scene.MoveWorldOffset((player->getPos() - delta) * dTick * screenMoveScale); +} + GameClient& GameClient::getInstance() { return *instance; @@ -37,10 +46,10 @@ bool GameClient::OnUserCreate() //Set resource parent! render::ResourceManager::createInstance(); - scene.Initialise(this->GetWindowSize(), {16, 16}); // uh. idk. maybe that's the best option + scene.Initialise(this->GetScreenPixelSize(), {worldToScreenScale, worldToScreenScale}); // uh. idk. maybe that's the best option TestGenerator generator; - generator.generate(*this); + player = generator.generate(*this); return true; @@ -69,7 +78,8 @@ bool GameClient::OnUserUpdate(float fElapsedTime) return !entity->isAlive(); }); - scene.SetWorldOffset(this->viewArea); + this->updateWorldOffset(fElapsedTime); + for(auto& entity : entities){ // I literally add entities to the scene :D diff --git a/mainGame.h b/mainGame.h index 2a67543..aa0dd5d 100644 --- a/mainGame.h +++ b/mainGame.h @@ -3,6 +3,7 @@ #include "DynamicArray.hpp" #include <memory> #include "Entity.h" +#include "PlayerEntity.h" class GameClient : @@ -17,6 +18,8 @@ private: //olc::vf2d viewScale = {2, 2}; bool debug; olc::TransformedView scene; + std::shared_ptr<entities::PlayerEntity> player; + void updateWorldOffset(float dTick); public: static GameClient& getInstance(); -- GitLab