diff --git a/Assets/Scripts/Actions/UnitActionSystem.cs b/Assets/Scripts/Actions/UnitActionSystem.cs index 1343674a..cd7c6c9f 100644 --- a/Assets/Scripts/Actions/UnitActionSystem.cs +++ b/Assets/Scripts/Actions/UnitActionSystem.cs @@ -62,7 +62,7 @@ namespace Actions { private void HandleSelectedAction() { if (!InputManager.Instance.IsMouseButtonDownThisFrame()) return; - GridPosition mouseGridPosition = LevelGrid.Instance.GetGridPosition(MouseWorld.GetPosition()); + GridPosition mouseGridPosition = LevelGrid.Instance.GetGridPosition(MouseWorld.GetPositionOnlyHitVisible()); if (!SelectedAction.IsValidActionGridPosition(mouseGridPosition)) return; if (!selectedUnit.TrySpendActionPointsToTakeAction(SelectedAction)) return; SetBusy(); diff --git a/Assets/Scripts/Grid/GridSystemVisual.cs b/Assets/Scripts/Grid/GridSystemVisual.cs index 20349174..61588841 100644 --- a/Assets/Scripts/Grid/GridSystemVisual.cs +++ b/Assets/Scripts/Grid/GridSystemVisual.cs @@ -50,11 +50,14 @@ namespace Grid { } UnitActionSystem.Instance.OnSelectedActionChanged += UnitActionSystem_OnSelectedActionChanged; - LevelGrid.Instance.OnAnyUnitMovedGridPosition += LevelGrid_OnAnyUnitMovedGridPosition; + UnitActionSystem.Instance.OnBusyChanged += UnitActionSystem_OnOnBusyChanged; + // LevelGrid.Instance.OnAnyUnitMovedGridPosition += LevelGrid_OnAnyUnitMovedGridPosition; UpdateGridVisual(); } - private void LevelGrid_OnAnyUnitMovedGridPosition(object sender, EventArgs e) => UpdateGridVisual(); + private void UnitActionSystem_OnOnBusyChanged(object sender, bool e) => UpdateGridVisual(); + + // private void LevelGrid_OnAnyUnitMovedGridPosition(object sender, EventArgs e) => UpdateGridVisual(); private void UnitActionSystem_OnSelectedActionChanged(object sender, EventArgs e) => UpdateGridVisual(); diff --git a/Assets/Scripts/MouseWorld.cs b/Assets/Scripts/MouseWorld.cs index b1a48e3a..a63eb63f 100644 --- a/Assets/Scripts/MouseWorld.cs +++ b/Assets/Scripts/MouseWorld.cs @@ -9,9 +9,21 @@ public class MouseWorld : MonoBehaviour { private void Awake() => instance = this; - public static Vector3 GetPosition() { + // public static Vector3 GetPosition() { + // Ray ray = Camera.main.ScreenPointToRay(InputManager.Instance.GetMouseScreenPosition()); + // Physics.Raycast(ray, out RaycastHit raycastHit, float.MaxValue, instance.mousePlaneLayerMask); + // return raycastHit.point; + // } + + public static Vector3 GetPositionOnlyHitVisible() { Ray ray = Camera.main.ScreenPointToRay(InputManager.Instance.GetMouseScreenPosition()); - Physics.Raycast(ray, out RaycastHit raycastHit, float.MaxValue, instance.mousePlaneLayerMask); - return raycastHit.point; + RaycastHit[] raycastHitArray = Physics.RaycastAll(ray, float.MaxValue, instance.mousePlaneLayerMask); + System.Array.Sort(raycastHitArray, (RaycastHit raycastHitA, RaycastHit raycastHitB) => Mathf.RoundToInt(raycastHitA.distance - raycastHitB.distance)); + foreach (RaycastHit raycastHit in raycastHitArray) { + if (!raycastHit.transform.TryGetComponent(out Renderer renderer)) continue; + if (renderer.enabled) return raycastHit.point; + } + + return Vector3.zero; } } \ No newline at end of file