89 lines
1.8 KiB
C++
89 lines
1.8 KiB
C++
/*
|
|
* PlayerController.cpp
|
|
*
|
|
* Created on: Nov 27, 2016
|
|
* Author: tibi
|
|
*/
|
|
|
|
#include <GameState.h>
|
|
#include <controller/PlayerController.h>
|
|
|
|
#include <cassert>
|
|
|
|
namespace farmlands
|
|
{
|
|
namespace controller
|
|
{
|
|
|
|
PlayerController::PlayerController()
|
|
: m_gameState(nullptr)
|
|
{
|
|
}
|
|
|
|
PlayerController::~PlayerController()
|
|
{
|
|
}
|
|
|
|
void PlayerController::initialize(GameState* gameState)
|
|
{
|
|
assert(gameState != nullptr);
|
|
m_gameState = gameState;
|
|
}
|
|
|
|
bool PlayerController::processEvent(SDL_Event& event)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
void PlayerController::updateLogic()
|
|
{
|
|
// Get keyboard status
|
|
const Uint8* keys = SDL_GetKeyboardState(NULL);
|
|
const SDL_Keymod mods = SDL_GetModState();
|
|
|
|
float deltaX = 0;
|
|
float deltaY = 0;
|
|
|
|
// Compute movement delta multiplier
|
|
float deltaMultiplier = 5.0f * m_gameState->elapsedTime; // Equivalent to units per second
|
|
if ((mods & KMOD_LSHIFT) || (mods & KMOD_RSHIFT))
|
|
deltaMultiplier *= 5;
|
|
|
|
// Handle scale changes (debugging only)
|
|
if (keys[SDL_SCANCODE_KP_MINUS])
|
|
m_gameState->camera.scale *= 1.0f - 0.05f * deltaMultiplier;
|
|
if (keys[SDL_SCANCODE_KP_PLUS])
|
|
m_gameState->camera.scale *= 1.0f + 0.05f * deltaMultiplier;
|
|
|
|
// Handle movement
|
|
if (keys[SDL_SCANCODE_UP])
|
|
deltaY -= 1;
|
|
if (keys[SDL_SCANCODE_DOWN])
|
|
deltaY += 1;
|
|
if (keys[SDL_SCANCODE_LEFT])
|
|
deltaX -= 1;
|
|
if (keys[SDL_SCANCODE_RIGHT])
|
|
deltaX += 1;
|
|
|
|
float newX = m_gameState->player.posX + deltaX * deltaMultiplier;
|
|
float newY = m_gameState->player.posY + deltaY * deltaMultiplier;
|
|
|
|
if (canMove(newX, newY))
|
|
{
|
|
m_gameState->player.posX = newX;
|
|
m_gameState->player.posY = newY;
|
|
|
|
m_gameState->camera.posX = m_gameState->player.posX;
|
|
m_gameState->camera.posY = m_gameState->player.posY - 1;
|
|
}
|
|
}
|
|
|
|
bool PlayerController::canMove(float x, float y)
|
|
{
|
|
// TODO: check collisions & stuff. For now, nothing
|
|
return true;
|
|
}
|
|
|
|
} /* namespace controller */
|
|
} /* namespace farmlands */
|