public void Climb() { state = PlayerCharacterState.Climb; state_timer = 0f; if (onClimb != null) { onClimb.Invoke(); } }
//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); } } }
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); } }
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(); } } }
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(); } } } }