internal void Update(MapPheromone mapPheromone) { if (mapPheromone == null) { if (markerEnergy != null) { markerEnergy.transform.position = Cell.transform.position; } if (markerToHome != null) { markerToHome.transform.position = Cell.transform.position; } if (markerToMineral != null) { markerToMineral.transform.position = Cell.transform.position; } if (markerToEnemy != null) { markerToEnemy.transform.position = Cell.transform.position; } } else { if (markerEnergy == null) { if (markerPrefab == null) { markerPrefab = Resources.Load <GameObject>("Prefabs/Terrain/Marker"); } markerEnergy = HexGrid.Instantiate(markerPrefab, Cell.transform, false); markerEnergy.name = Cell.name + "-Energy"; markerToHome = HexGrid.Instantiate(markerPrefab, Cell.transform, false); markerToHome.name = Cell.name + "-Home"; MeshRenderer meshRenderer = markerToHome.GetComponent <MeshRenderer>(); meshRenderer.material.color = new Color(0, 0, 0.6f); markerToMineral = HexGrid.Instantiate(markerPrefab, Cell.transform, false); markerToMineral.name = Cell.name + "-Mineral"; meshRenderer = markerToMineral.GetComponent <MeshRenderer>(); meshRenderer.material.color = new Color(0, 0.4f, 0); markerToEnemy = HexGrid.Instantiate(markerPrefab, Cell.transform, false); markerToEnemy.name = Cell.name + "-Mineral"; meshRenderer = markerToEnemy.GetComponent <MeshRenderer>(); meshRenderer.material.color = new Color(0.4f, 0, 0); } if (mapPheromone.IntensityToHome > 0) { Vector3 position = Cell.transform.position; position.y += 0.054f + (0.2f * mapPheromone.IntensityToHome); position.x += 0.1f; markerToHome.transform.position = position; } else { Vector3 position = Cell.transform.position; position.y -= 1; position.x += 0.1f; markerToHome.transform.position = position; } if (mapPheromone.IntensityToMineral > 0) { Vector3 position = Cell.transform.position; position.y += 0.054f + (0.2f * mapPheromone.IntensityToMineral); position.x += 0.2f; markerToMineral.transform.position = position; } else { Vector3 position = Cell.transform.position; position.y -= 1; position.x += 0.2f; markerToMineral.transform.position = position; } if (mapPheromone.IntensityToEnemy > 0) { Vector3 position = Cell.transform.position; position.y += 0.054f + (0.2f * mapPheromone.IntensityToEnemy); position.x += 0.3f; markerToEnemy.transform.position = position; } else { Vector3 position = Cell.transform.position; position.y -= 1; position.x += 0.3f; markerToEnemy.transform.position = position; } float highestEnergy = -1; int highestPlayerId = 0; foreach (MapPheromoneItem mapPheromoneItem in mapPheromone.PheromoneItems) { if (mapPheromoneItem.PheromoneType == Engine.Ants.PheromoneType.Energy) { if (mapPheromoneItem.Intensity >= highestEnergy) { highestEnergy = mapPheromoneItem.Intensity; highestPlayerId = mapPheromoneItem.PlayerId; } } } //highestEnergy = 0; if (highestEnergy > 0) { Vector3 position = Cell.transform.position; position.y += 0.054f + (0.2f * highestEnergy); markerEnergy.transform.position = position; UnitFrame.SetPlayerColor(highestPlayerId, markerEnergy); } else { Vector3 position = Cell.transform.position; position.y -= 1; markerEnergy.transform.position = position; } } }
void invoke() { if (WaitForTurn.WaitOne(10)) { List <Position> newUpdatedPositions = new List <Position>(); foreach (Position pos in MapInfo.Pheromones.Keys) { MapPheromone mapPheromone = MapInfo.Pheromones[pos]; HexCell hexCell = GroundCells[pos]; hexCell.Update(mapPheromone); newUpdatedPositions.Add(pos); updatedPositions.Remove(pos); } foreach (Position pos in updatedPositions) { HexCell hexCell = GroundCells[pos]; hexCell.Update(null); } updatedPositions = newUpdatedPositions; // foreach (MapPlayerInfo mapPlayerInfo in MapInfo.PlayerInfo.Values) { } foreach (UnitFrame unitFrame in Units.Values) { //if (unitFrame.FinalDestination != null) { unitFrame.JumpToTarget(unitFrame.FinalDestination); //unitFrame.FinalDestination = null; } unitFrame.NextMove = null; } foreach (Move move in newMoves) { if (move.MoveType == MoveType.Add) { if (Units.ContainsKey(move.UnitId)) { // Happend in player view } else { CreateUnit(move); } } else if (move.MoveType == MoveType.UpdateStats) { if (Units.ContainsKey(move.UnitId)) { UnitFrame unit = Units[move.UnitId]; unit.UpdateStats(move.Stats); } else { // Happend in player view } } else if (move.MoveType == MoveType.Move || move.MoveType == MoveType.Extract || move.MoveType == MoveType.Fire) { UnitFrame unit = Units[move.UnitId]; unit.NextMove = move; } else if (move.MoveType == MoveType.Hit) { UnitFrame unit = Units[move.UnitId]; unit.NextMove = move; } else if (move.MoveType == MoveType.Upgrade) { UnitFrame unit = Units[move.OtherUnitId]; unit.NextMove = move; } else if (move.MoveType == MoveType.UpdateGround) { HexCell hexCell = GroundCells[move.Positions[0]]; hexCell.NextMove = move; hexCell.UpdateGround(); } else if (move.MoveType == MoveType.Delete) { Debug.Log("Delete Unit " + move.UnitId); UnitFrame unit = Units[move.UnitId]; unit.NextMove = null; unit.Delete(); Units.Remove(move.UnitId); } } newMoves.Clear(); WaitForDraw.Set(); } }