2016-09-27 16:23:58 +00:00
|
|
|
#include "commands.hpp"
|
|
|
|
|
2016-09-27 21:07:11 +00:00
|
|
|
#include <iostream>
|
|
|
|
|
2016-09-28 09:35:56 +00:00
|
|
|
#include "trace.hpp"
|
|
|
|
#include "util.hpp"
|
|
|
|
|
2016-09-27 16:23:58 +00:00
|
|
|
namespace game {
|
|
|
|
void ShootCommand::apply(Player *player, State *state) const
|
|
|
|
{
|
|
|
|
//std::cout<<"apply command " << name() << std::endl;
|
|
|
|
|
2016-09-27 18:13:09 +00:00
|
|
|
// TODO: idea
|
|
|
|
// shoot multiple rockets at once or from different positions after
|
|
|
|
// level up / upgrade ...
|
2016-09-28 11:00:40 +00:00
|
|
|
|
|
|
|
// angles are supplied in degrees and are CCW
|
|
|
|
Missile *missile = new Missile(player, player->ship->position, -util::deg2rad(m_angle), player->speed);
|
2016-09-27 18:13:09 +00:00
|
|
|
|
|
|
|
Trace *trace = new Trace(missile);
|
|
|
|
missile->trace = trace;
|
|
|
|
|
2016-09-27 20:35:16 +00:00
|
|
|
player->energy -= player->speed;
|
2016-09-27 18:13:09 +00:00
|
|
|
player->missiles.push_back(missile);
|
|
|
|
|
|
|
|
state->addTrace(trace);
|
2016-09-27 16:23:58 +00:00
|
|
|
}
|
|
|
|
|
2016-09-27 20:35:16 +00:00
|
|
|
bool ShootCommand::ready(const Player *player, const State *state) const
|
2016-09-27 16:23:58 +00:00
|
|
|
{
|
|
|
|
(void) state;
|
|
|
|
|
|
|
|
// TODO
|
2016-09-27 20:35:16 +00:00
|
|
|
return player->alive && player->energy >= player->speed;
|
2016-09-27 16:23:58 +00:00
|
|
|
//return player->alive;
|
|
|
|
}
|
2016-09-27 20:35:16 +00:00
|
|
|
|
|
|
|
void ChangeNameCommand::apply(Player *player, State *state) const
|
|
|
|
{
|
|
|
|
// discard if not unique
|
|
|
|
for (const Player *other : state->players) {
|
|
|
|
if (m_name == other->name) {
|
|
|
|
std::cout << "name '" << m_name << "' already given to player #" << other->id << std::endl;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
player->name = m_name;
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetSpeedCommand::apply(Player *player, State *state) const
|
|
|
|
{
|
|
|
|
(void) state;
|
|
|
|
player->speed = m_speed;
|
|
|
|
}
|
|
|
|
|
|
|
|
void ClearTracesCommand::apply(Player *player, State *state) const
|
|
|
|
{
|
2016-09-27 21:07:11 +00:00
|
|
|
std::cout<<"clearing traces!!!" << std::endl;
|
|
|
|
|
2016-09-28 15:38:32 +00:00
|
|
|
std::vector<Trace*> rm;
|
2016-09-27 21:07:11 +00:00
|
|
|
|
2016-09-28 15:38:32 +00:00
|
|
|
for (Trace *trace : state->traces) {
|
|
|
|
if (trace->missile == nullptr && trace->player == player) {
|
|
|
|
rm.push_back(trace);
|
2016-09-27 20:35:16 +00:00
|
|
|
}
|
|
|
|
}
|
2016-09-28 15:38:32 +00:00
|
|
|
|
|
|
|
for (Trace *trace : rm) {
|
|
|
|
state->traces.remove(trace);
|
|
|
|
}
|
2016-09-27 20:35:16 +00:00
|
|
|
}
|
2016-09-27 21:50:44 +00:00
|
|
|
|
|
|
|
#if 0
|
|
|
|
bool TakeOverPlayerCommand::ready(const Player *player, const State *state) const
|
|
|
|
{
|
|
|
|
(void) state;
|
|
|
|
return state->havePlayerGrantFor(player->id, m_otherPlayerId);
|
|
|
|
}
|
|
|
|
|
|
|
|
void TakeOverPlayerCommand::apply(Player *player, State *state) const
|
|
|
|
{
|
|
|
|
if (
|
|
|
|
state->playerGrant(player->id, m_otherPlayerId);
|
|
|
|
}
|
|
|
|
#endif
|
2016-09-27 16:23:58 +00:00
|
|
|
}
|