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

107 lines
2.4 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 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 08:18:34 +00:00
GameManager.instance.Retry();
2026-02-07 14:41:29 +00:00
}
}
}
2026-02-08 13:13:32 +00:00
private void OnCameraDown(InputValue value)
{
2026-02-10 08:18:34 +00:00
if (GameManager.instance.gameState != GameState.Playing)
2026-02-08 13:13:32 +00:00
{
return;
}
var camEffect = Camera.main.GetComponent<CameraEffect>();
if (camEffect != null)
{
camEffect.SetLookDown(value.isPressed);
}
}
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;
}
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();
}
}
}