bool PlanStepEx::IsCurrentStateTimeout(const WorldClock& p_clock) { unsigned timeout = _stateTimeout[INDEX(_state, ExecutionStateType)]; unsigned startTime = _stateStartTime[INDEX(_state, ExecutionStateType)]; // 0 means no timeout and thus meaning infinite timeout if (timeout == 0) return false; else return ((p_clock.ElapsedMilliseconds() - startTime) > timeout); }
void PlanStepEx::State(ExecutionStateType p_state, RtsGame& game, const WorldClock& p_clock) { string stepName = ToString(); const char* oldStateName = Enums[_state]; const char* newStateName = Enums[p_state]; LogInfo("%s: '%s'->'%s'", stepName.c_str(), oldStateName, newStateName); _stateStartTime[INDEX(p_state, ExecutionStateType)] = p_clock.ElapsedMilliseconds(); _state = p_state; }
void IMSystemManager::Update(const WorldClock& p_clock) { unsigned elapsedTimeSinceLastUpdateMs = p_clock.ElapsedMilliseconds() - m_lastUpdateTimeMs; for (IMContainer::iterator itr = m_managedMaps.begin(); itr != m_managedMaps.end(); ++itr) { switch (itr->first) { case IM_BuildingData: if (elapsedTimeSinceLastUpdateMs > m_params.OccupanceIMUpdateInterval) continue; break; case IM_GroundControl: if (elapsedTimeSinceLastUpdateMs > m_params.GrndCtrlIMUpdateInterval) continue; break; } itr->second->Update(p_clock); } m_lastUpdateTimeMs = p_clock.ElapsedMilliseconds(); }