Large refactoring. Also, reimplemented resource manager to use parsers. Changed from json to xml (it allows comments!!!).
This commit is contained in:
@@ -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()
|
||||
|
@@ -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;
|
||||
|
30
src/controller/items/ItemController.cpp
Normal file
30
src/controller/items/ItemController.cpp
Normal 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 */
|
30
src/controller/items/ItemController.h
Normal file
30
src/controller/items/ItemController.h
Normal 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_ */
|
@@ -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 */
|
@@ -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 */
|
||||
|
Reference in New Issue
Block a user