66 lines
1.7 KiB
C++
66 lines
1.7 KiB
C++
#pragma once
|
|
|
|
#include <glm/vec2.hpp>
|
|
#include <glm/vec3.hpp>
|
|
|
|
namespace game {
|
|
class State;
|
|
class Ship;
|
|
class Planet;
|
|
class Player;
|
|
class State;
|
|
class Trace;
|
|
|
|
// missile belongs to a player and optionally fills a trace behind it.
|
|
// trace then belongs to the player.
|
|
class Missile {
|
|
public:
|
|
enum class HitObject {
|
|
Nothing,
|
|
HitPlayer,
|
|
HitPlanet,
|
|
// HitMissile,
|
|
LeftUniverse
|
|
};
|
|
|
|
// missile advances to pos. if hit != Nothing, it hits something and
|
|
// stops existing afterwards.
|
|
class Event {
|
|
public:
|
|
Event(const glm::vec2 &pos) : Event(pos, HitObject::Nothing)
|
|
{
|
|
}
|
|
|
|
Event(const glm::vec2 &pos, HitObject hit)
|
|
: hit(hit), pos(pos)
|
|
{
|
|
}
|
|
|
|
Event(const glm::vec2 &pos, int playerIdKiller, int playerIdVictim)
|
|
: Event(pos, HitObject::HitPlayer)
|
|
{
|
|
this->playerIdKiller = playerIdKiller;
|
|
this->playerIdVictim = playerIdVictim;
|
|
}
|
|
|
|
HitObject hit;
|
|
glm::vec2 pos;
|
|
|
|
int playerIdKiller;
|
|
int playerIdVictim;
|
|
};
|
|
|
|
Missile(Player *player, const glm::vec2 &pos, float angle, float speed);
|
|
~Missile();
|
|
|
|
// try to advance. if something will be hit, return the first hit in
|
|
// time.
|
|
Missile::Event advance(const game::State *state, float dt);
|
|
|
|
Player *player; // owner won't be hit by own missiles
|
|
glm::vec2 position;
|
|
glm::vec2 velocity;
|
|
Trace *trace;
|
|
};
|
|
}
|
|
|