Repository navigation
Expand file tree
/
Copy pathApplicationManager.cpp
More file actions
173 lines (155 loc) · 4.2 KB
/
Copy pathApplicationManager.cpp
File metadata and controls
173 lines (155 loc) · 4.2 KB
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
#include "ApplicationManager.h"
#include"Load.h"
#include "Save.h"
#include "Copy.h"
#include "Cut.h"
#include "Paste.h"
#include"Delete.h"
#include "Grid.h"
#include "AddBeltAction.h"
#include "AddRotatingGearAction.h"
#include "AddFlagAction.h"
#include "Switchtoplay.h"
#include "switchtodesignmode.h"
#include "newgame.h"
#include "repotandrepair.h"
#include "playmode.h"
///TODO: Add #include for all action types
#include"AddWorkshopAction.h"
#include "AddWaterPit.h"
#include "AddAntennaAction.h"
#include "AddDangerzoneAction.h"
#include "AddRotatingGearAction.h"
#include "shotingphase.h"
ApplicationManager::ApplicationManager()
{
// Create Input, output and Grid
pOut = new Output();
pIn = pOut->CreateInput();
pGrid = new Grid(pIn, pOut);
turn = 0;
}
////////////////////////////////////////////////////////////////////////////////////
ApplicationManager::~ApplicationManager()
{
delete pGrid;
}
//==================================================================================//
// Interface Management Functions //
//==================================================================================//
Grid * ApplicationManager::GetGrid() const
{
return pGrid;
}
void ApplicationManager::UpdateInterface() const
{
pGrid->UpdateInterface();
}
//==================================================================================//
// Actions Related Functions //
//==================================================================================//
ActionType ApplicationManager::GetUserAction() const
{
// Ask the input to get the action from the user.
return pIn->GetUserAction();
}
////////////////////////////////////////////////////////////////////////////////////
// Creates an action and executes it
void ApplicationManager::ExecuteAction(ActionType ActType)
{
Action* pAct = NULL;
// According to Action Type, create the corresponding action object
switch (ActType)
{
case ADD_BELT:
pAct = new AddBeltAction(this);
break;
case ADD_ROTATINGGEAR:
// create an object of AddRotatingGearAction here
pAct = new AddRotatingGearAction(this);
break;
case ADD_FLAG:
// create an object of AddFlagAction here
pAct = new AddFlagAction(this);
break;
case SET_ANTENNA:
// create an object of AddAntennaAction here
pAct = new AddAntennaAction(this);
break;
case COPY_GAME_OBJECT:
pAct = new Copy(this);
break;
case CUT_GAME_OBJECT:
pAct = new Cut(this);
break;
case PASTE_GAME_OBJECT:
pAct = new Paste(this);
break;
case DELETE_GAME_OBJECT:
pAct = new Delete(this);
break;
case SAVE_GRID:
pAct = new Save(this);
break;
case OPEN_GRID:
pAct = new Load(this);
break;
case EXIT:
break;
case TO_PLAY_MODE: //TODO:
pAct = new playmode(this, pOut); // temporary till you made its action class (CHANGE THIS LATTER)
break;
case EXECUTE_COMMANDS:
turn++;
pAct = new excute(this, pOut);
break;
case TO_DESIGN_MODE: //TODO:
pAct = new switchtodesignmode(this, pOut); // temporary till you made its action class (CHANGE THIS LATTER)
break;
case NEW_GAME:
turn = 0;
pAct = new newgame(this, pOut);
break;
case REPOOT_AND_REPAIR:
turn++;
pAct = new repotandrepair(this, pOut);
break;
case SELECT_COMMAND:
pAct = new selectcommand(this, pOut);
break;
///TODO: Add a case for EACH Action type in the Design mode or Play mode
case SET_WORKSHOP:
pAct = new AddWorkshopAction(this);
break;
case SET_WATER_PIT:
pAct = new AddWaterPit(this);
break;
case SET_DANGER_ZONE:
pAct = new AddDangerzoneAction(this);
break;
case SET_ROTATING_GEAR_CLOCK:
pAct = new AddRotatingGearAction(this);
static_cast<AddRotatingGearAction*>(pAct)->SetClockwise(true);
break;
case SET_ROTATING_GEAR_ANTI_CLOCK:
pAct = new AddRotatingGearAction(this);
static_cast<AddRotatingGearAction*>(pAct)->SetClockwise(false);
break;
case STATUS: // a click on the status bar ==> no action
return;
}
// Execute the created action
if(pAct != NULL)
{
pAct->Execute(); // Execute
delete pAct; // Action is not needed any more after executing ==> delete it
pAct = NULL;
}
if (turn / 2 == 1.00 && ActType != NEW_GAME)
{
turn = 0;
Action* shootingAction = new shootingphase(this);
shootingAction->Execute();
delete shootingAction;
}
}