Multi-Floors Visibility Colliders

MultiFloors
Sascha 2023-08-21 17:13:12 +07:00
parent 7a789484f9
commit b3f1dba25b
3 changed files with 21 additions and 6 deletions

@ -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();

@ -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();

@ -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;
}
}