コード例 #1
0
ファイル: PlayerBhv.cs プロジェクト: Ziden/Samurai
    public void OnCollide(BodyPart part, Collision2D collided, Vector3 point)
    {
        var collidedTag = collided.transform.tag;

        if (collidedTag == "CameraBounds")
        {
            // Switching rooms
            var bounds = collided.transform.GetComponent <BoxCollider2D>().bounds;
            SamuraiCamera.SetRoomBounds(bounds);
        }

        if (collidedTag == "Map")
        {
            if (part == BodyPart.FEET)
            {
                Debug.Log("LAND");

                // Landing
                states.Remove(PlayerState.FAST_FALLING);
                states.Remove(PlayerState.FALLING);
                states.Remove(PlayerState.JUMPING);
                states.Add(PlayerState.ONGROUND);

                velocity.y = 0;
                if (!states.Has(PlayerState.MOVING_LEFT) && !states.Has(PlayerState.MOVING_RIGHT))
                {
                    animation.Play("s_land");
                }
                else
                {
                    TransformUtils.FaceRight(this, states.Has(PlayerState.MOVING_RIGHT));
                    animation.Play("s_run");
                }
                transform.position = new Vector2(transform.position.x, point.y + landYAdjust);

                EffectManager.Play(landSmokeEffect);
            }
            else if (part == BodyPart.HEAD)
            {
                velocity.y = 0;
                states.Add(PlayerState.FALLING);
                states.Remove(PlayerState.JUMPING);
            }
        }
    }
コード例 #2
0
ファイル: PlayerBhv.cs プロジェクト: Ziden/Samurai
    public void UpdateAnimations()
    {
        if (!states.BeenModified())
        {
            return;
        }

        // Jumping animation
        if (states.WasAdded(PlayerState.JUMPING))
        {
            animation.Play("s_jump");
            EffectManager.Play(jumpSmokeEffect);
            return;
        }

        // Falling
        if (states.WasAdded(PlayerState.FALLING) && !states.Has(PlayerState.ATTACKING))
        {
            // Falling Roll
            animation.speed = 2 - (currentJumpSize * 100 / maxJumpHeight) / 100;

            if (states.Has(PlayerState.MOVING_RIGHT))
            {
                if (facingRight)
                {
                    animation.Play("s_roll_r");
                }
                else
                {
                    animation.Play("s_roll_l");
                }
            }
            else if (states.Has(PlayerState.MOVING_LEFT))
            {
                if (facingRight)
                {
                    animation.Play("s_roll_l");
                }
                else
                {
                    animation.Play("s_roll_r");
                }
            }
            else
            {
                animation.Play("s_fall");
            }
        }

        // Always revert animation speed changes when you hit the ground
        if (states.WasAdded(PlayerState.ONGROUND))
        {
            animation.speed = 1;
        }


        // Attacking animation
        if (states.WasAdded(PlayerState.ATTACKING))
        {
            var timeUntilLastAttack = Time.time - lastFirstAttack;
            var clipName            = "s_sword";
            if (animation.GetCurrentAnimatorClipInfo(0)[0].clip.name == clipName || timeUntilLastAttack < 1)
            {
                clipName        = "s_sword_2";
                lastFirstAttack = 0;
            }
            else
            {
                lastFirstAttack = Time.time;
            }

            animation.Play(clipName);
            StartCoroutine(FinishAttack());
        }

        // Running animation
        if (states.Has(PlayerState.ONGROUND))
        {
            // Dashing
            if (states.WasAdded(PlayerState.DASHING))
            {
                animation.Play("s_dash");
                dashEffect.flip = !facingRight;
                EffectManager.Play(dashEffect);
                EffectManager.Play(landSmokeEffect);
                return;
            }

            bool startedToMove = states.WasAdded(PlayerState.MOVING_LEFT) || states.WasAdded(PlayerState.MOVING_RIGHT);
            bool stoppedMove   = states.WasRemoved(PlayerState.MOVING_LEFT) || states.WasRemoved(PlayerState.MOVING_RIGHT);
            bool isMoving      = states.Has(PlayerState.MOVING_RIGHT) || states.Has(PlayerState.MOVING_LEFT);

            // Halting Movement
            if (stoppedMove && !isMoving)
            {
                animation.Play("s_idl");
                return;
            }

            // Starting movement
            if (!states.Has(PlayerState.ATTACKING) && startedToMove || states.WasAdded(PlayerState.ONGROUND))
            {
                if (states.Has(PlayerState.MOVING_RIGHT))
                {
                    TransformUtils.FaceRight(this, true);
                    animation.Play("s_run");
                }
                else if (states.Has(PlayerState.MOVING_LEFT))
                {
                    TransformUtils.FaceRight(this, false);
                    animation.Play("s_run");
                }
            }
        }
    }