CapersProject/Assets/02.Scripts/Character/Player/Tycoon/TycoonMovement.cs

142 lines
3.9 KiB
C#
Raw Normal View History

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;
2024-09-10 10:52:32 +00:00
private TycoonPickupHandler _tycoonPickupHandler;
// Move
[field: SerializeField, Range(1f, 20f), Tooltip("이동 속도")]
public float MoveSpeed { get; private set; } = 7f;
2024-10-08 06:13:52 +00:00
[field: SerializeField]
2024-09-23 02:00:21 +00:00
public float MoveSpeedMultiplier { get; private set; } = 1f;
public bool IsMoveEnabled { get; private set; } = true;
2024-10-14 11:13:08 +00:00
public bool IsMoving { get; private set; }
private Vector3 _inputDirection;
private Vector3 _currentDirection = Vector3.back;
public Vector3 CurrentDirection
{
get => _currentDirection;
private set
{
if (value == Vector3.zero) return;
_currentDirection = value;
}
}
public Vector3 PushDirection { get; private set; }
public float PushPower { get; private set; }
public float PushPowerReduction { get; private set; }
2024-10-14 11:13:08 +00:00
private float _finalSpeed;
#endregion
// Unity events
#region Unity events
private void Awake()
{
2024-10-14 11:13:08 +00:00
InitializeComponents();
}
private void Update()
{
FlipVisualLook();
}
private void FixedUpdate()
{
if (!CanMove()) return;
Move();
}
#endregion
// Initialize Methods
#region Initialize Methods
2024-10-14 11:13:08 +00:00
private void InitializeComponents()
{
2024-10-14 11:13:08 +00:00
Rigidbody = GetComponent<Rigidbody>();
_visualLook = transform.Find("VisualLook");
_tycoonPickupHandler = GetComponent<TycoonPickupHandler>();
}
#endregion
// Methods
#region Methods
// Event methods
public void HandleInputMovement(Vector2 movementInput)
{
_inputDirection = new Vector3(movementInput.x, 0, movementInput.y).normalized;
}
2024-09-23 02:00:21 +00:00
public void SetMoveSpeedMultiplier(float value) => MoveSpeedMultiplier = value;
public void ResetMoveSpeedMultiplier() => MoveSpeedMultiplier = 1f;
public void EnableMove() => IsMoveEnabled = true;
public void DisableMove() => IsMoveEnabled = false;
public void SetCurrentDirection(Vector3 normalDirection) => CurrentDirection = normalDirection;
// 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 IsMoveEnabled;
}
public void AddForce(Vector3 force, ForceMode forceMode)
{
Rigidbody.AddForce(force, forceMode);
}
public void SetPush(Vector3 pushDirection, float pushPower)
{
throw new System.NotImplementedException();
}
public void Move()
{
CurrentDirection = _inputDirection;
IsMoving = _inputDirection != Vector3.zero;
2024-10-08 06:13:52 +00:00
var finalVelocity = _inputDirection * (MoveSpeed * MoveSpeedMultiplier);
if (!Rigidbody.isKinematic)
{
Rigidbody.linearVelocity = finalVelocity;
}
}
#endregion
}
}