예제 #1
0
        public override void Refresh(ObjectData objData)
        {
            var resourceStateData = objData.GetData <ResourceStateData>();

            if (!resourceStateData.isInstantiated)
            {
                return;
            }

            var stressData = objData.GetData <ActorStressData>();

            if (stressData.duration == 0)
            {
                Stop(objData.ObjectId);
                return;
            }

            var actorData = objData.GetData <ActorData>();

            if (!ActorController.CanSkillDefault(actorData.currentState))
            {
                return;
            }

            if ((actorData.currentState & (int)ActorStateType.SkillDefault) == 0 &&
                (actorData.currentState & (int)ActorStateType.SkillCustom) == 0)
            {
                stressData.currentDuration = stressData.duration = 0;
                return;
            }

            var worldMgr = WorldManager.Instance;

            var physics2DData = objData.GetData <Physics2DData>();

            if (stressData.currentDuration == stressData.duration)
            {
                stressData.currentDuration = stressData.duration = 0;
                physics2DData.force.y      = 0;

                if ((actorData.currentState & (int)ActorStateType.SkillDefault) != 0)
                {
                    ActorAnimator.Stop(objData, ActorStateType.SkillDefault);
                }
                else if ((actorData.currentState & (int)ActorStateType.SkillDefault) != 0)
                {
                    ActorAnimator.Stop(objData, ActorStateType.SkillCustom);
                }

                actorData.currentState &= ~(int)ActorStateType.SkillDefault;
                actorData.currentState &= ~(int)ActorStateType.SkillCustom;
                objData.SetDirty(actorData);
            }
            else
            {
                var gameSystemData = worldMgr.GameCore.GetData <GameSystemData>();
                stressData.currentDuration += gameSystemData.unscaleDeltaTime;
                if (stressData.currentDuration >= stressData.duration)
                {
                    stressData.currentDuration = stressData.duration;
                    physics2DData.force.y      = 0;
                }
                else
                {
                    physics2DData.force.y = -physics2DData.mass * Constant.ACTOR_STRESS_RATE_Y;

                    objData.SetDirty(physics2DData);
                }
            }
        }
예제 #2
0
        public override void Refresh(ObjectData objData)
        {
            var resourceStateData = objData.GetData <ResourceStateData>();

            if (!resourceStateData.isInstantiated)
            {
                return;
            }

            var flyData = objData.GetData <ActorFlyData>();

            if (flyData.duration == 0)
            {
                Stop(objData.ObjectId);
                return;
            }

            var actorData = objData.GetData <ActorData>();

            if (!ActorController.CanSkillDefault(actorData.currentState))
            {
                return;
            }

            if ((actorData.currentState & (int)ActorStateType.SkillDefault) == 0 &&
                (actorData.currentState & (int)ActorStateType.SkillCustom) == 0)
            {
                flyData.currentDuration = flyData.duration = 0;
                return;
            }

            var worldMgr = WorldManager.Instance;

            var physics2DData = objData.GetData <Physics2DData>();

            if (flyData.currentDuration == flyData.duration)
            {
                flyData.currentDuration = flyData.duration = 0;

                physics2DData.force.x = 0;
                physics2DData.force.y = 0;

                if ((actorData.currentState & (int)ActorStateType.SkillDefault) != 0)
                {
                    ActorAnimator.Stop(objData, ActorStateType.SkillDefault);
                }
                else if ((actorData.currentState & (int)ActorStateType.SkillDefault) != 0)
                {
                    ActorAnimator.Stop(objData, ActorStateType.SkillCustom);
                }

                actorData.currentState &= ~(int)ActorStateType.SkillDefault;
                actorData.currentState &= ~(int)ActorStateType.SkillCustom;
                objData.SetDirty(actorData);
            }
            else
            {
                var gameSystemData = worldMgr.GameCore.GetData <GameSystemData>();
                flyData.currentDuration += gameSystemData.unscaleDeltaTime;
                if (flyData.currentDuration >= flyData.duration)
                {
                    flyData.currentDuration = flyData.duration;
                    physics2DData.force.y   = 0;
                }
                else
                {
                    var seconds = flyData.currentDuration * Constant.ACTOR_FLY_SHAKE_DURATION / Constant.SECOND_TO_MILLISECOND;
                    if (seconds % 2 == 0)
                    {
                        physics2DData.force.y = Constant.ACTOR_FLY_SHAKE_Y;
                    }
                    else
                    {
                        physics2DData.force.y = -Constant.ACTOR_FLY_SHAKE_Y;
                    }
                }

                physics2DData.force.x = Constant.ACTOR_FLY_SPEED_X;

                objData.SetDirty(physics2DData);
            }
        }