void ShowStench() { for (int i = 0; i <= stench; i++) { List <Node> tilesReachable = grid.TilesReachables(this, stench - i); foreach (Node tile in tilesReachable) { Collider[] tilesInSpace = Physics.OverlapSphere(grid.CalcWorldPos(tile.x, transform.position.y - 1, tile.y), 0.1f); for (int j = 0; j < tilesInSpace.Length; j++) { if (GetComponent <Minotaur> ()) { tilesInSpace [j].SendMessage("MinotaurDistance", stench - i); } else { tilesInSpace [j].SendMessage("PlayerDistance", stench - i); } } } } }
bool SurroundingOk() { bool ok = true; List <Node> surroundingNodes = grid.TilesReachables(thisUnit, thisUnit.stench); // Para cada tile na área de visão do player foreach (var node in surroundingNodes) { Minotaur minotaur = FindObjectOfType <Minotaur>(); if (minotaur) { // Se o minotauro está no tile if (GameObject.Find(node.lXcY).GetComponent <Tile>().minotaurNear == 0) { // e eu não sabia que ele tava vivo, if (!kdb.CheckVar("isAlive", minotaur.gameObject.name)) { // agora sei que está vivo! kdb.Add("isAlive", minotaur.gameObject.name); } // e eu não sabia que ele estava nesse tile, if (!kdb.CheckRelation("atTile", minotaur.gameObject.name, node.lXcY)) { // agora sei que está naquele tile, e tenho que repensar o plano. kdb.Add("atTile", minotaur.gameObject.name, node.lXcY); ok = false; } } // Se o minotauro não está no tile else { // e eu achava que ele estava nesse tile, if (kdb.CheckRelation("atTile", minotaur.gameObject.name, node.lXcY)) { // agora sei que ele não está nesse tile, e tenho que repensar o plano. kdb.Remove("atTile", minotaur.gameObject.name, node.lXcY); ok = false; } } } else { // Minotauro está morto, então arrumo meu conhecimento se eu achava que ele estava em algum lugar. kdb.Remove("isAlive", "minotaur"); kdb.Remove("atTile", "minotaur"); } } return(ok); }