Added player task system. simple interaction with objects. Known issue - no player stats canvas

This commit is contained in:
Vladimir Koshevarov
2023-02-21 18:58:06 +02:00
parent 7c26b80584
commit 59d2f7cc30
46 changed files with 2289 additions and 3121 deletions
+22 -12
View File
@@ -11,10 +11,8 @@ public class MouseInputManager : MonoBehaviour
[SerializeField]
private Camera _camera;
private RaycastHit _raycastHit;
public event EventHandler<OnSelectedObjectChangedEventArgs> OnSelectedObjectChanged;
public event EventHandler<OnMovementTargetSelectedEventArgs> OnMovementTargetSelected;
public static MouseInputManager Instance { get; private set; }
@@ -22,7 +20,7 @@ public class MouseInputManager : MonoBehaviour
{
if (Instance != null)
{
Debug.Log("There's more than one player instance");
Debug.Log("There's more than one mouse Input instance");
}
Instance = this;
}
@@ -30,20 +28,32 @@ public class MouseInputManager : MonoBehaviour
void Update()
{
var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (!EventSystem.current.IsPointerOverGameObject() && Physics.Raycast(ray, out _raycastHit, 100f, _selectableLayerMask))
if (!EventSystem.current.IsPointerOverGameObject() && Physics.Raycast(ray, out var mouseRaycastHit, 100f, _selectableLayerMask))
{
OnSelectedObjectChanged?.Invoke(this, new OnSelectedObjectChangedEventArgs() { SelectedObject = _raycastHit.transform });
mouseRaycastHit.transform.TryGetComponent(out BaseInteractableObject baseObject);
if (baseObject != null)
{
OnSelectedObjectChanged?.Invoke(this, new OnSelectedObjectChangedEventArgs() { SelectedObject = baseObject });
if (Input.GetMouseButtonDown(0))
{
Player.Instance.AddTask(new PlayerTasks(Tasks.Move, baseObject._playerArrivePoint.position));
Player.Instance.AddTask(new PlayerTasks(Tasks.Interact, baseObject));
}
}
else
{
OnSelectedObjectChanged?.Invoke(this, new OnSelectedObjectChangedEventArgs() { SelectedObject = null });
}
}
else
{
OnSelectedObjectChanged?.Invoke(this, new OnSelectedObjectChangedEventArgs() { SelectedObject = null });
}
if (Input.GetMouseButton(0))
{
if (Physics.Raycast(_camera.ScreenPointToRay(Input.mousePosition), out RaycastHit hit, 100f, _walkableLayerMask))
if (Input.GetMouseButtonDown(0))
{
var pointToMove = hit.point;
OnMovementTargetSelected?.Invoke(this, new OnMovementTargetSelectedEventArgs() { PointToMove = pointToMove });
if (Physics.Raycast(_camera.ScreenPointToRay(Input.mousePosition), out RaycastHit hit, 100f, _walkableLayerMask))
{
Player.Instance.AddTask(new PlayerTasks(Tasks.Move, hit.point));
}
}
}
}