Basic user controlled world view
This commit is contained in:
parent
9d738f5707
commit
1b5bc82c1c
16 changed files with 47 additions and 72 deletions
|
@ -40,8 +40,6 @@ set(SOURCES
|
|||
src/debug/grid_debug_layer.h
|
||||
src/game/input/input_mapper.cpp
|
||||
src/game/input/input_mapper.h
|
||||
src/game/input/action_controller.cpp
|
||||
src/game/input/action_controller.h
|
||||
src/game/input/direction.h
|
||||
src/game/input/direction.cpp
|
||||
src/game/player/player.cpp
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
// FPS
|
||||
#define FRAME_RATE 60
|
||||
#define FRAME_TIME 1.0f / FRAME_RATE
|
||||
#define FRAME_TIME sf::Time(sf::seconds(1.0f / FRAME_RATE))
|
||||
|
||||
// Window settings
|
||||
#define ANTIALIASINGLEVEL 8
|
||||
|
|
|
@ -32,7 +32,7 @@ void GridDebugLayer::draw(sf::RenderWindow *window) const
|
|||
}
|
||||
}
|
||||
|
||||
void GridDebugLayer::update()
|
||||
void GridDebugLayer::update(Game *game)
|
||||
{
|
||||
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@ public:
|
|||
~GridDebugLayer();
|
||||
|
||||
void draw(sf::RenderWindow *window) const override;
|
||||
void update() override;
|
||||
void update(Game *game) override;
|
||||
|
||||
private:
|
||||
std::vector<GameObject*> marker;
|
||||
|
|
|
@ -5,16 +5,13 @@
|
|||
#include "game.h"
|
||||
|
||||
Game::Game(std::shared_ptr<sf::RenderWindow> window) : window(std::move(window)),
|
||||
gameObjects(),
|
||||
actionController(new ActionController(this))
|
||||
gameObjects()
|
||||
{
|
||||
InputMapper::setGame(this);
|
||||
}
|
||||
|
||||
Game::~Game()
|
||||
{
|
||||
delete actionController;
|
||||
|
||||
for (auto &gameObject: gameObjects)
|
||||
{
|
||||
delete gameObject;
|
||||
|
@ -68,6 +65,6 @@ void Game::update()
|
|||
{
|
||||
for (auto &gameObject: gameObjects)
|
||||
{
|
||||
gameObject->update();
|
||||
gameObject->update(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,10 +5,10 @@
|
|||
#include <memory>
|
||||
#include "../logging/easylogging++.h"
|
||||
#include "game_object.h"
|
||||
#include "input/action_controller.h"
|
||||
#include "input/input_mapper.h"
|
||||
|
||||
|
||||
class GameObject;
|
||||
class ActionController;
|
||||
|
||||
|
||||
|
@ -26,7 +26,6 @@ public:
|
|||
void addGameObject(GameObject *gameObject);
|
||||
|
||||
std::shared_ptr<sf::RenderWindow> window;
|
||||
ActionController *actionController;
|
||||
private:
|
||||
std::vector<GameObject *> gameObjects;
|
||||
|
||||
|
|
|
@ -6,13 +6,16 @@
|
|||
#include <SFML/Graphics/Drawable.hpp>
|
||||
#include <SFML/Graphics/RenderWindow.hpp>
|
||||
#include "../coordinates/translated_coordinates.h"
|
||||
#include "game.h"
|
||||
|
||||
class Game;
|
||||
|
||||
class GameObject {
|
||||
public:
|
||||
GameObject();
|
||||
|
||||
virtual void draw(sf::RenderWindow *window) const = 0;
|
||||
virtual void update() = 0;
|
||||
virtual void update(Game *game) = 0;
|
||||
|
||||
TranslatedCoordinates coordinates;
|
||||
};
|
||||
|
|
|
@ -1,15 +0,0 @@
|
|||
#include "action_controller.h"
|
||||
|
||||
ActionController::ActionController(Game *game) : game(game)
|
||||
{
|
||||
}
|
||||
|
||||
void ActionController::moveView(InputDirection direction)
|
||||
{
|
||||
float stepSize = 100.0f;
|
||||
auto delta = stepSize * Direction::getVector(direction);
|
||||
|
||||
auto view = game->window->getView();
|
||||
view.move(delta);
|
||||
game->window->setView(view);
|
||||
}
|
|
@ -1,26 +0,0 @@
|
|||
#ifndef HOLESOME_ACTION_CONTROLLER_H
|
||||
#define HOLESOME_ACTION_CONTROLLER_H
|
||||
|
||||
|
||||
#include "../game.h"
|
||||
#include "direction.h"
|
||||
|
||||
class Game;
|
||||
|
||||
|
||||
/**
|
||||
* Holds all the actions that can be performed and executes them when requested.
|
||||
*/
|
||||
class ActionController
|
||||
{
|
||||
public:
|
||||
explicit ActionController(Game *game);
|
||||
|
||||
void moveView(InputDirection direction);
|
||||
|
||||
private:
|
||||
Game *game;
|
||||
};
|
||||
|
||||
|
||||
#endif //HOLESOME_ACTION_CONTROLLER_H
|
|
@ -24,7 +24,6 @@ void InputMapper::processEvents()
|
|||
game->exit();
|
||||
break;
|
||||
case sf::Event::Resized:
|
||||
game->window->setView(sf::View(sf::FloatRect(0, 0, event.size.width, event.size.height)));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
|
@ -12,7 +12,7 @@ public:
|
|||
|
||||
void draw(sf::RenderWindow *window) const override;
|
||||
|
||||
void update() override;
|
||||
void update(Game *game) override;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -1,29 +1,46 @@
|
|||
#include "world_view.h"
|
||||
|
||||
WorldView::WorldView(Game *game)
|
||||
WorldView::WorldView() : view(nullptr)
|
||||
{
|
||||
this->game = game;
|
||||
view = game->window->getView();
|
||||
}
|
||||
|
||||
WorldView::~WorldView()
|
||||
{
|
||||
|
||||
delete view;
|
||||
}
|
||||
|
||||
void WorldView::draw(sf::RenderWindow *window) const
|
||||
{
|
||||
}
|
||||
|
||||
void WorldView::update()
|
||||
void WorldView::update(Game *game)
|
||||
{
|
||||
auto moveDirection = InputMapper::getInputDirection();
|
||||
if (view == nullptr)
|
||||
{
|
||||
initializeView(game);
|
||||
}
|
||||
|
||||
// Update size
|
||||
auto windowSize = game->window->getSize();
|
||||
sf::Vector2f viewSize = sf::Vector2f(windowSize.x, windowSize.y);
|
||||
view->setSize(viewSize);
|
||||
|
||||
// Update position
|
||||
auto moveDirection = InputMapper::getInputDirection();
|
||||
if (moveDirection != InputDirection::NONE)
|
||||
{
|
||||
float stepSize = 100.0f * FRAME_TIME;
|
||||
float stepSize = 100.0f * FRAME_TIME.asSeconds();
|
||||
auto delta = stepSize * Direction::getVector(moveDirection);
|
||||
this->view.move(delta);
|
||||
game->window->setView(this->view);
|
||||
this->view->move(delta);
|
||||
}
|
||||
|
||||
// TODO: Only update if necessary
|
||||
game->window->setView(*this->view);
|
||||
}
|
||||
|
||||
void WorldView::initializeView(Game *game)
|
||||
{
|
||||
auto center = game->window->getView().getCenter();
|
||||
auto size = game->window->getView().getSize();
|
||||
view = new sf::View(center, size);
|
||||
}
|
||||
|
|
|
@ -5,20 +5,21 @@
|
|||
#include "../game_object.h"
|
||||
#include "../game.h"
|
||||
|
||||
class WorldView : GameObject
|
||||
class WorldView : public GameObject
|
||||
{
|
||||
public:
|
||||
explicit WorldView(Game *game);
|
||||
explicit WorldView();
|
||||
|
||||
~WorldView();
|
||||
|
||||
void draw(sf::RenderWindow *window) const override;
|
||||
|
||||
void update() override;
|
||||
void update(Game *game) override;
|
||||
|
||||
private:
|
||||
sf::View view;
|
||||
Game *game;
|
||||
sf::View *view;
|
||||
|
||||
void initializeView(Game *game);
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
#include "logging/easylogging++.h"
|
||||
#include "game/game_factory.hpp"
|
||||
#include "debug/grid_debug_layer.h"
|
||||
#include "game/world/world_view.h"
|
||||
|
||||
INITIALIZE_EASYLOGGINGPP
|
||||
|
||||
|
@ -13,6 +14,7 @@ int main(int argc, char *argv[])
|
|||
auto game = GameFactory::createWindowed("Holesome");
|
||||
|
||||
game->addGameObject(new GridDebugLayer(0, 50, 0, 50));
|
||||
game->addGameObject(new WorldView());
|
||||
|
||||
game->run();
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ void CircleObject::draw(sf::RenderWindow *window) const
|
|||
window->draw(circle);
|
||||
}
|
||||
|
||||
void CircleObject::update()
|
||||
void CircleObject::update(Game *game)
|
||||
{
|
||||
|
||||
}
|
||||
|
|
|
@ -10,7 +10,7 @@ public:
|
|||
CircleObject(int radius, sf::Color color);
|
||||
|
||||
void draw(sf::RenderWindow *window) const override;
|
||||
void update() override;
|
||||
void update(Game *game) override;
|
||||
|
||||
private:
|
||||
int radius;
|
||||
|
|
Loading…
Reference in a new issue