public void DeletePheromones(int id) { PheromoneStack pheromoneStack = pheromoneStacks[id]; foreach (PheromoneStackItem pheromoneStackItem in pheromoneStack.PheromoneItems) { Pheromone pheromone = pheromoneStackItem.Pheromone; pheromone.PheromoneItems.Remove(pheromoneStackItem.PheromoneItem); if (pheromone.PheromoneItems.Count == 0) { Items.Remove(pheromone.Pos); } } pheromoneStacks.Remove(id); }
public void UpdatePheromones(int id, float intensity) { PheromoneStack pheromoneStack = pheromoneStacks[id]; foreach (PheromoneStackItem pheromoneStackItem in pheromoneStack.PheromoneItems) { float relativIntensity = pheromoneStackItem.Distance * intensity; if (relativIntensity > 1) { relativIntensity = 1; } if (relativIntensity < 0) { relativIntensity = 0; } pheromoneStackItem.PheromoneItem.Intensity = relativIntensity; } }
public int DropPheromones(Player player, Position pos, int range, PheromoneType pheromoneType, float intensity, bool isStatic) { PheromoneStack pheromoneStack = new PheromoneStack(); PheromoneStack.pheromoneStackCounter++; int counter = PheromoneStack.pheromoneStackCounter; pheromoneStacks.Add(counter, pheromoneStack); Dictionary <Position, TileWithDistance> tiles = player.Game.Map.EnumerateTiles(pos, range, false); foreach (TileWithDistance tileWithDistance in tiles.Values) { float totaldistance = range - tileWithDistance.Distance; float distance = (totaldistance * 100) / range / 100; float relativIntensity = distance * intensity; PheromoneStackItem pheromoneStackItem = new PheromoneStackItem(); Pheromone pheromone; pheromone = FindAt(tileWithDistance.Pos); if (pheromone == null) { pheromone = new Pheromone(); pheromone.Pos = tileWithDistance.Pos; player.Game.Pheromones.Add(pheromone); } pheromoneStackItem.Pheromone = pheromone; pheromoneStackItem.Distance = distance; pheromoneStackItem.PheromoneItem = pheromone.Deposit(player.PlayerModel.Id, relativIntensity, pheromoneType, isStatic); pheromoneStack.PheromoneItems.Add(pheromoneStackItem); } return(counter); }