Large refactoring. Also, reimplemented resource manager to use parsers. Changed from json to xml (it allows comments!!!).

This commit is contained in:
2016-12-01 21:08:28 +02:00
parent 9c8cbf8518
commit 0b6a988184
71 changed files with 1608 additions and 923 deletions

View File

@@ -34,63 +34,6 @@ FarmlandsGame::FarmlandsGame() :
{
}
void FarmlandsGame::createScene()
{
// Create camera
Transform* cameraTransform = new Transform();
cameraTransform->x = 120;
cameraTransform->y = 100 - 1;
Camera* camera = new Camera();
camera->scale = 4.0f;
GameObject* cameraObj = new GameObject();
cameraObj->addComponent(cameraTransform);
cameraObj->addComponent(camera);
GameState::current().root.addChild(cameraObj);
GameState::current().renderContext.setCamera(cameraObj);
cameraObj->onCreate();
// Create background
BackgroundRenderer* backRenderer = new BackgroundRenderer();
backRenderer->level = GameState::current().currentLevel;
GameObject* backObj = new GameObject();
backObj->addComponent(backRenderer);
GameState::current().root.addChild(backObj);
backObj->onCreate();
// Create player
Transform* playerTransform = new Transform();
playerTransform->x = 120;
playerTransform->y = 100;
SpriteRenderer* playerRender = new SpriteRenderer();
playerRender->sprite = ResourceManager::instance().sprite(R::Sprites::Player);
PlayerController* playerCtrl = new PlayerController();
GameObject* playerObj = new GameObject();
playerObj->addComponent(playerTransform);
playerObj->addComponent(playerRender);
playerObj->addComponent(playerCtrl);
GameState::current().root.addChild(playerObj);
playerObj->onCreate();
// Create debug object
DebugController* dbgController = new DebugController();
GameObject* dbgObj = new GameObject();
dbgObj->addComponent(dbgController);
GameState::current().root.addChild(dbgObj);
dbgObj->onCreate();
}
bool FarmlandsGame::initialize()
{
bool ok = true;
@@ -102,41 +45,36 @@ bool FarmlandsGame::initialize()
// Initialize & load resources
ResourceManager::instance().initialize();
ResourceManager::instance().loadGameAssets();
ResourceManager::instance().loadLevel(resources::R::Levels::Farm);
GameState::current().currentLevel = ResourceManager::instance().level(resources::R::Levels::Farm);
GameState::current().renderContext.viewport.pixelsPerUnitX = GameState::current().currentLevel->m_cellWidth;
GameState::current().renderContext.viewport.pixelsPerUnitY = GameState::current().currentLevel->m_cellHeight;
// Set up scene
createScene();
ResourceManager::instance().loadGame();
GameState::current().renderContext.viewport.pixelsPerUnitX = GameState::current().scene->cellWidth;
GameState::current().renderContext.viewport.pixelsPerUnitY = GameState::current().scene->cellHeight;
// Finish initialization
GameState::current().root.onInitialize();
GameState::current().scene->root.onInitialize();
return true;
}
void FarmlandsGame::onUpdateLogic()
{
GameState::current().root.onUpdateLogic();
GameState::current().scene->root.onUpdateLogic();
}
void FarmlandsGame::onPreRender()
{
GameState::current().root.onPreRender();
GameState::current().scene->root.onPreRender();
SdlRenderer::instance().renderBegin();
}
void FarmlandsGame::onRender()
{
GameState::current().root.onRender();
GameState::current().scene->root.onRender();
}
void FarmlandsGame::onEvent(SDL_Event& event)
{
// Let controllers handle event
if (GameState::current().root.onEvent(event))
if (GameState::current().scene->root.onEvent(event))
return;
// Nobody? Handle global events
@@ -159,13 +97,13 @@ void FarmlandsGame::onEvent(SDL_Event& event)
void FarmlandsGame::onPostRender()
{
SdlRenderer::instance().renderEnd();
GameState::current().root.onPostRender();
GameState::current().scene->root.onPostRender();
}
void FarmlandsGame::stop()
{
m_running = false;
GameState::current().root.onDestroy();
GameState::current().scene->root.onDestroy();
}
int FarmlandsGame::run()

View File

@@ -9,8 +9,6 @@
#define FARMLANDSGAME_H_
#include <GameState.h>
#include <controller/GuiController.h>
#include <controller/PlayerController.h>
#include <resources/ResourceManager.h>
#include <SDL2/SDL.h>
@@ -36,7 +34,6 @@ namespace controller {
void stop();
private:
void createScene();
bool m_running;
Uint32 m_time;

View File

@@ -0,0 +1,30 @@
/*
* ItemController.cpp
*
* Created on: Nov 30, 2016
* Author: tibi
*/
#include <controller/items/ItemController.h>
namespace farmlands
{
namespace controller
{
namespace items
{
ItemController::ItemController()
{
// TODO Auto-generated constructor stub
}
ItemController::~ItemController()
{
// TODO Auto-generated destructor stub
}
} /* namespace items */
} /* namespace controller */
} /* namespace farmlands */

View File

@@ -0,0 +1,30 @@
/*
* ItemController.h
*
* Created on: Nov 30, 2016
* Author: tibi
*/
#ifndef CONTROLLER_ITEMS_ITEMCONTROLLER_H_
#define CONTROLLER_ITEMS_ITEMCONTROLLER_H_
#include <base/Component.h>
namespace farmlands {
namespace controller {
namespace items {
class ItemController: public base::Component
{
public:
ItemController();
virtual ~ItemController();
float enemyDamage;
};
} /* namespace items */
} /* namespace controller */
} /* namespace farmlands */
#endif /* CONTROLLER_ITEMS_ITEMCONTROLLER_H_ */

View File

@@ -6,7 +6,7 @@
*/
#include <GameState.h>
#include <controller/PlayerController.h>
#include <controller/player/PlayerController.h>
#include <graphics/SpriteRenderer.h>
#include <input/Input.h>
#include <utils/Assert.h>
@@ -17,21 +17,11 @@ using namespace farmlands::model;
namespace farmlands {
namespace controller {
namespace player {
/**
* The default velocity of the player when walking (units/sec).
*/
static const float PlayerWalkVelocity = 2.0f;
/**
* The default velocity of the player when running (units/sec).
*/
static const float PlayerRunVelocity = 4.0f;
/*
* Movement speed when attacking.
*/
static const float PlayerAttackVelocity = 0.1f;
static const float PlayerWalkVelocity = 2.0f; // The default velocity of the player when walking (units/sec).
static const float PlayerRunVelocity = 4.0f; // The default velocity of the player when running (units/sec).
static const float PlayerAttackVelocity = 0.1f; // Movement speed when attacking.
/**
* Direction enum based on sign of velocity on x and y
@@ -43,12 +33,12 @@ static const Direction VelocitySignDirections[3][3] =
{ Direction::NorthEast, Direction::East, Direction::SouthEast },
};
PlayerController::PlayerController()
: m_transform(nullptr),
m_attackTimeLeft(0),
m_vx(0), m_vy(0),
m_facingDirection(Direction::South)
m_facingDirection(Direction::South),
m_walking(false),
m_running(false)
{
}
@@ -77,18 +67,25 @@ bool PlayerController::onEvent(SDL_Event& event)
void PlayerController::onUpdateLogic()
{
m_running = false;
m_walking = false;
// Compute movement velocity
float velMultiplier = PlayerWalkVelocity;
if (Input::instance().pressed(GameKey::Run))
velMultiplier = PlayerRunVelocity;
if (m_attackTimeLeft)
{
velMultiplier = PlayerAttackVelocity;
--m_attackTimeLeft;
}
else if (Input::instance().pressed(GameKey::Run))
{
velMultiplier = PlayerRunVelocity;
m_running = true;
}
// Make movement time independent
velMultiplier *= GameState::current().elapsedTime;
@@ -97,25 +94,15 @@ void PlayerController::onUpdateLogic()
float vy = Input::instance().getY() * velMultiplier;
// Check if we can move to the new position
float newX = m_transform->x + m_vx;
float newY = m_transform->y + m_vy;
float newX = m_transform->x + vx;
float newY = m_transform->y + vy;
if ((vx || vy) && canMove(newX, newY))
{
m_vx = vx;
m_vy = vy;
m_walking = true;
m_transform->x = newX;
m_transform->y = newY;
m_facingDirection = getDirection(vx, vy);
base::Transform* cam = GameState::current().renderContext.cameraTransform();
cam->x = newX;
cam->y = newY - 1;
}
else
{
m_vx = 0;
m_vy = 0;
}
}
@@ -125,8 +112,7 @@ void PlayerController::onPreRender()
SpriteRenderer* spriteRenderer = gameObject->component<SpriteRenderer>();
// Compute current state
bool idle = (m_vx == 0 && m_vy == 0);
std::string stateName = (idle) ? "Idle " : "Walking ";
std::string stateName = (m_walking) ? "Walking " : "Idle ";
if (m_facingDirection & Direction::East)
stateName += "right";
@@ -138,6 +124,18 @@ void PlayerController::onPreRender()
stateName += "down";
spriteRenderer->sprite->setState(stateName);
// Set animation velocity
float animVelocity = (m_running) ? 1.0f : 0.7f;
if (m_attackTimeLeft)
animVelocity = 0.1f;
spriteRenderer->sprite->setAnimationVelocity(animVelocity);
// Set camera
base::Transform* cam = GameState::current().renderContext.cameraTransform();
cam->x = m_transform->x;
cam->y = m_transform->y - 1;
}
bool PlayerController::canMove(float x, float y)
@@ -159,5 +157,6 @@ void PlayerController::attack()
// For now - nothing
}
}
} /* namespace controller */
} /* namespace farmlands */

View File

@@ -10,14 +10,13 @@
#include <base/Component.h>
#include <base/Transform.h>
#include <model/Direction.h>
#include <SDL2/SDL.h>
namespace farmlands {
// Forward declarations
struct GameState;
namespace controller {
namespace player {
class PlayerController : public base::Component
{
@@ -38,10 +37,12 @@ namespace controller {
base::Transform* m_transform;
uint32_t m_attackTimeLeft;
float m_vx, m_vy;
model::Direction m_facingDirection;
bool m_walking, m_running;
};
}
} /* namespace controller */
} /* namespace farmlands */