private List <HeightmapHandle> UpdateHoveredHandlesSimpleSelection(RaycastHit raycast) { GridMesh gridMesh = GameManager.Instance.Map.SurfaceGridMesh; List <HeightmapHandle> hoveredHandles = new List <HeightmapHandle>(); TileSelectionHit hit = TileSelection.PositionToTileSelectionHit(raycast.point, TileSelectionMode.Everything); switch (hit.Target) { case TileSelectionTarget.InnerTile: hoveredHandles.Add(gridMesh.GetHandle(hit.X, hit.Y)); hoveredHandles.Add(gridMesh.GetHandle(hit.X + 1, hit.Y)); hoveredHandles.Add(gridMesh.GetHandle(hit.X, hit.Y + 1)); hoveredHandles.Add(gridMesh.GetHandle(hit.X + 1, hit.Y + 1)); break; case TileSelectionTarget.Corner: hoveredHandles.Add(gridMesh.GetHandle(hit.X, hit.Y)); break; case TileSelectionTarget.BottomBorder: hoveredHandles.Add(gridMesh.GetHandle(hit.X, hit.Y)); hoveredHandles.Add(gridMesh.GetHandle(hit.X + 1, hit.Y)); break; case TileSelectionTarget.LeftBorder: hoveredHandles.Add(gridMesh.GetHandle(hit.X, hit.Y)); hoveredHandles.Add(gridMesh.GetHandle(hit.X, hit.Y + 1)); break; } return(hoveredHandles); }
private void Update() { if (Input.GetMouseButtonUp(0) || Input.GetMouseButtonUp(1)) { GameManager.Instance.Map.CommandManager.FinishAction(); } RaycastHit raycast = LayoutManager.Instance.CurrentCamera.CurrentRaycast; if (!raycast.transform) { return; } OverlayMesh overlayMesh = raycast.transform.GetComponent <OverlayMesh>(); GroundMesh groundMesh = raycast.transform.GetComponent <GroundMesh>(); TileEntity tileEntity = raycast.transform.GetComponent <TileEntity>(); Wall wallEntity = tileEntity as Wall; bool automaticReverse = automaticReverseToggle.isOn; bool reverse = reverseToggle.isOn; int floor = 0; int x = -1; int y = -1; bool horizontal = false; bool propertiesNeedSaving = false; if (automaticReverse != Properties.Instance.WallAutomaticReverse) { Properties.Instance.WallAutomaticReverse = automaticReverse; propertiesNeedSaving = true; } if (reverse != Properties.Instance.WallReverse) { Properties.Instance.WallReverse = reverse; propertiesNeedSaving = true; } if (propertiesNeedSaving) { Properties.Instance.SaveProperties(); } if (wallEntity && wallEntity.Valid) { floor = tileEntity.Floor; if (LayoutManager.Instance.CurrentCamera.Floor == floor + 1) { floor++; } x = tileEntity.Tile.X; y = tileEntity.Tile.Y; EntityType type = tileEntity.Type; horizontal = (type == EntityType.Hwall || type == EntityType.Hfence); } else if (overlayMesh || groundMesh) { if (overlayMesh) { floor = LayoutManager.Instance.CurrentCamera.Floor; } else if (groundMesh) { floor = 0; } TileSelectionHit tileSelectionHit = TileSelection.PositionToTileSelectionHit(raycast.point, TileSelectionMode.Borders); TileSelectionTarget target = tileSelectionHit.Target; if (target == TileSelectionTarget.Nothing) { return; } x = tileSelectionHit.X; y = tileSelectionHit.Y; horizontal = (target == TileSelectionTarget.BottomBorder); } if (Input.GetMouseButton(0)) { Floor currentFloor = GameManager.Instance.Map[x, y].GetTileContent(floor) as Floor; bool shouldReverse = false; if (automaticReverse && horizontal) { Floor nearFloor = GameManager.Instance.Map[x, y - 1].GetTileContent(floor) as Floor; shouldReverse = currentFloor && !nearFloor; } else if (automaticReverse && !horizontal) { Floor nearFloor = GameManager.Instance.Map[x - 1, y].GetTileContent(floor) as Floor; shouldReverse = !currentFloor && nearFloor; } if (reverse) { shouldReverse = !shouldReverse; } WallData data = GuiManager.Instance.WallsTree.SelectedValue as WallData; if (horizontal) { GameManager.Instance.Map[x, y].SetHorizontalWall(data, shouldReverse, floor); } else { GameManager.Instance.Map[x, y].SetVerticalWall(data, shouldReverse, floor); } } else if (Input.GetMouseButton(1)) { if (floor != LayoutManager.Instance.CurrentCamera.Floor) { return; } if (horizontal) { GameManager.Instance.Map[x, y].SetHorizontalWall(null, false, floor); } else { GameManager.Instance.Map[x, y].SetVerticalWall(null, false, floor); } } }