public static void Start(GUnit unit, int id, Vector3 param, bool sync = true) { var stateProcessData = unit.GetData <ObjectStateProcessData>(); var stateData = ObjectStateDataDict.Get(unit, id); if (!stateData.objectState.CanStart(unit, stateProcessData, stateData, param)) { return; } if (sync && unit.GetData <ObjectSyncData>() == null) { sync = false; } if (sync) { ObjectSyncServer.AddState(unit, id, param, ObjectStateType.Start); } else { stateData.param = param; Start(stateProcessData, stateData); } }
static IndependentObjectStateData GetHighestPriorityState(GUnit unit, ObjectStateProcessData stateProcessData) { var stateDataList = ObjectStateDataDict.Get(unit).Where(_ => _ is IndependentObjectStateData); var minPriority = 0; IndependentObjectStateData result = null; foreach (var stateData in stateDataList) { if (stateData.stateTypeProperty.Value != ObjectStateType.Stop) { continue; } if (!stateData.objectState.CanStart(unit, stateProcessData, stateData, Vector3.zero)) { continue; } var independentStateData = stateData as IndependentObjectStateData; if (independentStateData.priority >= minPriority) { minPriority = independentStateData.priority; result = independentStateData; } } return(result); }
protected override void OnAdd(GUnit unit) { var stateDataList = ObjectStateDataDict.Get(unit); foreach (var stateData in stateDataList) { var stateModule = ObjectStateModuleDict.Get(stateData.id); stateData.objectState = stateModule; stateModule.Init(unit, stateData); } }
protected override void OnRemove(GUnit unit) { var stateDataList = ObjectStateDataDict.Get(unit); foreach (var stateData in stateDataList) { stateData.objectState.Release(unit, stateData); stateData.objectState = null; Pool.Release(stateData); } ObjectStateDataDict.Clear(unit); }
static void AttachStateData(GUnit unit) { unit.AddData <ObjectStateProcessData>(); var stateData = Pool.Get <IndependentObjectStateData>(); stateData.id = ObjectTestConstant.STATE_IDLE; stateData.isDefault = true; stateData.isLoop = true; stateData.priority = 0; ObjectStateDataDict.Set(unit, stateData.id, stateData); stateData = Pool.Get <IndependentObjectStateData>(); stateData.id = ObjectTestConstant.STATE_MOVE; stateData.isLoop = true; stateData.priority = 1; ObjectStateDataDict.Set(unit, stateData.id, stateData); unit.AddData <ObjectMoveParamData>(); WorldManager.Instance.Factory.InitObjectStateModule(); }
public static void Finish(GUnit unit, int id, bool sync = true) { var stateProcessData = unit.GetData <ObjectStateProcessData>(); var stateData = ObjectStateDataDict.Get(unit, id); if (!stateData.objectState.CanFinish(unit, stateProcessData, stateData)) { return; } if (sync && unit.GetData <ObjectSyncData>() == null) { sync = false; } if (sync) { ObjectSyncServer.AddState(unit, id, Vector3.zero, ObjectStateType.Finish); } else { Finish(unit, stateProcessData, stateData); } }