Example #1
0
        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);
            }
        }
Example #2
0
        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);
        }
Example #3
0
        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);
            }
        }
Example #4
0
        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);
        }
Example #5
0
        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();
        }
Example #6
0
        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);
            }
        }