Exemplo n.º 1
0
        public static void AddInstanceControllerAction(IPCharacterInstance instance, PControllerActionType actionType)
        {
            if (actionType == PControllerActionType.JUMP)
            {
                instance.Controller.Actions.Clear();
            }

            instance.Controller.Actions.Add(actionType);
        }
Exemplo n.º 2
0
        ///<summary>
        ///Will prevent the character from keep walking towards the wall
        ///</summary>
        public static void BreakControllerWhenFacingWall(IPCharacterInstance instance, LayerMask targetLayer, float detectorDistance = 1f)
        {
            Vector2 detectorPos = instance.RenderObject.transform.position;

            detectorPos.y += instance.RenderObject.transform.localScale.x / 2;
            float direction = (instance.Render.flipX) ? -1 : 1;

            Debug.DrawRay(detectorPos, Vector2.right * detectorDistance * direction, Color.red);
            instance.Controller.isWallFacing = Physics2D.Raycast(detectorPos, Vector2.right * direction, detectorDistance, targetLayer);
        }
Exemplo n.º 3
0
        public static void UpdateInstanceAnimation(IPCharacterInstance instance)
        {
            if (instance.CurrentAnimation.Clip.PFrames.Length == 0)
            {
                PCharacterInstanceEcxepection.PlayingAnimationWithoutFramesException((PCharacterInstance)instance);
                return;
            }

            if (instance.CurrentAnimation.Clip.PFrames.Length == 0)
            {
                string firstFrameName = instance.CurrentAnimation.Clip.PFrames[0].FrameName;
                instance.Render.sprite = instance.Base.CharacterAtlas.GetSprite(firstFrameName);
                return;
            }

            instance.CurrentAnimation.Time += Time.deltaTime * instance.Base.Configuration.FrameSpeedMultiplier;

            if (instance.CurrentAnimation.Time >= instance.Base.Configuration.DelayToNextFrame)
            {
                instance.CurrentAnimation.Time          = 0;
                instance.CurrentAnimation.CurrentFrame += instance.CurrentAnimation.FrameModifier;

                if (instance.CurrentAnimation.Clip.AnimationType == PAnimationType.NORMAL)
                {
                    instance.CurrentAnimation.FrameModifier = 1;
                }
                else
                {
                    if (instance.CurrentAnimation.CurrentFrame < 0 || instance.CurrentAnimation.CurrentFrame >= instance.CurrentAnimation.Clip.PFrames.Length)
                    {
                        instance.CurrentAnimation.FrameModifier *= -1;
                        instance.CurrentAnimation.CurrentFrame  += instance.CurrentAnimation.FrameModifier;
                    }
                }

                if (instance.CurrentAnimation.CurrentFrame >= instance.CurrentAnimation.Clip.PFrames.Length)
                {
                    instance.CurrentAnimation.CurrentFrame = 0;
                }
                else if (instance.CurrentAnimation.CurrentFrame < 0)
                {
                    instance.CurrentAnimation.CurrentFrame = instance.CurrentAnimation.Clip.PFrames.Length - 1;
                }
            }

            int    currentFrame = instance.CurrentAnimation.CurrentFrame;
            string frameName    = instance.CurrentAnimation.Clip.PFrames[currentFrame].FrameName;

            instance.Render.sprite = instance.Base.CharacterAtlas.GetSprite(frameName);
        }
Exemplo n.º 4
0
        ///<summary>
        ///Flip PCharacterInstance render sprite in X using TRANSLATE_LEFT or TRANSLATE_RIGHT
        ///<summary>
        public static void FaceToMoveDirection(IPCharacterInstance instace)
        {
            var curAction = instace.Controller.CurrentAction;

            switch (curAction)
            {
            case PControllerActionType.TRANSLATE_LEFT:
                instace.Render.flipX = true;
                break;

            case PControllerActionType.TRANSLATE_RIGHT:
                instace.Render.flipX = false;
                break;
            }
        }
Exemplo n.º 5
0
        ///<summary>
        ///Set to an animation to a given PCharacterInstance
        ///</summary>
        public static void SetInstanceAnimation(IPCharacterInstance instance, string animation)
        {
            if (instance.CurrentAnimation.Clip.Name == animation)
            {
                return;
            }

            for (int i = 0; i < instance.Base.Animations.Length; i++)
            {
                var curBaseAnimation = instance.Base.Animations[i];

                if (curBaseAnimation.Name == animation)
                {
                    instance.CurrentAnimation.Clip         = curBaseAnimation;
                    instance.CurrentAnimation.Time         = 0;
                    instance.CurrentAnimation.CurrentFrame = 0;
                }
            }
        }
Exemplo n.º 6
0
        public static PControllerActionType UpdateInstanceController(IPCharacterInstance instance, float moveSpeed, float jumpForce, bool faceToWalkDirection = true)
        {
            if (instance.Controller.Actions.Count > 0)
            {
                var       curAction         = instance.Controller.Actions[0];
                Transform instanceTransform = instance.Transform;

                switch (curAction)
                {
                case PControllerActionType.TRANSLATE_RIGHT:
                    if (!instance.Controller.isWallFacing)
                    {
                        instanceTransform.Translate(Vector2.right * moveSpeed * Time.deltaTime);
                    }
                    break;

                case PControllerActionType.TRANSLATE_LEFT:
                    if (!instance.Controller.isWallFacing)
                    {
                        instanceTransform.Translate(Vector2.left * moveSpeed * Time.deltaTime);
                    }
                    break;

                case PControllerActionType.JUMP:
                    instance.Rig.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);
                    break;
                }

                instance.Controller.CurrentAction = curAction;
                instance.Controller.Actions.RemoveAt(0);

                if (faceToWalkDirection)
                {
                    FaceToMoveDirection(instance);
                }

                return(curAction);
            }

            instance.Controller.CurrentAction = PControllerActionType.NONE;
            return(PControllerActionType.NONE);
        }