CWaitCommandsAI::DeathWait::DeathWait(const Command& cmd) : Wait(CMD_WAITCODE_DEATHWAIT) { GML_RECMUTEX_LOCK(sel); // DeathWait const CUnitSet& selUnits = selectedUnits.selectedUnits; if (cmd.params.size() == 1) { const int unitID = (int)cmd.params[0]; if ((unitID < 0) || (static_cast<size_t>(unitID) >= uh->MaxUnits())) { return; } CUnit* unit = uh->units[unitID]; if (unit == NULL) { return; } if (selUnits.find(unit) != selUnits.end()) { return; } deathUnits.insert(unit); } else if (cmd.params.size() == 6) { const float3 pos0(cmd.params[0], cmd.params[1], cmd.params[2]); const float3 pos1(cmd.params[3], cmd.params[4], cmd.params[5]); CUnitSet tmpSet; SelectAreaUnits(pos0, pos1, tmpSet, false); CUnitSet::iterator it; for (it = tmpSet.begin(); it != tmpSet.end(); ++it) { if (selUnits.find(*it) == selUnits.end()) { deathUnits.insert(*it); } } if (deathUnits.empty()) { return; } } else { return; // unknown param config } valid = true; key = GetNewKey(); waitUnits = selUnits; Command waitCmd(CMD_WAIT, cmd.options); waitCmd.params.push_back(code); waitCmd.params.push_back(GetFloatFromKey(key)); selectedUnits.GiveCommand(waitCmd); CUnitSet::iterator it; for (it = waitUnits.begin(); it != waitUnits.end(); ++it) { AddDeathDependence((CObject*)(*it)); } for (it = deathUnits.begin(); it != deathUnits.end(); ++it) { AddDeathDependence((CObject*)(*it)); } return; }
CWaitCommandsAI::TimeWait::TimeWait(const Command& cmd, CUnit* _unit) : Wait(CMD_WAITCODE_TIMEWAIT) { if (cmd.params.size() != 1) { return; } valid = true; key = GetNewKey(); unit = _unit; enabled = false; endFrame = 0; duration = GAME_SPEED * (int)cmd.params[0]; factory = (dynamic_cast<CFactory*>(unit) != NULL); Command waitCmd(CMD_WAIT, cmd.options); waitCmd.params.push_back(code); waitCmd.params.push_back(GetFloatFromKey(key)); selectedUnits.ClearSelected(); selectedUnits.AddUnit(unit); selectedUnits.GiveCommand(waitCmd); AddDeathDependence((CObject*)unit); return; }
void init_shell() { getCmdCount(); populateCommands(); tcputs("$>> ", COLOR_GREEN); irq_install_handler(1, keyboard_handler); waitCmd(); }
void runShell(char* command) { NODE* cmd; cmd = findCommand(command); if (cmd) cmd->cmd(); tcputs("$>> ", COLOR_GREEN); waitCmd(); }
CWaitCommandsAI::SquadWait::SquadWait(const Command& cmd) : Wait(CMD_WAITCODE_SQUADWAIT) { GML_RECMUTEX_LOCK(sel); // SquadWait if (cmd.params.size() != 1) { return; } squadCount = (int)cmd.params[0]; if (squadCount < 2) { return; } const CUnitSet& selUnits = selectedUnits.selectedUnits; CUnitSet::const_iterator it; for (it = selUnits.begin(); it != selUnits.end(); ++it) { CUnit* unit = *it; if (dynamic_cast<CFactory*>(unit)) { buildUnits.insert(unit); } else { waitUnits.insert(unit); } } if (buildUnits.empty() && ((int)waitUnits.size() < squadCount)) { return; } valid = true; key = GetNewKey(); Command waitCmd(CMD_WAIT, cmd.options); waitCmd.params.push_back(code); waitCmd.params.push_back(GetFloatFromKey(key)); SendCommand(waitCmd, buildUnits); SendCommand(waitCmd, waitUnits); for (it = buildUnits.begin(); it != buildUnits.end(); ++it) { AddDeathDependence((CObject*)(*it)); } for (it = waitUnits.begin(); it != waitUnits.end(); ++it) { AddDeathDependence((CObject*)(*it)); } UpdateText(); return; }
CWaitCommandsAI::GatherWait::GatherWait(const Command& cmd) : Wait(CMD_WAITCODE_GATHERWAIT) { GML_RECMUTEX_LOCK(sel); // GatherWait if (!cmd.params.empty()) { return; } // only add valid units const CUnitSet& selUnits = selectedUnits.selectedUnits; CUnitSet::const_iterator sit; for (sit = selUnits.begin(); sit != selUnits.end(); ++sit) { CUnit* unit = *sit; const UnitDef* ud = unit->unitDef; if (ud->canmove && (dynamic_cast<CFactory*>(unit) == NULL)) { waitUnits.insert(unit); } } if (waitUnits.size() < 2) { return; // one man does not a gathering make } valid = true; key = GetNewKey(); Command waitCmd(CMD_WAIT, SHIFT_KEY); waitCmd.params.push_back(code); waitCmd.params.push_back(GetFloatFromKey(key)); selectedUnits.GiveCommand(waitCmd, true); CUnitSet::iterator wit; for (wit = waitUnits.begin(); wit != waitUnits.end(); ++wit) { AddDeathDependence((CObject*)(*wit)); } return; }
void CWaitCommandsAI::Wait::SendWaitCommand(const CUnitSet& unitSet) { Command waitCmd(CMD_WAIT); SendCommand(waitCmd, unitSet); }