コード例 #1
0
        public void Climb()
        {
            state       = PlayerCharacterState.Climb;
            state_timer = 0f;

            if (onClimb != null)
            {
                onClimb.Invoke();
            }
        }
コード例 #2
0
        //Handle render and controls
        void Update()
        {
            if (TheGame.IsGamePaused())
            {
                return;
            }

            hit_timer   += Time.deltaTime;
            state_timer += Time.deltaTime;
            //grounded_timer += Time.deltaTime;

            //Controls
            PlayerControls controls = PlayerControls.Get(player_id);

            if (state == PlayerCharacterState.Normal)
            {
                if (controls.GetJumpDown())
                {
                    Jump();
                }

                Ladder ladder = Ladder.GetOverlapLadder(gameObject);
                if (ladder && controls.GetMove().y > 0.1f && state_timer > 0.7f)
                {
                    Climb();
                }
            }

            if (state == PlayerCharacterState.Climb)
            {
                Ladder ladder = Ladder.GetOverlapLadder(gameObject);
                if (ladder == null)
                {
                    state       = PlayerCharacterState.Normal;
                    state_timer = 0f;
                }

                if (controls.GetJumpDown())
                {
                    Jump(true);
                }
            }

            //Reset when fall
            if (!IsDead() && transform.position.y < fall_pos_y - GetSize().y)
            {
                TakeDamage(fall_damage);
                if (reset_when_fall)
                {
                    Teleport(last_ground_pos);
                }
            }
        }
コード例 #3
0
    public void EnterCharacterState(PlayerCharacterState.ECharacterState eState)
    {
        if (!m_Animator2D)
        {
            return;
        }

        if (m_CharacterState != null)
        {
            m_CharacterState.OnExit();
        }

        switch (eState)
        {
        case PlayerCharacterState.ECharacterState.Stationary:
        {
            m_CharacterState = m_StationaryState;
        }
        break;

        case PlayerCharacterState.ECharacterState.Run:
        {
            m_CharacterState = m_RunState;
        }
        break;

        case PlayerCharacterState.ECharacterState.JumpUp:
        {
            //WHY DOESN'T THIS WORK
            m_v3Velocity.y   = m_fJumpVelocity;
            m_CharacterState = m_JumpUpState;
        }
        break;

        case PlayerCharacterState.ECharacterState.FallDown:
        {
            m_CharacterState = m_FallDownState;
        }
        break;
        }

        m_CharacterState.OnEnter();

        //Play the current animation associated with this state
        if (!string.IsNullOrEmpty(m_CharacterState.AnimationName))
        {
            m_Animator2D.Play(m_CharacterState.AnimationName);
        }
    }
コード例 #4
0
        public void Kill()
        {
            if (!IsDead())
            {
                state                = PlayerCharacterState.Dead;
                rigid.velocity       = Vector2.zero;
                move                 = Vector2.zero;
                state_timer          = 0f;
                capsule_coll.enabled = false;

                if (onDeath != null)
                {
                    onDeath.Invoke();
                }
            }
        }
コード例 #5
0
 public void Jump(bool force_jump = false)
 {
     if (can_jump && (!is_crouch || force_jump))
     {
         if (is_grounded || force_jump || (!is_double_jump && double_jump))
         {
             is_double_jump = !is_grounded;
             move.y         = jump_strength;
             jump_timer     = 0f;
             is_jumping     = true;
             state          = PlayerCharacterState.Normal;
             state_timer    = 0f;
             if (onJump != null)
             {
                 onJump.Invoke();
             }
         }
     }
 }