public static TilemapSerializedData SerializeTilemap(STETilemap tilemap) { TilemapSerializedData data = new TilemapSerializedData(); System.Action <STETilemap, int, int, uint> action = (tmap, gridX, gridY, tileData) => { data.tileDataList.Add(new TilemapSerializedData.TileData() { gridX = gridX, gridY = gridY, tileData = tileData }); }; TilemapUtils.IterateTilemapWithAction(tilemap, action); return(data); }
private void SetDirtiableTiles() { var data = new List <Vector2>(); TilemapUtils.IterateTilemapWithAction(_shipBackgroundTilemap, (tilemap, x, y, tileData) => { var tile = tilemap.GetTile(x, y); if (tile?.paramContainer == null) { return; } if (tile.paramContainer.GetBoolParam("CanBeDirty")) { data.Add(new Vector2(x, y)); } }); _dirtiableTiles = data; }
private RoombaStationBehaviour FindNextRoombaStation() { RoombaStationBehaviour choosenStation = null; var lowestDist = float.MaxValue; TilemapUtils.IterateTilemapWithAction(_doodadsForegroundTilemap, (tilemap, gx, gy, data) => { var tile = tilemap.GetTile(gx, gy); if (tile?.paramContainer == null) { return; } if (!tile.paramContainer.GetBoolParam("IsRoombaStation")) { return; } var roombaStation = tilemap.GetTileObject(gx, gy).GetComponent <RoombaStationBehaviour>(); if (!roombaStation.CanRoombaDockHere(this)) { return; } var gridWorldPos = TilemapUtils.GetGridWorldPos( _doodadsForegroundTilemap, gx, gy); var transformPosition = transform.position.magnitude - gridWorldPos.magnitude; if (transformPosition < lowestDist) { System.Console.WriteLine("gridWorldPos " + gridWorldPos); System.Console.WriteLine("roombaStation " + roombaStation.transform); choosenStation = roombaStation; lowestDist = transformPosition; } }); return(choosenStation); }
private void HandleSearchDirt() { if (!navMeshAgent2D.hasPath && _currentCapacity > 0) { // Find the nearest dirt tile _waitingTicks = 60; var choosenPosition = Vector2.positiveInfinity; var lowestDist = float.MaxValue; TilemapUtils.IterateTilemapWithAction(_doodadsBackgroundTilemap, (tilemap, gx, gy, data) => { if (IsDirtTile(data)) { var gridWorldPos = TilemapUtils.GetGridWorldPos( _doodadsBackgroundTilemap, gx, gy); var transformPosition = Vector2.Distance(transform.position, gridWorldPos); if (transformPosition < lowestDist) { lowestDist = transformPosition; choosenPosition = new Vector2(gx, gy); } } }); if (Math.Abs(lowestDist - float.MaxValue) > 0.01) { var gridWorldPos = TilemapUtils.GetGridWorldPos( _doodadsBackgroundTilemap, (int)choosenPosition.x, (int)choosenPosition.y); // add 0.25f to y so the roomba is on top of dirt tiles navMeshAgent2D.destination = gridWorldPos + new Vector3(0, 0.25f, 0); } } }