2012-09-09 20:50:15 +00:00
|
|
|
/*
|
|
|
|
* Player.cpp
|
|
|
|
*
|
|
|
|
* Created on: 21.07.2012
|
|
|
|
* Author: Felix
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "Player.h"
|
|
|
|
|
|
|
|
#include <Thor/Vectors.hpp>
|
|
|
|
|
|
|
|
#include "../util/Vector.h"
|
|
|
|
#include "../items/Weapon.h"
|
|
|
|
|
|
|
|
const float Player::SPEED = 100.0f;
|
2012-09-11 19:12:34 +00:00
|
|
|
const Vector2i Player::SIZE = Vector2i(50, 50);
|
2012-09-09 20:50:15 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Initializes Sprite.
|
|
|
|
*/
|
2012-09-10 15:54:17 +00:00
|
|
|
Player::Player(b2World& world, Collection& collection, const Vector2f& position) :
|
2012-09-11 19:12:34 +00:00
|
|
|
Sprite("player.png", PhysicalData(position, SIZE, world,
|
2012-09-09 20:50:15 +00:00
|
|
|
CATEGORY_ACTOR, MASK_ALL, true)),
|
2012-09-11 14:48:28 +00:00
|
|
|
Actor(100),
|
2012-09-09 20:50:15 +00:00
|
|
|
mWeapon(*this, collection, world),
|
|
|
|
mDestination(Vector2i(50, 50)) {
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the point where to look and shoot at.
|
|
|
|
*
|
|
|
|
* @param Absolute world coordinates of the crosshair.
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
Player::setCrosshairPosition(const Vector2f& position) {
|
|
|
|
mCrosshairPosition = position - getPosition();
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* Fire the attacked Weapon, emitting a Bullet object.
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
Player::fire() {
|
|
|
|
mWeapon.fire();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Moves the player to a destination point.
|
|
|
|
*
|
|
|
|
* @param destination Absolute world coordinate of the destination point.
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
Player::move(const Vector2f& destination) {
|
|
|
|
mDestination = destination;
|
|
|
|
// Convert to relative destination.
|
|
|
|
setSpeed(mDestination - getPosition(), SPEED);
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
Player::onThink(float elapsedTime) {
|
|
|
|
// Stop if we are close enough.
|
|
|
|
if (thor::length(mDestination - getPosition()) < 1.0f) {
|
|
|
|
setSpeed(Vector2f(), 0);
|
|
|
|
}
|
|
|
|
// Look towards crosshair.
|
|
|
|
setAngle(angle(mCrosshairPosition));
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Stop movement if we collide with anything except bullets.
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
Player::onCollide(Physical& other, uint16 category) {
|
|
|
|
if (category != CATEGORY_PARTICLE) {
|
|
|
|
mDestination = getPosition();
|
|
|
|
}
|
|
|
|
}
|