using System; using UnityEngine; using UnityEngine.InputSystem; namespace TTTSC.Player.Character.Controller { public class PlayerInputReceiver : MonoBehaviour { private float _lookX, _lookY; public event Action MoveInputEvent, LookInputEvent; public event Action SprintInputEvent, CrouchInputEvent, JumpInputEvent; public PlayerInputSender playerInputEvents; private void OnEnable() { playerInputEvents = new PlayerInputSender(); playerInputEvents.Enable(); playerInputEvents.Controlls.Walk.performed += WalkInputReceiver; playerInputEvents.Controlls.LookX.performed += LookXInputReceiver; playerInputEvents.Controlls.LookY.performed += LookYInputReceiver; playerInputEvents.Controlls.Sprint.performed += SprintInputReceiver; playerInputEvents.Controlls.Jump.performed += JumpInputReceiver; playerInputEvents.Controlls.Crouch.performed += CrouchInputReceiver; } private void OnDisable() { playerInputEvents.Disable(); playerInputEvents.Controlls.Walk.performed -= WalkInputReceiver; playerInputEvents.Controlls.LookX.performed -= LookXInputReceiver; playerInputEvents.Controlls.Sprint.performed -= SprintInputReceiver; playerInputEvents.Controlls.Jump.performed -= JumpInputReceiver; playerInputEvents.Controlls.Crouch.performed -= CrouchInputReceiver; } bool FloatBool(float a, string calculationOperator, float b) { bool result = false; switch (calculationOperator) { case "==": if (a == b) { result = true; } else { result = false; } break; case "!=": if (a != b) { result = true; } else { result = false; } break; case ">=": if (a >= b) { result = true; } else { result = false; } break; case "<=": if (a <= b) { result = true; } else { result = false; } break; case ">": if (a > b) { result = true; } else { result = false; } break; case "<": if (a < b) { result = true; } else { result = false; } break; } return result; } private void LookXInputReceiver(InputAction.CallbackContext ctx) { var value = ctx.ReadValue(); _lookX = value; Look(FloatBool(value, "!=", 0)); } private void LookYInputReceiver(InputAction.CallbackContext ctx) { float value = ctx.ReadValue(); _lookY = value; Look(FloatBool(value, "!=", 0)); } private void Look(bool performing) { var look = new Vector2(_lookX, _lookY); LookInputEvent?.Invoke(look, performing); } private void WalkInputReceiver(InputAction.CallbackContext ctx) { var value = ctx.ReadValue(); bool performing = !(value == new Vector2(0, 0)); MoveInputEvent?.Invoke(value, performing); } private void SprintInputReceiver(InputAction.CallbackContext ctx) { float value = ctx.ReadValue(); SprintInputEvent?.Invoke(FloatBool(value, "==", 1)); } private void CrouchInputReceiver(InputAction.CallbackContext ctx) { float value = ctx.ReadValue(); CrouchInputEvent?.Invoke(FloatBool(value, "==", 1)); } private void JumpInputReceiver(InputAction.CallbackContext ctx) { JumpInputEvent?.Invoke(ctx.ReadValue()); } } }