public void OnDrag(PointerEventData eventData) { if (!Active) { return; } MapGridPosition closestPosition = GetClosestMouseGridPosition(eventData); Building.SetAdjustedPosition(closestPosition.WorldPosition); }
public MapGridPosition MinGrid() { MapGridPosition min = null; foreach (var grid in GridPositions) { if (min == null || GridValue(grid) <= GridValue(min)) { min = grid; } } return(min); }
private bool TryGetMouseGridPosition(out MapGridPosition result) { Ray ray = _mainCamera.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out RaycastHit hitInfo, _mainCamera.farClipPlane, _floorMask)) { Vector3 mousePosition = hitInfo.point; result = Building.Map.GetClosestGridPosition(mousePosition); return(true); } result = default; return(false); }
public void OnEndDrag(PointerEventData eventData) { if (!Active) { return; } MapGridPosition closestPosition = GetClosestMouseGridPosition(eventData); Vector2Int gridPosition = closestPosition.GridPosition; Building.Map.Grid.RemoveFromGrid(Building.CurrentPosition, Building.Size); if (Building.Map.Grid.IsSlotAvailable(gridPosition, Building.Size)) { Building.SetMapGridPosition(closestPosition); } else { Building.Map.Grid.InsertIntoGrid(Building.CurrentPosition, Building.Size); transform.position = _startingPosition; } }
public void SetMapGridPosition(MapGridPosition position) { CurrentPosition = position.GridPosition; SetAdjustedPosition(position.WorldPosition); Map.Grid.InsertIntoGrid(position.GridPosition, Size); }
private float GridValue(MapGridPosition grid) { return(grid.MapPosition.x + grid.MapPosition.y); }