This repository has been archived on 2019-12-07. You can view files and clone it, but cannot push or open issues or pull requests.
dungeon-gunner/source/sprites/Player.cpp
2013-03-30 02:30:11 +01:00

101 lines
2.1 KiB
C++

/*
* Player.cpp
*
* Created on: 21.07.2012
* Author: Felix
*/
#include "Player.h"
#include <Thor/Vectors.hpp>
/**
* Initializes Sprite.
*/
Player::Player(World& world, const sf::Vector2f& position, const Yaml& config) :
Character(world, Data(position, sf::Vector2f(0, 0), CATEGORY_ACTOR,
MASK_ALL), config),
mDirection(0) {
}
/**
* Sets the point where to look and shoot at.
*
* @param Absolute world coordinates of the crosshair.
*/
void
Player::setCrosshairPosition(const sf::Vector2f& position) {
mCrosshairPosition = position - getPosition();
}
/**
* Pull the trigger on the attached weapon.
*/
void
Player::pullTrigger() {
Character::pullTrigger();
}
/**
* Release the trigger on the attached weapon.
*/
void
Player::releaseTrigger() {
Character::releaseTrigger();
}
/**
* Moves the player to a destination point.
* Disables any previous calls to Player::setDirection().
*
* @param destination Absolute world coordinate of the destination point.
*/
void
Player::move(const sf::Vector2f& destination) {
setDestination(destination);
}
/**
* Sets the movement direction. This is destined for input via keys (eg. WASD).
* Disables any previous commands via Player::move().
*
* @param direction The direction to move to.
* @param unset False to start movement into the direction, true to stop it.
*/
void
Player::setDirection(Direction direction, bool unset) {
if (unset) {
mDirection = mDirection & ~direction;
} else {
mDirection = mDirection | direction;
}
// Convert directions into a vector.
sf::Vector2f dirVec(0, 0);
if (mDirection & Direction::RIGHT) {
dirVec.x += 1.0f;
}
if (mDirection & Direction::LEFT) {
dirVec.x += - 1.0f;
}
if (mDirection & Direction::DOWN) {
dirVec.y += 1.0f;
}
if (mDirection & Direction::UP) {
dirVec.y += - 1.0f;
}
setSpeed(dirVec, getMovementSpeed());
}
/**
* Check if we arrived at destination, turn towards cursor.
*/
void
Player::onThink(int elapsed) {
Character::onThink(elapsed);
if (!mDirection) {
// Only use path finding movement if no direct input movement active.
Character::move();
}
// Look towards crosshair.
Sprite::setDirection(mCrosshairPosition);
}