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; }
UnitActionPtr UnitStateMgr::CurrentAction() { ActionInfo* action = CurrentState(); return action ? action->Action() : UnitActionPtr(NULL); }
void MotionMaster::Mutate(MovementGenerator* mgen, UnitActionId stateId) { GetUnitStateMgr()->PushAction(stateId, UnitActionPtr(mgen)); }