the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 263 lines 5.6 kB view raw
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}