Files
2026-04-25 23:37:10 +02:00

66 lines
2.2 KiB
C#

using System;
using RPGCore.Movement.ObjectModules.UnitMovement;
using RPGCore.Core;
using RPGCore.Core.Objects;
using RPGCore.Movement.ObjectModules.UnitMovement.Actions;
using RPGCore.ObjectModules.ActionObjectModule;
using RPGCoreCommon.Helpers;
using UnityEngine;
using UnityEngine.InputSystem;
namespace RPGCore.Movement.SceneModules.ActionController
{
[Serializable]
[RequireComponent(typeof(ActionCameraModule))]
public class ActionControllerModule : SceneModule
{
[SerializeField] private UnitObject _unit;
[SerializeField] private InputActionReference _rotateInput;
[SerializeField] private InputActionReference _moveInput;
[SerializeField] private InputActionReference _moveFasterInput;
[SerializeField] private InputActionReference _jumpInput;
private Camera _camera;
private BaseActionParallel _moveAction;
private void Awake()
{
_camera = Camera.main;
}
private void Start()
{
var movementModule = _unit.GetComponent<UnitMovementModule>();
_rotateInput.action.performed += _ =>
{
movementModule.rotateYaw = _camera.transform.rotation.eulerAngles.y;
};
_moveInput.action.performed += _ =>
{
_moveAction = new DirectionMoveAction(GetDirection);
_unit.actions.Execute(_moveAction);
};
_moveInput.action.canceled += _ =>
{
_moveAction?.CancelIt();
_moveAction = null;
};
_moveFasterInput.action.performed += _ => movementModule.isSprinting = true;
_moveFasterInput.action.canceled += _ => movementModule.isSprinting = false;
_jumpInput.action.performed += _ => _unit.actions.Execute(new JumpAction());
movementModule.rotateType = UnitMovementRotateType.CustomDirection;
}
private Vector3 GetDirection()
{
var input = _moveInput.action.ReadValue<Vector2>();
return _camera.transform.right.SetY(0).normalized * input.x
+ _camera.transform.forward.SetY(0).normalized * input.y;
}
}
}