Files
SimUL/Assets/Scripts/Managers/InGameMouseHandler.cs
T
2023-12-10 19:56:46 +02:00

77 lines
2.5 KiB
C#

using System;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.InputSystem;
public class InGameMouseHandler : MonoBehaviour
{
[SerializeField]
private LayerMask _selectableLayerMask;
[SerializeField]
private LayerMask _walkableLayerMask;
[SerializeField]
private WaypointVisual _waypointVisual;
public static event EventHandler<OnSelectedObjectChangedEventArgs> OnSelectedObjectChanged;
private BaseInteractableObject _selectedObject;
private void Start()
{
InputManager.Instance.PlayerAction.PointClick.performed += ClickToMove;
}
private void OnDestroy()
{
InputManager.Instance.PlayerAction.PointClick.performed += ClickToMove;
}
private void ClickToMove(UnityEngine.InputSystem.InputAction.CallbackContext context)
{
if (!EventSystem.current.IsPointerOverGameObject())
{
if (_selectedObject != null)
{
print($"Go to interaction point {_selectedObject._interactionPoint.position}");
_waypointVisual.SetWaypoint(_selectedObject._interactionPoint.position);
Player.Instance.AddTask(new PlayerTasks(Tasks.Interact, _selectedObject));
}
else
{
if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out RaycastHit hit, 100f, _walkableLayerMask))
{
_waypointVisual.SetWaypoint(hit.point);
Player.Instance.AddTask(new PlayerTasks(Tasks.Move, _waypointVisual));
}
}
}
}
void Update()
{
var ray = Camera.main.ScreenPointToRay(Mouse.current.position.ReadValue());
if(EventSystem.current.IsPointerOverGameObject())
{
return;
}
//hide rounded menu
if (Physics.Raycast(ray, out var mouseRaycastHit, 100f, _selectableLayerMask))
{
mouseRaycastHit.transform.TryGetComponent(out _selectedObject);
if (_selectedObject != null)
{
OnSelectedObjectChanged?.Invoke(this, new OnSelectedObjectChangedEventArgs() { SelectedObject = _selectedObject });
}
else
{
OnSelectedObjectChanged?.Invoke(this, new OnSelectedObjectChangedEventArgs() { SelectedObject = null });
}
}
else
{
OnSelectedObjectChanged?.Invoke(this, new OnSelectedObjectChangedEventArgs() { SelectedObject = null });
}
}
}