CapersProject/Assets/02.Scripts/Character/Player/Tycoon/TycoonMovement.cs
Nam Tae Gun c2f8f02328 버그 및 로직 수정
+ GameManager CurrentCombatPlayer 버그 및 로직 수정
+ 타이탄 슬라임 스프라이트 변경
+ Tycoon action 추가
+ JumpSlam 스프라이트 형식으로 변경
+ Npc 레이어 추가
2024-06-08 02:31:08 +09:00

135 lines
3.5 KiB
C#

using BlueWater.Interfaces;
using UnityEngine;
namespace BlueWater.Players.Tycoons
{
public class TycoonMovement : MonoBehaviour, IPhysicMovable
{
// Variables
#region Variables
// Components
public Rigidbody Rigidbody { get; private set; }
private Transform _visualLook;
private SpineController _spineController;
// Move
[field: SerializeField, Range(1f, 10f), Tooltip("이동 속도")]
public float MoveSpeed { get; private set; } = 7f;
public bool EnableMove { get; private set; } = true;
private bool _isMoving;
public bool IsMoving
{
get => _isMoving;
private set
{
if (_isMoving == value) return;
_isMoving = value;
_spineController.PlayAnimation(_isMoving
? TycoonPlayerSpineAnimation.run.ToString()
: TycoonPlayerSpineAnimation.idle.ToString(), true);
}
}
private Vector3 _inputDirection;
private Vector3 _currentDirection = Vector3.back;
public Vector3 CurrentDirection
{
get => _currentDirection;
set
{
if (value == Vector3.zero) return;
_currentDirection = value;
}
}
private float _finalSpeed;
#endregion
// Unity events
#region Unity events
private void Awake()
{
_spineController = GetComponent<SpineController>();
}
private void Update()
{
FlipVisualLook();
}
private void FixedUpdate()
{
if (!CanMove()) return;
ApplyMovement();
}
#endregion
// Initialize Methods
#region Initialize Methods
public void InitializeComponents(Rigidbody rigidbody, Transform visualLook)
{
Rigidbody = rigidbody;
_visualLook = visualLook;
}
#endregion
// Methods
#region Methods
// Event methods
public void HandleInputMovement(Vector2 movementInput)
{
_inputDirection = new Vector3(movementInput.x, 0, movementInput.y).normalized;
}
public void HandleEnableMove() => EnableMove = true;
public void HandleDisableMove() => EnableMove = false;
// Methods
private void FlipVisualLook()
{
var localScale = _visualLook.localScale;
localScale.x = CurrentDirection.x switch
{
> 0.01f => -Mathf.Abs(localScale.x),
< -0.01f => Mathf.Abs(localScale.x),
_ => localScale.x
};
_visualLook.localScale = localScale;
}
// Move
public bool CanMove()
{
return EnableMove;
}
public void AddForce(Vector3 force, ForceMode forceMode)
{
Rigidbody.AddForce(force, forceMode);
}
private void ApplyMovement()
{
CurrentDirection = _inputDirection;
IsMoving = _inputDirection != Vector3.zero;
var finalVelocity = _inputDirection * (MoveSpeed * Time.deltaTime);
Rigidbody.MovePosition(transform.position + finalVelocity);
}
#endregion
}
}