private void MouseDown() { Debug.Log("mousedown detected"); lastSelected.Add(this); if (lastSelected.Count > 2) { lastSelected.RemoveAt(0); } if (lastSelected.Count == 2) { //DrawPathBasedOnHistory(); } var myPosition = hexMember.PositionInTileMap; var mapManager = hexMember.MapManager; var cells = HexTileMapManager.GetPositionsWithinJumpDistance(myPosition, (int)5) .Select(position => new { position, distance = myPosition.DistanceTo(position) }) .Where(info => info.distance % 2 == 0) .SelectMany(info => { return(mapManager .GetMembersAtLocation <HexMember>(info.position, member => member.GetComponent <SingleHexCell>() != null) ?.Select(hexMember => hexMember.GetComponent <SingleHexCell>())); }); ToggleCells(cells); }
// Start is called before the first frame update void Start() { Mesh mesh = new Mesh(); mapManager = GetComponent <HexTileMapManager>(); // this mesh can get pretty big, so we need the extra size mesh.indexFormat = UnityEngine.Rendering.IndexFormat.UInt32; SetupMesh(mesh, hexTile, mapManager); GetComponent <MeshFilter>().mesh = mesh; }
private IEnumerable <OffsetCoordinate> GetTilesInRectangle(HexTileMapManager tilemapManager) { var totalCells = new Vector2Int(tilemapManager.hexWidth, tilemapManager.hexHeight);//new Vector2Int(10, 10); var min = tilemapManager.tileMapMin.ToAxial(); for (var verticalIndex = 0; verticalIndex < totalCells.y; verticalIndex++) { for (var horizontalIndex = 0; horizontalIndex < totalCells.x; horizontalIndex++) { var newPos = new OffsetCoordinate(horizontalIndex, verticalIndex); yield return((newPos.ToAxial() + min).ToOffset()); } } }
private void SetupMesh(Mesh target, Mesh source, HexTileMapManager mapManager) { var offsets = GetTilesInRectangle(mapManager); var targetSubmeshes = defaultSubmeshCopies.Length + extraTerrainRegions.Length; //offsets = new[] //{ // new Vector3(2, 0, 2), // new Vector3(0, 0, 2), // new Vector3(2, 0, 0), // new Vector3(0, 0, 0), //}; var copier = new MeshCopier( source, 2, target, targetSubmeshes); foreach (var offset in offsets) { var planeLocation = mapManager.TileMapPositionToPositionInPlane(offset.ToAxial()); var realOffset = new Vector3(planeLocation.x, 0, planeLocation.y); var vertexColor = GetColorForTerrainAtPoint(offset); copier.NextCopy(realOffset, vertexColor); foreach (var submesh in defaultSubmeshCopies) { copier.CopySubmeshTrianglesToOffsetIndex(submesh, submesh); } if (extraTerrainRegions.Length > 0) { var extraSubmeshMapping = GetSubmeshForTerrainAtPoint(realOffset); copier.CopySubmeshTrianglesToOffsetIndex(extraSubmeshMapping.sourceSubmesh, extraSubmeshMapping.destinationSubmesh); } } meshEditor = copier.FinalizeCopy(); }
public static void CalculateServiceRanges(HexTileMapManager manager) { //foreach (var market in allMarkets) //{ // var marketMember = market.GetComponentInParent<HexMember>(); // var myHexPosition = marketMember.PositionInTileMap; // var effectiveRange = HexTileMapManager // .GetPositionsWithinJumpDistance(myHexPosition, 2); // market.myServiceRange = effectiveRange.ToArray(); //} var allMarkets = manager.GetAllOfType <MarketBehavior>().ToList(); Debug.Log($"Initializing {allMarkets.Count} markets"); var marketPositions = allMarkets .Select(x => x.GetComponentInParent <HexMember>()) .Select(x => x.PositionInTileMap) .ToList(); var minimum = manager.tileMapMin; var minimumAxial = minimum.ToAxial(); var maximum = manager.tileMapMax; var voroniData = VoroniTilingMapper.SetupVoroniMap(marketPositions, minimum, maximum); for (var row = 0; row < voroniData.Length; row++) { for (var col = 0; col < voroniData[row].Length; col++) { var index = voroniData[row][col]; var coordinate = new OffsetCoordinate(col, row).ToAxial() + minimumAxial; allMarkets[index].myServiceRange.Add(coordinate.ToOffset()); } } }