2012-09-09 20:50:15 +00:00
|
|
|
/*
|
|
|
|
* Bullet.cpp
|
|
|
|
*
|
|
|
|
* Created on: 12.08.2012
|
|
|
|
* Author: Felix
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "Bullet.h"
|
2012-12-22 00:14:30 +00:00
|
|
|
|
|
|
|
#include <Thor/Vectors.hpp>
|
2012-09-12 12:21:57 +00:00
|
|
|
|
2012-10-01 09:02:44 +00:00
|
|
|
#include "../abstract/Character.h"
|
2013-03-29 17:34:51 +00:00
|
|
|
#include "../util/Yaml.h"
|
2012-09-09 20:50:15 +00:00
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Places a bullet in the world.
|
|
|
|
*
|
|
|
|
* @param position World position of the bullet.
|
|
|
|
* @param world Box2d world.
|
|
|
|
* @param texture Texture to display for bullet.
|
|
|
|
*/
|
2013-05-26 18:44:59 +00:00
|
|
|
Bullet::Bullet(const sf::Vector2f& position, Character& shooter,
|
2013-03-30 01:30:11 +00:00
|
|
|
sf::Vector2f direction, const Yaml& config) :
|
2013-05-07 22:00:05 +00:00
|
|
|
Particle(position, CATEGORY_PARTICLE, ~CATEGORY_PARTICLE,
|
|
|
|
config, thor::rotatedVector(direction, -90.0f)),
|
2012-09-11 14:55:04 +00:00
|
|
|
mShooter(shooter),
|
2013-06-25 15:50:23 +00:00
|
|
|
mDamage(config.get("damage", 0)),
|
|
|
|
mSpeed(config.get("speed", 0.0f)) {
|
2013-05-07 22:00:05 +00:00
|
|
|
setSpeed(thor::rotatedVector(direction, -90.0f), mSpeed);
|
2012-09-09 20:50:15 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2013-05-26 18:44:59 +00:00
|
|
|
* Deletes this and calls onDamage if other is a character. Does not
|
|
|
|
* damage shooter.
|
2012-09-09 20:50:15 +00:00
|
|
|
*/
|
|
|
|
void
|
2013-03-03 20:28:12 +00:00
|
|
|
Bullet::onCollide(std::shared_ptr<Sprite> other) {
|
2012-09-09 20:50:15 +00:00
|
|
|
// Make sure we do not damage twice.
|
2013-05-26 18:44:59 +00:00
|
|
|
if (!getDelete() && (&*other != &mShooter)) {
|
2012-09-12 12:21:57 +00:00
|
|
|
// Call onShot on other, with damage as param.
|
2013-03-03 20:28:12 +00:00
|
|
|
if (other->getCategory() == CATEGORY_ACTOR) {
|
|
|
|
std::shared_ptr<Character> character = std::static_pointer_cast<Character>(other);
|
|
|
|
character->onDamage(mDamage);
|
2012-09-12 12:21:57 +00:00
|
|
|
}
|
2012-09-09 20:50:15 +00:00
|
|
|
setDelete(true);
|
|
|
|
}
|
|
|
|
}
|