示例#1
0
 /// <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);
 }
示例#2
0
        /// <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);
                                }
                            }
                        }
                    }
                }
            }
        }