Пример #1
0
UnitActionPtr UnitStateMgr::CreateStandartState(UnitActionId stateId, ...)
{
    va_list vargs;
    va_start(vargs, stateId);

    UnitActionPtr state = UnitActionPtr(NULL);
    switch (stateId)
    {
        case UNIT_ACTION_CONFUSED:
        case UNIT_ACTION_FEARED:
        case UNIT_ACTION_CHASE:
            break;
        case UNIT_ACTION_STUN:
            state = UnitActionPtr(new StunnedState());
            break;
        case UNIT_ACTION_FEIGNDEATH:
            state = UnitActionPtr(new FeignDeathState());
            break;
        case UNIT_ACTION_ROOT:
            state = UnitActionPtr(new RootState());
            break;
        case UNIT_ACTION_ONVEHICLE:
        {
            uint32 param = va_arg(vargs,int32);
            state = UnitActionPtr(new OnVehicleState(param));
            break;
        }
        case UNIT_ACTION_CONTROLLED:
        {
            uint32 param = va_arg(vargs,int32);
            state = UnitActionPtr(new ControlledState(param));
            break;
        }
        case UNIT_ACTION_TAXI:
        {
            uint32 mountDisplayId = va_arg(vargs,uint32);
            uint32 path           = va_arg(vargs,uint32);
            uint32 startNode      = va_arg(vargs,uint32);
            state = UnitActionPtr(new TaxiState(mountDisplayId, path, startNode));
            break;
        }
        default:
            break;
    }

    va_end(vargs);

    if (!state)
        state = UnitActionPtr(new IdleMovementGenerator());

    return state;
}
Пример #2
0
UnitActionPtr UnitStateMgr::CurrentAction()
{
    ActionInfo* action = CurrentState();
    return action ? action->Action() : UnitActionPtr(NULL);
}
Пример #3
0
void MotionMaster::Mutate(MovementGenerator* mgen, UnitActionId stateId)
{
    GetUnitStateMgr()->PushAction(stateId, UnitActionPtr(mgen));
}