2012-09-09 20:50:15 +00:00
|
|
|
/*
|
2012-12-20 09:31:32 +00:00
|
|
|
* Body.cpp
|
2012-09-09 20:50:15 +00:00
|
|
|
*
|
|
|
|
* Created on: 11.08.2012
|
|
|
|
* Author: Felix
|
|
|
|
*/
|
|
|
|
|
2012-12-20 09:31:32 +00:00
|
|
|
#include "Body.h"
|
2012-09-09 20:50:15 +00:00
|
|
|
|
|
|
|
#include <math.h>
|
|
|
|
|
|
|
|
#include <Thor/Vectors.hpp>
|
|
|
|
|
2012-12-22 14:10:26 +00:00
|
|
|
const std::string Body::KEY_SIZE = "size";
|
|
|
|
const sf::Vector2i Body::DEFAULT_SIZE = sf::Vector2i(50, 50);
|
2012-10-13 10:22:18 +00:00
|
|
|
|
2012-09-09 20:50:15 +00:00
|
|
|
/**
|
|
|
|
* Initializes Box2D body.
|
|
|
|
*
|
|
|
|
* @param data Data needed for construction.
|
|
|
|
*/
|
2012-12-22 14:10:26 +00:00
|
|
|
Body::Body(const Data& data, const Yaml& config, const sf::Vector2i& pSize) :
|
2012-12-22 12:44:17 +00:00
|
|
|
mPosition(data.position),
|
|
|
|
mSize(config.get(KEY_SIZE, DEFAULT_SIZE)),
|
|
|
|
mAngle(0),
|
|
|
|
mCategory(data.category),
|
|
|
|
mMask(data.mask),
|
2012-09-09 20:50:15 +00:00
|
|
|
mDelete(false) {
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2012-12-22 00:14:30 +00:00
|
|
|
* Used to make this class pure virtual without any pure virtual function.
|
2012-09-09 20:50:15 +00:00
|
|
|
*/
|
2012-12-20 09:31:32 +00:00
|
|
|
Body::~Body() {
|
2012-09-09 20:50:15 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Initializes container.
|
|
|
|
*/
|
2012-12-22 14:10:26 +00:00
|
|
|
Body::Data::Data(const sf::Vector2f& position, float angle,
|
2012-12-22 12:44:17 +00:00
|
|
|
Category category, unsigned short maskExclude) :
|
|
|
|
position(position),
|
|
|
|
angle(angle),
|
2012-10-13 10:22:18 +00:00
|
|
|
category(category),
|
2012-12-22 12:44:17 +00:00
|
|
|
mask(maskExclude) {
|
2012-09-09 20:50:15 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the position of the sprite (center).
|
|
|
|
*/
|
2012-12-22 14:10:26 +00:00
|
|
|
sf::Vector2f
|
2012-12-20 09:31:32 +00:00
|
|
|
Body::getPosition() const {
|
2012-12-22 12:44:17 +00:00
|
|
|
return mPosition;
|
2012-09-09 20:50:15 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the movement speed of the body.
|
|
|
|
*/
|
2012-12-22 14:10:26 +00:00
|
|
|
sf::Vector2f
|
2012-12-20 09:31:32 +00:00
|
|
|
Body::getSpeed() const {
|
2012-12-22 12:44:17 +00:00
|
|
|
return mSpeed;
|
2012-09-09 20:50:15 +00:00
|
|
|
}
|
|
|
|
|
2012-09-15 13:28:15 +00:00
|
|
|
/**
|
|
|
|
* Returns the rotation of the body (converted to an SFML angle).
|
2012-09-09 20:50:15 +00:00
|
|
|
*/
|
|
|
|
float
|
2012-12-20 09:31:32 +00:00
|
|
|
Body::getAngle() const {
|
2012-12-22 12:44:17 +00:00
|
|
|
return mAngle;
|
2012-09-09 20:50:15 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns true if this object should be deleted.
|
|
|
|
*/
|
|
|
|
bool
|
2012-12-20 09:31:32 +00:00
|
|
|
Body::getDelete() const {
|
2012-09-09 20:50:15 +00:00
|
|
|
return mDelete;
|
|
|
|
}
|
2012-09-12 12:21:57 +00:00
|
|
|
|
2012-09-11 17:37:19 +00:00
|
|
|
/**
|
|
|
|
* Returns the Physical::Category of this object.
|
2012-09-12 12:21:57 +00:00
|
|
|
*/
|
2012-12-20 09:31:32 +00:00
|
|
|
Body::Category
|
|
|
|
Body::getCategory() const {
|
2012-12-22 12:44:17 +00:00
|
|
|
return mCategory;
|
2012-09-09 20:50:15 +00:00
|
|
|
}
|
|
|
|
|
2012-09-28 16:43:28 +00:00
|
|
|
/**
|
|
|
|
* Returns the size of the body as a vector.
|
|
|
|
*/
|
2012-12-22 14:10:26 +00:00
|
|
|
sf::Vector2i
|
2012-12-20 09:31:32 +00:00
|
|
|
Body::getSize() const {
|
2012-12-22 12:44:17 +00:00
|
|
|
return mSize;
|
2012-09-28 16:43:28 +00:00
|
|
|
}
|
|
|
|
|
2012-09-09 20:50:15 +00:00
|
|
|
/**
|
|
|
|
* This method filters collisions with other physicals. Implement it if you want to
|
|
|
|
* limit collisions to/with certain objects. Default implementation always returns true.
|
|
|
|
*
|
|
|
|
* @param other The Physical this object is about to collide with.
|
|
|
|
* @return True if the objects should collide.
|
|
|
|
*/
|
|
|
|
bool
|
2012-12-20 09:31:32 +00:00
|
|
|
Body::doesCollide(Body& other) {
|
2012-09-09 20:50:15 +00:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Called when a collision with another body occured. Override this method
|
|
|
|
* to manage collision events.
|
|
|
|
*
|
|
|
|
* @param other Reference to the other Physical in the collision.
|
|
|
|
* @param category The Category of the other object (as passed in constructor).
|
|
|
|
*/
|
|
|
|
void
|
2012-12-22 00:14:30 +00:00
|
|
|
Body::onCollide(Body& other, Category type) {
|
2012-09-09 20:50:15 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Set to true to mark this object for deletion from the world.
|
|
|
|
*/
|
|
|
|
void
|
2012-12-20 09:31:32 +00:00
|
|
|
Body::setDelete(bool value) {
|
2012-09-09 20:50:15 +00:00
|
|
|
mDelete = value;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets movement speed and direction of the body. Set either value to zero to stop movement.
|
|
|
|
*
|
|
|
|
* @param direction The direction the body moves in, does not have to be normalized.
|
|
|
|
* @param speed The value of the movement speed to be used.
|
|
|
|
*/
|
|
|
|
void
|
2012-12-22 14:10:26 +00:00
|
|
|
Body::setSpeed(sf::Vector2f direction, float speed) {
|
|
|
|
if (direction != sf::Vector2f()) {
|
2012-12-22 12:44:17 +00:00
|
|
|
thor::setLength(direction, speed);
|
|
|
|
}
|
|
|
|
mSpeed = direction;
|
2012-09-09 20:50:15 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the angle of the body based on the direction of a vector.
|
|
|
|
*/
|
|
|
|
void
|
2012-12-20 09:31:32 +00:00
|
|
|
Body::setAngle(float angle) {
|
2012-12-22 12:44:17 +00:00
|
|
|
mAngle = angle;
|
2012-09-09 20:50:15 +00:00
|
|
|
}
|