예제 #1
0
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);
}
예제 #2
0
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;
}
예제 #3
0
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();
}