/// <summary> /// Updates the given unit int the unit cache /// </summary> /// <param name="unit"></param> public void UpdateUnitCache(UnitInstance unit) { CachedUnits.RemoveAll(u => u.InstanceID == unit.InstanceID); CachedUnits.Add(unit); }
/// <summary> /// Updates the clients cache /// Marks certain tiles, cities and, units as visible /// </summary> private void UpdateCache() { if (Board == null) { return; } lock (_lock_cacheUpdate) { CachedUnits.Clear(); foreach (UnitInstance unit in GetMyUnits()) { UpdateUnitCache(unit); foreach (Tile tile in Board.GetAllTiles()) { if (Board.HexDistance(unit.Location, tile.Location) <= unit.BaseUnit.Sight) { UpdateTileCache(tile.Location); } } foreach (UnitInstance otherUnit in AllUnits) { if (otherUnit.PlayerID == Player.InstanceID) { continue; } if (Board.HexDistance(unit.Location, otherUnit.Location) <= unit.BaseUnit.Sight) { UpdateUnitCache(otherUnit); } } } List <int> myCityIDs = GetMyCityIDs(); foreach (Tile tile in Board.GetAllTiles()) { if (tile.CityID == -1) { continue; } if (myCityIDs.Contains(tile.CityID)) { UpdateTileCache(tile.Location); foreach (Point nLoc in tile.GetNeighbourTileLocations()) { UpdateTileCache(nLoc); foreach (UnitInstance unit in AllUnits) { if (unit.PlayerID == Player.InstanceID) { continue; } if (unit.Location == nLoc) { UpdateUnitCache(unit); } } } } } } }