void Start() { string path = "Assets/SavedMaps/" + Mapname + ".txt"; Tile[] tiles = TilemapExtensions.GetTiles <Tile>(Tilemap); String serialMapString = ""; int cnt = tiles.Length; foreach (Tile tile in tiles) { serialMapString = serialMapString + tile.sprite.name; if (--cnt != 0) { serialMapString = serialMapString + ";"; } Debug.Log(serialMapString); } File.WriteAllText(path, string.Empty); StreamWriter writer = new StreamWriter(path, true); writer.Write(X + ";" + Y + ";"); writer.Write(serialMapString); writer.Close(); AssetDatabase.ImportAsset(path); }
public override void Pick(GridLayout gridLayout, GameObject brushTarget, BoundsInt position, Vector3Int pickStart) { Tilemap component = brushTarget.GetComponent <Tilemap>(); if (component == null) { return; } base.Pick(gridLayout, brushTarget, position, pickStart); foreach (Vector3Int tilePosition in position.allPositionsWithin) { if (component.GetTile(tilePosition) == null) { continue; } TilemapExtensions.AutoSelectPaintTarget(); return; } }
protected override void ScheduleAction() { player = GameManager.Instance.playerBehaviour; bool playerInRange = Vector3.Distance(transform.position, player.transform.position) < range; FacePlayer(); if (!playerInRange) { return; } Debug.Log("SPITTER: Player in range!"); Vector3 playerPosition = player.transform.position; attackDirection = Vector3.zero; // First check around the positions if (IsAbove(playerPosition, 0.05f, range)) { attackDirection = new Vector3(0, 1f, 0); } else if (IsBelow(playerPosition, 0.05f, range)) { attackDirection = new Vector3(0, -1f, 0); } else if (IsRight(playerPosition, 0.05f, range)) { attackDirection = new Vector3(1f, 0, 0); } else if (IsLeft(playerPosition, 0.05f, range)) { attackDirection = new Vector3(-1f, 0, 0); } Debug.Log("SPITTER: attack direction " + attackDirection); //else //{ // Vector3[] choices = { new Vector3(1f, 0, 0), new Vector3(0, 1f, 0), // new Vector3(-1f, 0, 0), new Vector3(0, -1f, 0) }; // // int index = Random.Range(0, 4); // addition = choices[index]; //} if (attackDirection == Vector3.zero) { return; } List <Vector3> attackPositions = new List <Vector3>(); Vector3 position = transform.position; if (ray != null) { for (int i = 0; i < ray.Count; i++) { ray[i].SetActive(false); Destroy(ray[i]); } ray.Clear(); } ray = new List <GameObject>(); AddInitialRay(transform.position); // Initnial ray bool playerReached = false; for (int i = 0; i < range; i++) { position += attackDirection; Debug.Log("Position: " + position); if (!TilemapExtensions.IsCellEmpty(pathfindingTilemap, position)) { if (!playerReached) { Debug.Log("SPITTER: Clearing ray because player not reached."); attackPositions.Clear(); } Destroy(ray[ray.Count - 1]); ray.RemoveAt(ray.Count - 1); AddRay(position - attackDirection, true); break; } attackPositions.Add(position); if (Vector3.Distance(position, playerPosition) < 0.05f) { playerReached = true; } // Add the ray: if (i == range - 1) { AddRay(position, true); } else { AddRay(position, false); } } for (int i = 0; i < attackPositions.Count; i++) { Vector3Int tilePosition = groundTilemap.WorldToCell(attackPositions[i]); groundTilemap.SetTileFlags(tilePosition, TileFlags.None); groundTilemap.SetColor(tilePosition, attackColor); attackedTiles.Add(tilePosition); GameManager.Instance.AddAttackedTile(tilePosition); } }