Files
GoblinRaid/Assets/Scripts/Control/PlayerController.cs
Caleb Sandford deQuincey 1972134c81 Start AI COntroller
2025-10-28 17:26:07 +00:00

78 lines
2.2 KiB
C#

using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.InputSystem;
using RPG.Movement;
using RPG.Combat;
using System;
namespace RPG.Control
{
public class PlayerController : MonoBehaviour
{
private PlayerControls playerControls;
private InputAction moveAction;
private InputAction interactAction;
private Camera mainCamera;
private void Awake()
{
playerControls = new PlayerControls();
moveAction = playerControls.Player.Move;
interactAction = playerControls.Player.Action;
mainCamera = Camera.main;
}
private void OnEnable()
{
moveAction.Enable();
interactAction.Enable();
}
private void OnDisable()
{
moveAction.Disable();
interactAction.Disable();
}
private void Update()
{
if (InteractWithCombat()) return;
if (InteractWithMovement()) return;
}
private bool InteractWithCombat()
{
RaycastHit[] hits = Physics.RaycastAll(GetMouseRay());
foreach (RaycastHit hit in hits)
{
CombatTarget target = hit.transform.GetComponent<CombatTarget>();
if (target == null) continue;
if (!GetComponent<Fighter>().CanAttack(target.gameObject))
continue;
if (interactAction.WasPressedThisFrame())
{
//MoveToCursor();
GetComponent<Fighter>().Attack(target.gameObject);
}
return true;
}
return false;
}
private bool InteractWithMovement()
{
RaycastHit hit;
bool hasHit = Physics.Raycast(GetMouseRay(), out hit);
if (hasHit)
{
if (moveAction.IsPressed())
GetComponent<Mover>().StartMoveAction(hit.point);
return true;
}
return false;
}
private Ray GetMouseRay()
{
return mainCamera.ScreenPointToRay(Mouse.current.position.ReadValue());
}
}
}