ReplayPuzzleGame/Assets/Resources/Scripts/Player/PlayerController.cs

148 lines
3.6 KiB
C#
Raw Normal View History

using UnityEngine;
using UnityEngine.InputSystem;
public class PlayerController : MonoBehaviour
{
private PlayerMovement _playerMovement;
private InputRecorder _inputRecorder;
private Vector2 moveInputBuffer;
2026-02-10 08:18:34 +00:00
private bool jumpBuffer;
private bool hangBuffer;
private bool _isLookingDown;
private bool _isLookingUp;
private void Awake()
{
_playerMovement = GetComponent<PlayerMovement>();
_inputRecorder = GetComponent<InputRecorder>();
}
private void OnMove(InputValue value)
{
2026-02-10 08:18:34 +00:00
if (GameManager.instance.gameState == GameState.Playing)
{
moveInputBuffer = value.Get<Vector2>();
}
}
private void OnJump(InputValue value)
{
2026-02-10 08:18:34 +00:00
if (GameManager.instance.gameState == GameState.Playing)
{
if (value.isPressed)
{
jumpBuffer = true;
}
}
}
2026-02-07 14:41:29 +00:00
private void OnRetry(InputValue value)
{
2026-02-10 08:18:34 +00:00
if (GameManager.instance.gameState == GameState.Playing)
{
if (value.isPressed)
{
2026-02-10 11:03:29 +00:00
GameManager.instance.Replay();
2026-02-07 14:41:29 +00:00
}
}
}
2026-02-08 13:13:32 +00:00
private void OnCameraDown(InputValue value)
{
if (GameManager.instance.gameState != GameState.Playing) return;
if (value.isPressed && _playerMovement.IsGroundedState && !_playerMovement.IsMoving)
2026-02-08 13:13:32 +00:00
{
_isLookingDown = true;
_isLookingUp = false;
}
else
{
_isLookingDown = false;
2026-02-08 13:13:32 +00:00
}
ApplyCameraLook();
}
2026-02-08 13:13:32 +00:00
private void OnCameraUp(InputValue value)
{
if (GameManager.instance.gameState != GameState.Playing) return;
if (value.isPressed && _playerMovement.IsGroundedState && !_playerMovement.IsMoving)
{
_isLookingUp = true;
_isLookingDown = false;
}
else
{
_isLookingUp = false;
}
ApplyCameraLook();
}
private void ApplyCameraLook()
{
CameraEffect camEffect = Camera.main.GetComponent<CameraEffect>();
2026-02-08 13:13:32 +00:00
if (camEffect != null)
{
camEffect.SetCameraLook(_isLookingUp, _isLookingDown);
2026-02-08 13:13:32 +00:00
}
_playerMovement.SetLookAnimation("isLookDown", _isLookingDown);
_playerMovement.SetLookAnimation("isLookUp", _isLookingUp);
2026-02-08 13:13:32 +00:00
}
2026-02-07 14:41:29 +00:00
private void OnHang(InputValue value)
{
2026-02-10 08:18:34 +00:00
if (GameManager.instance.gameState == GameState.Playing)
{
if (value.isPressed)
{
2026-02-07 14:41:29 +00:00
hangBuffer = true;
}
}
}
private void FixedUpdate()
{
2026-02-10 08:18:34 +00:00
if (GameManager.instance.gameState != GameState.Playing)
{
return;
}
if (_isLookingDown || _isLookingUp)
{
if (_playerMovement.IsMoving || !_playerMovement.IsGroundedState)
{
_isLookingDown = false;
_isLookingUp = false;
ApplyCameraLook();
}
}
2026-02-10 08:18:34 +00:00
// 플레이어 움직임 녹화
InputFrame currentFrame = new InputFrame(moveInputBuffer.x, jumpBuffer, hangBuffer);
_inputRecorder?.Record(currentFrame);
2026-02-10 08:18:34 +00:00
RunInput(currentFrame);
jumpBuffer = false;
hangBuffer = false;
}
private void RunInput(InputFrame frame)
{
_playerMovement.SetMoveInput(new Vector2(frame.moveX, 0));
if (frame.isJumpPressed)
{
_playerMovement.TryJump();
}
if (frame.isHangPressed)
{
_playerMovement.TryHang();
}
}
}