the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
1#include "stdafx.h"
2#include "ProcedureCompoundTask.h"
3
4ProcedureCompoundTask::~ProcedureCompoundTask()
5{
6 for(AUTO_VAR(it, m_taskSequence.begin()); it < m_taskSequence.end(); ++it)
7 {
8 delete (*it);
9 }
10}
11
12void ProcedureCompoundTask::AddTask(TutorialTask *task)
13{
14 if(task != NULL)
15 {
16 m_taskSequence.push_back(task);
17 }
18}
19
20int ProcedureCompoundTask::getDescriptionId()
21{
22 if(bIsCompleted)
23 return -1;
24
25 // Return the id of the first task not completed
26 int descriptionId = -1;
27 AUTO_VAR(itEnd, m_taskSequence.end());
28 for(AUTO_VAR(it, m_taskSequence.begin()); it < itEnd; ++it)
29 {
30 TutorialTask *task = *it;
31 if(!task->isCompleted())
32 {
33 task->setAsCurrentTask(true);
34 descriptionId = task->getDescriptionId();
35 break;
36 }
37 else if(task->getCompletionAction() == e_Tutorial_Completion_Complete_State)
38 {
39 bIsCompleted = true;
40 break;
41 }
42 }
43 return descriptionId;
44}
45
46int ProcedureCompoundTask::getPromptId()
47{
48 if(bIsCompleted)
49 return -1;
50
51 // Return the id of the first task not completed
52 int promptId = -1;
53 AUTO_VAR(itEnd, m_taskSequence.end());
54 for(AUTO_VAR(it, m_taskSequence.begin()); it < itEnd; ++it)
55 {
56 TutorialTask *task = *it;
57 if(!task->isCompleted())
58 {
59 promptId = task->getPromptId();
60 break;
61 }
62 }
63 return promptId;
64}
65
66bool ProcedureCompoundTask::isCompleted()
67{
68 // Return whether all tasks are completed
69
70 bool allCompleted = true;
71 bool isCurrentTask = true;
72 AUTO_VAR(itEnd, m_taskSequence.end());
73 for(AUTO_VAR(it, m_taskSequence.begin()); it < itEnd; ++it)
74 {
75 TutorialTask *task = *it;
76
77 if(allCompleted && isCurrentTask)
78 {
79 if(task->isCompleted())
80 {
81 if(task->getCompletionAction() == e_Tutorial_Completion_Complete_State)
82 {
83 allCompleted = true;
84 break;
85 }
86 }
87 else
88 {
89 task->setAsCurrentTask(true);
90 allCompleted = false;
91 isCurrentTask = false;
92 }
93 }
94 else if (!allCompleted)
95 {
96 task->setAsCurrentTask(false);
97 }
98 }
99
100 if(allCompleted)
101 {
102 //Disable all constraints
103 itEnd = m_taskSequence.end();
104 for(AUTO_VAR(it, m_taskSequence.begin()); it < itEnd; ++it)
105 {
106 TutorialTask *task = *it;
107 task->enableConstraints(false);
108 }
109 }
110 bIsCompleted = allCompleted;
111 return allCompleted;
112}
113
114void ProcedureCompoundTask::onCrafted(shared_ptr<ItemInstance> item)
115{
116 AUTO_VAR(itEnd, m_taskSequence.end());
117 for(AUTO_VAR(it, m_taskSequence.begin()); it < itEnd; ++it)
118 {
119 TutorialTask *task = *it;
120 task->onCrafted(item);
121 }
122}
123
124void ProcedureCompoundTask::handleUIInput(int iAction)
125{
126 AUTO_VAR(itEnd, m_taskSequence.end());
127 for(AUTO_VAR(it, m_taskSequence.begin()); it < itEnd; ++it)
128 {
129 TutorialTask *task = *it;
130 task->handleUIInput(iAction);
131 }
132}
133
134
135void ProcedureCompoundTask::setAsCurrentTask(bool active /*= true*/)
136{
137 bool allCompleted = true;
138 AUTO_VAR(itEnd, m_taskSequence.end());
139 for(AUTO_VAR(it, m_taskSequence.begin()); it < itEnd; ++it)
140 {
141 TutorialTask *task = *it;
142 if(allCompleted && !task->isCompleted())
143 {
144 task->setAsCurrentTask(true);
145 allCompleted = false;
146 }
147 else if (!allCompleted)
148 {
149 task->setAsCurrentTask(false);
150 }
151 }
152}
153
154bool ProcedureCompoundTask::ShowMinimumTime()
155{
156 if(bIsCompleted)
157 return false;
158
159 bool showMinimumTime = false;
160 AUTO_VAR(itEnd, m_taskSequence.end());
161 for(AUTO_VAR(it, m_taskSequence.begin()); it < itEnd; ++it)
162 {
163 TutorialTask *task = *it;
164 if(!task->isCompleted())
165 {
166 showMinimumTime = task->ShowMinimumTime();
167 break;
168 }
169 }
170 return showMinimumTime;
171}
172
173bool ProcedureCompoundTask::hasBeenActivated()
174{
175 if(bIsCompleted)
176 return true;
177
178 bool hasBeenActivated = false;
179 AUTO_VAR(itEnd, m_taskSequence.end());
180 for(AUTO_VAR(it, m_taskSequence.begin()); it < itEnd; ++it)
181 {
182 TutorialTask *task = *it;
183 if(!task->isCompleted())
184 {
185 hasBeenActivated = task->hasBeenActivated();
186 break;
187 }
188 }
189 return hasBeenActivated;
190}
191
192void ProcedureCompoundTask::setShownForMinimumTime()
193{
194 AUTO_VAR(itEnd, m_taskSequence.end());
195 for(AUTO_VAR(it, m_taskSequence.begin()); it < itEnd; ++it)
196 {
197 TutorialTask *task = *it;
198 if(!task->isCompleted())
199 {
200 task->setShownForMinimumTime();
201 break;
202 }
203 }
204}
205
206bool ProcedureCompoundTask::AllowFade()
207{
208 if(bIsCompleted)
209 return true;
210
211 bool allowFade = true;
212 AUTO_VAR(itEnd, m_taskSequence.end());
213 for(AUTO_VAR(it, m_taskSequence.begin()); it < itEnd; ++it)
214 {
215 TutorialTask *task = *it;
216 if(!task->isCompleted())
217 {
218 allowFade = task->AllowFade();
219 break;
220 }
221 }
222 return allowFade;
223}
224
225void ProcedureCompoundTask::useItemOn(Level *level, shared_ptr<ItemInstance> item, int x, int y, int z,bool bTestUseOnly)
226{
227 AUTO_VAR(itEnd, m_taskSequence.end());
228 for(AUTO_VAR(it, m_taskSequence.begin()); it < itEnd; ++it)
229 {
230 TutorialTask *task = *it;
231 task->useItemOn(level, item, x, y, z, bTestUseOnly);
232 }
233}
234
235void ProcedureCompoundTask::useItem(shared_ptr<ItemInstance> item, bool bTestUseOnly)
236{
237 AUTO_VAR(itEnd, m_taskSequence.end());
238 for(AUTO_VAR(it, m_taskSequence.begin()); it < itEnd; ++it)
239 {
240 TutorialTask *task = *it;
241 task->useItem(item, bTestUseOnly);
242 }
243}
244
245void ProcedureCompoundTask::onTake(shared_ptr<ItemInstance> item, unsigned int invItemCountAnyAux, unsigned int invItemCountThisAux)
246{
247 AUTO_VAR(itEnd, m_taskSequence.end());
248 for(AUTO_VAR(it, m_taskSequence.begin()); it < itEnd; ++it)
249 {
250 TutorialTask *task = *it;
251 task->onTake(item, invItemCountAnyAux, invItemCountThisAux);
252 }
253}
254
255void ProcedureCompoundTask::onStateChange(eTutorial_State newState)
256{
257 AUTO_VAR(itEnd, m_taskSequence.end());
258 for(AUTO_VAR(it, m_taskSequence.begin()); it < itEnd; ++it)
259 {
260 TutorialTask *task = *it;
261 task->onStateChange(newState);
262 }
263}