Files
GoblinRaid/Assets/Scripts/Control/PlayerController.cs
Caleb Sandford deQuincey e2b97323a3 Started building first moment
2025-10-31 20:33:41 +00:00

85 lines
2.3 KiB
C#

using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.InputSystem;
using RPG.Movement;
using RPG.Combat;
using RPG.Core;
using System;
namespace RPG.Control
{
public class PlayerController : MonoBehaviour
{
Health health;
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;
}
void Start()
{
health = GetComponent<Health>();
}
private void OnEnable()
{
moveAction.Enable();
interactAction.Enable();
}
private void OnDisable()
{
moveAction.Disable();
interactAction.Disable();
}
private void Update()
{
if (health.IsDead()) return;
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.IsPressed())
{
//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());
}
}
}