using System;
|
using System.ComponentModel.Design;
|
using UnityEngine;
|
using UnityEngine.InputSystem;
|
|
[RequireComponent(typeof(Rigidbody2D))]
|
public class PlayerController : MonoBehaviour
|
{
|
public float moveSpeed = 5f;
|
public float maxFallSpeed = -20f;
|
Vector2 moveInput;
|
|
Rigidbody2D rb;
|
Animator animator;
|
Animator animator_rotor;
|
public GameObject rotorGO;
|
TouchingDirections touchingDirections;
|
|
[SerializeField]
|
private bool _isMoving;
|
public bool IsMoving
|
{
|
get { return _isMoving; }
|
private set
|
{
|
_isMoving = value;
|
animator.SetBool(AnimationStrings.Player.IsMoving, value);
|
}
|
}
|
|
[SerializeField]
|
private bool _isFlying;
|
public bool IsFlying
|
{
|
get { return _isFlying; }
|
private set
|
{
|
_isFlying = value;
|
animator.SetBool(AnimationStrings.Player.IsFlying, value);
|
animator_rotor.SetBool(AnimationStrings.Player.IsFlying, value);
|
}
|
}
|
|
private bool _isFacingRight = true;
|
|
public bool IsFacingRight
|
{
|
get { return _isFacingRight; }
|
set
|
{
|
if (_isFacingRight != value)
|
{
|
transform.localScale *= new Vector2(-1, 1);
|
}
|
_isFacingRight = value;
|
}
|
}
|
|
private void Awake()
|
{
|
rb = GetComponent<Rigidbody2D>();
|
animator = GetComponent<Animator>();
|
animator_rotor = rotorGO.GetComponent<Animator>();
|
touchingDirections = GetComponent<TouchingDirections>();
|
}
|
|
// Start is called before the first frame update
|
void Start()
|
{
|
|
}
|
|
// Update is called once per frame
|
void Update()
|
{
|
|
}
|
|
private void FixedUpdate()
|
{
|
if (moveInput.y == 0)
|
{
|
if (rb.velocity.y <= maxFallSpeed)
|
{
|
// max fall speed, dont accelerate more
|
rb.velocity = new Vector2(moveInput.x * moveSpeed, maxFallSpeed);
|
}
|
else
|
{
|
// normal fall
|
rb.velocity = new Vector2(moveInput.x * moveSpeed, rb.velocity.y);
|
}
|
}
|
else
|
{
|
if (rb.velocity.y < 0 && moveInput.y > 0)
|
{
|
// falling but moving upwards
|
rb.velocity = new Vector2(moveInput.x * moveSpeed, (moveInput.y * moveSpeed) + rb.velocity.y);
|
}
|
else
|
{
|
// moving upwards no falling
|
rb.velocity = new Vector2(moveInput.x * moveSpeed, (moveInput.y * moveSpeed));
|
}
|
}
|
}
|
|
public void OnMove(InputAction.CallbackContext context)
|
{
|
moveInput = context.ReadValue<Vector2>();
|
|
IsMoving = moveInput.x != 0;
|
|
IsFlying = (moveInput.y != 0);
|
|
SetFacingDirection(moveInput);
|
|
}
|
|
private void SetFacingDirection(Vector2 moveInput)
|
{
|
if (moveInput.x > 0 && !IsFacingRight)
|
{
|
IsFacingRight = true;
|
}
|
else if (moveInput.x < 0 && IsFacingRight)
|
{
|
IsFacingRight = false;
|
}
|
}
|
|
//public void OnRun(InputAction.CallbackContext context)
|
//{
|
// if (context.started) // Button pressed
|
// {
|
// _isRunning = true;
|
// }
|
// else if (context.canceled) // Button released
|
// {
|
// _isRunning = false;
|
// }
|
|
//}
|
}
|