/
CombatCmd.cpp
110 lines (83 loc) · 2.68 KB
/
CombatCmd.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include "stdafx.h"
#include "CombatCmd.h"
#include "Output.h"
#include "Input.h"
#include "Controller.h"
#include "LiveGame.h"
#include "Record.h"
#include "CommitSession.h"
#include "CombatPhase.h"
#include "Battle.h"
#include "Dice.h"
#include "Player.h"
CombatCmd::CombatCmd(Colour colour, const LiveGame& game) : Cmd(colour)
{
}
void CombatCmd::UpdateClient(const Controller& controller, const LiveGame& game) const
{
controller.SendMessage(Output::ChooseCombat(game), GetPlayer(game));
}
Cmd::ProcessResult CombatCmd::Process(const Input::CmdMessage& msg, CommitSession& session)
{
auto& m = VerifyCastInput<const Input::CmdCombat>(msg);
const Battle& battle = session.GetGame().GetBattle();
VERIFY_INPUT_MSG("missiles must be fired", !battle.IsMissilePhase() || m.m_fire);
Dice dice;
battle.RollDice(session.GetGame(), dice);
return ProcessResult(new CombatDiceCmd(m_colour, session.GetGame(), dice));
}
REGISTER_DYNAMIC(CombatCmd)
//-----------------------------------------------------------------------------
CombatDiceCmd::CombatDiceCmd(Colour colour, const LiveGame& game, const Dice& dice) : Cmd(colour), m_dice(dice)
{
}
void CombatDiceCmd::UpdateClient(const Controller& controller, const LiveGame& game) const
{
// Send to all players.
// TODO: send hittable target ships.
controller.SendMessage(Output::ChooseDice(game, m_dice, GetPlayer(game).GetID()), game);
}
Cmd::ProcessResult CombatDiceCmd::Process(const Input::CmdMessage& msg, CommitSession& session)
{
auto& m = VerifyCastInput<const Input::CmdDice>(msg);
session.GetController().SendMessage(Output::ChooseFinished(), GetPlayer(session.GetGame()));
// TODO: manually assign hits.
DoRecord(session.GetGame().GetBattle().CreateAttackRecord(session.GetGame(), m_dice), session);
// TODO: Send attack animation
return nullptr;
}
void CombatDiceCmd::Save(Serial::SaveNode& node) const
{
__super::Save(node);
node.SaveClass("dice", m_dice);
}
void CombatDiceCmd::Load(const Serial::LoadNode& node)
{
__super::Load(node);
node.LoadClass("dice", m_dice);
}
REGISTER_DYNAMIC(CombatDiceCmd)
//-----------------------------------------------------------------------------
class CombatRecord : public TeamRecord
{
public:
CombatRecord() {}
CombatRecord(Colour colour) : TeamRecord(colour) {}
virtual void Save(Serial::SaveNode& node) const override
{
__super::Save(node);
}
virtual void Load(const Serial::LoadNode& node) override
{
__super::Load(node);
}
private:
virtual void Apply(bool bDo, const Game& game, const Team& team, GameState& gameState, TeamState& teamState) override
{
}
virtual std::string GetTeamMessage() const
{
return FormatString("did some combat");
}
};
REGISTER_DYNAMIC(CombatRecord)