85 lines
2.3 KiB
C#
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());
|
|
}
|
|
}
|
|
} |