05bf8484f5
added some city environment, just for fun
83 lines
2.6 KiB
C#
83 lines
2.6 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;
|
|
|
|
[SerializeField]
|
|
private Camera _camera;
|
|
|
|
private Ray _ray;
|
|
|
|
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(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(_ray, out RaycastHit hit, 100f, _walkableLayerMask))
|
|
{
|
|
print($"hit point {hit.point} collider pos {hit.collider.transform.position}");
|
|
_waypointVisual.SetWaypoint(hit.point);
|
|
Player.Instance.AddTask(new PlayerTasks(Tasks.Move, _waypointVisual));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void Update()
|
|
{
|
|
_ray = _camera.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 });
|
|
|
|
}
|
|
}
|
|
} |