Skip to content
Snippets Groups Projects
Commit 5e2536e4 authored by KosmX's avatar KosmX
Browse files

issue with olc screen offset

parent 7e7aa3e4
No related branches found
No related tags found
No related merge requests found
#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;
};
......@@ -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 {
/*
......
......@@ -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;
}
......@@ -4,6 +4,6 @@ class TestGenerator :
public DungeonGenerator
{
public:
void generate(GameClient& client) override;
std::shared_ptr<entities::PlayerEntity> generate(GameClient& client) override;
};
......@@ -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
......
......@@ -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();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment