diff --git a/DungeonGenerator.h b/DungeonGenerator.h index ba8388969bbd5d568e3e6f3809eaf4445f3a2ae6..d100a2cfb46553d5917ad3171ce6843efbe1d5d7 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 ff0c886949dfd6f181f83793bb70f3b71c00ed8b..8f54a5ca11fd35b386d578a2e32b8f154d023861 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 ee0244d040a6d5a1b71fde14f7372bbef578183b..e1dd538c5580a455683482fc86dbef79c60ba17d 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 dd534e9f7ba2145bf03cc0e4a64606f89b2d86b7..a16fa5fc19348ee1b93c903870538a777943bd87 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 7f8c3a1a02a8c39130469d23cdab8b5b0a32badc..5c3678d42a25e594c835eea35250db503bf02ee3 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 2a675433c796d89143ac4e538538d1996ca38f98..aa0dd5d5ad3f3999186627dccb0a010f679c437b 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();