public override void UpdateState(XYAxisState axisState)
    {
        if (!PlayerController.IsGrounded() ||
            !PlayerController.CrouchSettings.EnableCrouching)
        {
            return;
        }

        if ((PlayerController.PlayerState & PlayerState.Crouching) != 0)
        {
            if (axisState.YAxis >= 0f &&
                PlayerController.CharacterPhysicsManager.CanMoveVertically(
                    PlayerController.EnvironmentBoxCollider.size.y
                    - CROUCH_STANDUP_COLLISION_FUDGE_FACTOR, false))
            {
                PlayerController.PlayerState &= ~PlayerState.Crouching;

                return;
            }
        }
        else
        {
            if (axisState.YAxis < 0f)
            {
                PlayerController.PlayerState |= PlayerState.Crouching;

                Logger.Info(
                    "Crouch executed, box collider size set to: " + PlayerController.CharacterPhysicsManager.BoxCollider.size
                    + ", offset: " + PlayerController.CharacterPhysicsManager.BoxCollider.offset);
            }
        }
    }
 private bool CanFire(XYAxisState axisState)
 {
     return((PlayerController.PlayerState & PlayerState.EnemyContactKnockback) == 0 &&
            (PlayerController.PlayerState & PlayerState.Sliding) == 0 &&
            (_projectileWeaponSettings.EnableAutomaticFire
     ? IsFireButtonPressed()
     : IsFireButtonDown()) &&
            IsWithinRateOfFire());
 }
    public override PlayerStateUpdateResult GetPlayerStateUpdateResult(XYAxisState axisState)
    {
        if ((PlayerController.PlayerState & PlayerState.Locked) == 0)
        {
            return(PlayerStateUpdateResult.Unhandled);
        }

        return(PlayerStateUpdateResult.CreateHandled(_animationStateName));
    }
    public override PlayerStateUpdateResult GetPlayerStateUpdateResult(XYAxisState axisState)
    {
        if ((PlayerController.PlayerState & PlayerState.Sliding) == 0)
        {
            return(PlayerStateUpdateResult.Unhandled);
        }

        return(PlayerStateUpdateResult.CreateHandled("Slide"));
    }
 protected Vector2 GetDirectionVector(XYAxisState axisState)
 {
     return((
                axisState.IsInHorizontalSensitivityDeadZone() &&
                PlayerController.IsFacingRight()
                ) ||
            axisState.XAxis > 0f
   ? Vector2.right
   : -Vector2.right);
 }
 private void AdjustSpriteScale(XYAxisState axisState)
 {
   if ((axisState.XAxis > 0f && _playerController.Sprite.transform.localScale.x < 1f)
     || (axisState.XAxis < 0f && _playerController.Sprite.transform.localScale.x > -1f))
   {
     _playerController.Sprite.transform.localScale = new Vector3(
       _playerController.Sprite.transform.localScale.x * -1,
       _playerController.Sprite.transform.localScale.y,
       _playerController.Sprite.transform.localScale.z);
   }
 }
    public override PlayerStateUpdateResult GetPlayerStateUpdateResult(XYAxisState axisState)
    {
        if (PlayerController.IsGrounded())
        {
            return(PlayerStateUpdateResult.Unhandled);
        }

        return(PlayerController.CharacterPhysicsManager.Velocity.y >= 0f
      ? PlayerStateUpdateResult.CreateHandled("Jump")
      : PlayerStateUpdateResult.CreateHandled("Fall"));
    }
  public void UpdatePlayerState(XYAxisState axisState)
  {
    var playerStateUpdateResult = PlayerStateUpdateResult.Max(
        UpdatePlayerStateControllers(axisState),
        UpdateWeaponControllers(axisState));

    AdjustSpriteScale(axisState);

    if (playerStateUpdateResult.AnimationClipInfo != null)
    {
      PlayAnimation(playerStateUpdateResult.AnimationClipInfo);
    }
  }
  private PlayerStateUpdateResult UpdateWeaponControllers(XYAxisState axisState)
  {
    foreach (var weaponControlHandler in _playerController.WeaponControlHandlers)
    {
      var playerStateUpdateResult = weaponControlHandler.Update(axisState);

      if (playerStateUpdateResult.IsHandled)
      {
        return playerStateUpdateResult;
      }
    }

    return PlayerStateUpdateResult.Unhandled;
  }
    public override PlayerStateUpdateResult GetPlayerStateUpdateResult(XYAxisState axisState)
    {
        if ((PlayerController.PlayerState & PlayerState.Crouching) == 0)
        {
            return(PlayerStateUpdateResult.Unhandled);
        }

        if (axisState.IsInHorizontalSensitivityDeadZone())
        {
            return(PlayerStateUpdateResult.CreateHandled("PlayerCrouchIdle"));
        }

        return(PlayerStateUpdateResult.CreateHandled("PlayerCrouchRun"));
    }
  private PlayerStateUpdateResult UpdatePlayerStateControllers(XYAxisState axisState)
  {
    for (var i = 0; i < _playerStateControllers.Length; i++)
    {
      var playerStateUpdateResult = _playerStateControllers[i].UpdatePlayerState(axisState);

      if (playerStateUpdateResult.IsHandled)
      {
        return playerStateUpdateResult;
      }
    }

    return PlayerStateUpdateResult.Unhandled;
  }
Example #12
0
 public override void UpdateState(XYAxisState axisState)
 {
     if (
         (PlayerController.PlayerState & PlayerState.AttachedToWall) != 0 &&
         PlayerController.CharacterPhysicsManager.Velocity.y < 0f
         &&
         (
             (PlayerController.CharacterPhysicsManager.LastMoveCalculationResult.CollisionState.CharacterWallState & CharacterWallState.OnRightWall) != 0 ||
             (PlayerController.CharacterPhysicsManager.LastMoveCalculationResult.CollisionState.CharacterWallState & CharacterWallState.OnLeftWall) != 0
         ))
     {
         // TODO (Roman): this should be done via mecanim
         PlayerController.CharacterPhysicsManager.BoxCollider.offset = PlayerController.BoxColliderOffsetWallAttached;
         PlayerController.CharacterPhysicsManager.BoxCollider.size   = PlayerController.BoxColliderSizeWallAttached;
     }
 }
Example #13
0
    public override PlayerStateUpdateResult GetPlayerStateUpdateResult(XYAxisState axisState)
    {
        if (
            IsSlidingDownWall(
                () => (PlayerController.CharacterPhysicsManager.LastMoveCalculationResult.CollisionState.CharacterWallState & CharacterWallState.OnRightWall) != 0,
                () => PlayerController.Sprite.transform.localScale.x < 1f)
            ||
            IsSlidingDownWall(
                () => (PlayerController.CharacterPhysicsManager.LastMoveCalculationResult.CollisionState.CharacterWallState & CharacterWallState.OnLeftWall) != 0,
                () => PlayerController.Sprite.transform.localScale.x > -1f))
        {
            return(PlayerStateUpdateResult.CreateHandled("PlayerWallAttached"));
        }

        return(PlayerStateUpdateResult.Unhandled);
    }
    public override PlayerStateUpdateResult GetPlayerStateUpdateResult(XYAxisState axisState)
    {
        if ((PlayerController.PlayerState & PlayerState.ClimbingLadder) == 0 &&
            (PlayerController.PlayerState & PlayerState.ClimbingLadderTop) == 0)
        {
            return(PlayerStateUpdateResult.Unhandled);
        }

        var animationSpeed = (PlayerController.PlayerState & PlayerState.ClimbingLadderTop) == 0 &&
                             axisState.IsInVerticalSensitivityDeadZone()
        ? 0f
        : 1f;

        return((PlayerController.PlayerState & PlayerState.ClimbingLadderTop) != 0
      ? PlayerStateUpdateResult.CreateHandled("Climb Laddertop", animationSpeed: animationSpeed)
      : PlayerStateUpdateResult.CreateHandled("Climb", animationSpeed: animationSpeed));
    }
    private string GetAnimationName(XYAxisState axisState)
    {
        if ((PlayerController.PlayerState & PlayerState.ClimbingLadder) != 0)
        {
            return("Climb And Shoot");
        }

        if (PlayerController.IsAirborne())
        {
            return("Airborne And Shoot");
        }

        if (axisState.IsInHorizontalSensitivityDeadZone())
        {
            return("Stand And Shoot");
        }

        return("Run And Shoot");
    }
    public override PlayerStateUpdateResult Update(XYAxisState axisState)
    {
        if (CanFire(axisState))
        {
            var direction = GetDirectionVector(axisState);

            var spawnLocation = GetSpawnLocation(direction);

            var projectile = _objectPoolingManager.GetObject(
                _projectileWeaponSettings.ProjectilePrefab.name,
                spawnLocation);

            if (projectile != null)
            {
                var projectileBehaviour = projectile.GetComponent <PlayerProjectileBehaviour>();

                projectileBehaviour.StartMove(
                    spawnLocation,
                    direction * _projectileWeaponSettings.DistancePerSecond);

                _lastBulletTime = Time.time;

                _lastAnimationName = GetAnimationName(axisState);

                return(PlayerStateUpdateResult.CreateHandled(
                           _lastAnimationName,
                           1));
            }
        }

        if ((PlayerController.PlayerState & PlayerState.EnemyContactKnockback) == 0 &&
            IsAttacking())
        {
            return(PlayerStateUpdateResult.CreateHandled(GetAnimationName(axisState), 1));
        }

        return(PlayerStateUpdateResult.Unhandled);
    }
Example #17
0
    public override PlayerStateUpdateResult GetPlayerStateUpdateResult(XYAxisState axisState)
    {
        if (!PlayerController.IsGrounded())
        {
            return(PlayerStateUpdateResult.Unhandled);
        }

        if (PlayerController.CrouchSettings.EnableCrouching)
        {
            var result = _crouchController.UpdatePlayerState(axisState);

            if (result.IsHandled)
            {
                return(result);
            }
        }

        if (axisState.IsInHorizontalSensitivityDeadZone())
        {
            return(PlayerStateUpdateResult.CreateHandled("Idle"));
        }

        return(PlayerStateUpdateResult.CreateHandled("Run Start", linkedAnimationNames: new string[] { "Run" }));
    }
 public override PlayerStateUpdateResult GetPlayerStateUpdateResult(XYAxisState axisState)
 {
     return(PlayerStateUpdateResult.CreateHandled("Enemy Contact Knockback"));
 }
 public abstract PlayerStateUpdateResult Update(XYAxisState axisState);
 private bool IsClimbingLadder(XYAxisState axisState)
 {
     return((PlayerController.PlayerState & PlayerState.ClimbingLadder) != 0 &&
            !axisState.IsInVerticalSensitivityDeadZone());
 }
 public virtual void UpdateState(XYAxisState axisState)
 {
 }
    public PlayerStateUpdateResult UpdatePlayerState(XYAxisState axisState)
    {
        UpdateState(axisState);

        return(GetPlayerStateUpdateResult(axisState));
    }