public static bool IsInRange( GameDatabase db, int playerid, StarSystemInfo ssi, Dictionary <int, List <ShipInfo> > cachedFleetShips = null) { return(StarMap.IsInRange(db, playerid, ssi.Origin, 1f, cachedFleetShips)); }
public void Sync(GameObjectSet gos) { StarMapBase.SyncContext context = new StarMapBase.SyncContext(this._db); List <StarSystemInfo> list1 = this._db.GetStarSystemInfos().ToList <StarSystemInfo>(); foreach (StarSystemInfo starSystemInfo in list1.Where <StarSystemInfo>((Func <StarSystemInfo, bool>)(x => !x.IsVisible)).ToList <StarSystemInfo>()) { if (!StarMap.IsInRange(this._db, this._sim.LocalPlayer.ID, starSystemInfo.ID)) { list1.Remove(starSystemInfo); } else { starSystemInfo.IsVisible = true; this._db.UpdateStarSystemVisible(starSystemInfo.ID, true); } } IEnumerable <StarMapTerrain> source1 = this.Terrain.Sync(gos, this._db.GetTerrainInfos(), context, false); IEnumerable <StarMapProvince> source2 = this.Provinces.Sync(gos, this._db.GetProvinceInfos(), context, false); IEnumerable <StarMapSystem> source3 = this.Systems.Sync(gos, (IEnumerable <StarSystemInfo>)list1, context, false); List <FleetInfo> list2 = this._db.GetFleetInfos(FleetType.FL_NORMAL | FleetType.FL_CARAVAN | FleetType.FL_ACCELERATOR).Where <FleetInfo>((Func <FleetInfo, bool>)(x => { if (!x.IsReserveFleet) { return(this._sim.GetPlayerObject(x.PlayerID) != null); } return(false); })).ToList <FleetInfo>(); int swarmerPlayer = this._sim.ScriptModules == null || this._sim.ScriptModules.Swarmers == null ? 0 : this._sim.ScriptModules.Swarmers.PlayerID; if (swarmerPlayer != 0) { foreach (FleetInfo fleetInfo in list2.Where <FleetInfo>((Func <FleetInfo, bool>)(x => { if (x.PlayerID == swarmerPlayer) { return(x.Name.Contains("Swarm")); } return(false); })).ToList <FleetInfo>()) { list2.Remove(fleetInfo); } } foreach (FleetInfo fleetInfo in list2.Where <FleetInfo>((Func <FleetInfo, bool>)(x => { if (this._db.GetMissionByFleetID(x.ID) != null) { return(this._db.GetMissionByFleetID(x.ID).Type == MissionType.PIRACY); } return(false); })).ToList <FleetInfo>()) { if (!this._db.PirateFleetVisibleToPlayer(fleetInfo.ID, this._sim.LocalPlayer.ID)) { list2.Remove(fleetInfo); } } IEnumerable <StarMapFleet> source4 = this.Fleets.Sync(gos, (IEnumerable <FleetInfo>)list2, context, true); this.PostObjectAddObjects((IGameObject[])source2.ToArray <StarMapProvince>()); this.PostObjectAddObjects((IGameObject[])source3.ToArray <StarMapSystem>()); this.PostObjectAddObjects((IGameObject[])source4.ToArray <StarMapFleet>()); if (this._sim.LocalPlayer.Faction.Name == "human") { this.PostObjectAddObjects((IGameObject[])this.NodeLines.Sync(gos, (IEnumerable <NodeLineInfo>) this._db.GetExploredNodeLines(this._sim.LocalPlayer.ID).Where <NodeLineInfo>((Func <NodeLineInfo, bool>)(x => x.IsPermenant)).ToList <NodeLineInfo>(), context, false).ToArray <StarMapNodeLine>()); } this.PostObjectAddObjects((IGameObject[])source1.ToArray <StarMapTerrain>()); Dictionary <int, int> dictionary1 = new Dictionary <int, int>(); List <StarMap.PlayerSystemPair> playerSystemPairList = new List <StarMap.PlayerSystemPair>(); foreach (StarMapFleet key in this.Fleets.Forward.Keys) { this._sim.GameDatabase.IsStealthFleet(key.FleetID); if (key.InTransit) { key.SetVisible(StarMap.IsInRange(this.App.Game.GameDatabase, this._sim.LocalPlayer.ID, key.Position, 1f, (Dictionary <int, List <ShipInfo> >)null)); } else { dictionary1[key.SystemID] = 0; bool flag = false; foreach (StarMap.PlayerSystemPair playerSystemPair in playerSystemPairList) { if (playerSystemPair.PlayerID == key.PlayerID && playerSystemPair.SystemID == key.SystemID) { flag = true; break; } } if (flag) { key.SetVisible(false); } else { key.SetVisible(StarMap.IsInRange(this.App.Game.GameDatabase, this._sim.LocalPlayer.ID, key.Position, 1f, (Dictionary <int, List <ShipInfo> >)null)); playerSystemPairList.Add(new StarMap.PlayerSystemPair() { PlayerID = key.PlayerID, SystemID = key.SystemID }); } } } foreach (StarMapFleet key in this.Fleets.Forward.Keys) { if (!key.InTransit && key.IsVisible) { key.SetSystemFleetIndex(dictionary1[key.SystemID]); Dictionary <int, int> dictionary2; int systemId; (dictionary2 = dictionary1)[systemId = key.SystemID] = dictionary2[systemId] + 1; } } foreach (StarMapFleet key in this.Fleets.Forward.Keys) { if (!key.InTransit && key.IsVisible) { key.SetSystemFleetCount(dictionary1[key.SystemID]); } } foreach (HomeworldInfo homeworld in this._db.GetHomeworlds()) { HomeworldInfo hw = homeworld; ColonyInfo hwci = this._db.GetColonyInfo(hw.ColonyID); if (hwci != null && list1.Any <StarSystemInfo>((Func <StarSystemInfo, bool>)(x => { if (x.ID == hw.SystemID) { return(hw.PlayerID == hwci.PlayerID); } return(false); }))) { this.PostSetProp("Homeworld", (object)this._sim.GetPlayerObject(hw.PlayerID).ObjectID, (object)this.Systems.Reverse[hw.SystemID].ObjectID); } } foreach (StarSystemInfo starSystemInfo in list1) { this.PostSetProp("ProvinceCapitalEffect", (object)false, (object)this.Systems.Reverse[starSystemInfo.ID].ObjectID); } foreach (ProvinceInfo provinceInfo in this._db.GetProvinceInfos().ToList <ProvinceInfo>()) { ProvinceInfo p = provinceInfo; if (list1.Any <StarSystemInfo>((Func <StarSystemInfo, bool>)(x => x.ID == p.CapitalSystemID))) { this.PostSetProp("ProvinceCapitalEffect", (object)true, (object)this.Systems.Reverse[p.CapitalSystemID].ObjectID); } } this.PostSetProp("RegenerateTerrain"); this.PostSetProp("RegenerateBorders"); this.PostSetProp("RegenerateFilters"); }
public static bool IsInRange(GameDatabase db, int playerid, int systemId) { return(StarMap.IsInRange(db, playerid, db.GetStarSystemOrigin(systemId), 1f, (Dictionary <int, List <ShipInfo> >)null)); }
protected override void UpdateSystem( StarMapSystem o, StarSystemInfo systemInfo, StarMapBase.SyncContext context) { int?systemProvinceId = this._db.GetStarSystemProvinceID(systemInfo.ID); o.SetProvince(systemProvinceId.HasValue ? this.Provinces.Reverse[systemProvinceId.Value] : (StarMapProvince)null); o.SetPosition(systemInfo.Origin); o.SetTerrain(systemInfo.TerrainID.HasValue ? this.Terrain.Reverse[systemInfo.TerrainID.Value] : (StarMapTerrain)null); IEnumerable <int> orbitalObjectIds = this._db.GetStarSystemOrbitalObjectIDs(systemInfo.ID); List <int> source = new List <int>(); bool flag1 = false; List <StationInfo> list1 = this._db.GetStationForSystem(systemInfo.ID).Where <StationInfo>((Func <StationInfo, bool>)(x => x.DesignInfo.StationType == StationType.NAVAL)).ToList <StationInfo>(); Dictionary <int, int> dictionary1 = new Dictionary <int, int>(); bool flag2 = false; foreach (int planetID in orbitalObjectIds) { AIColonyIntel ci = this._db.GetColonyIntelForPlanet(this._sim.LocalPlayer.ID, planetID); if (ci != null) { if (!dictionary1.ContainsKey(ci.OwningPlayerID)) { dictionary1.Add(ci.OwningPlayerID, 0); } Dictionary <int, int> dictionary2; int owningPlayerId; (dictionary2 = dictionary1)[owningPlayerId = ci.OwningPlayerID] = dictionary2[owningPlayerId] + 1; if (ci.OwningPlayerID == this._sim.LocalPlayer.ID) { flag1 = true; } source.Add(ci.OwningPlayerID); List <TreatyInfo> list2 = this._sim.GameDatabase.GetTreatyInfos().ToList <TreatyInfo>().Where <TreatyInfo>((Func <TreatyInfo, bool>)(x => x.Type == TreatyType.Trade)).ToList <TreatyInfo>(); if (flag1 || list2.Any <TreatyInfo>((Func <TreatyInfo, bool>)(x => { if (x.InitiatingPlayerId == this._sim.LocalPlayer.ID && x.ReceivingPlayerId == ci.OwningPlayerID) { return(true); } if (x.ReceivingPlayerId == this._sim.LocalPlayer.ID) { return(x.InitiatingPlayerId == ci.OwningPlayerID); } return(false); }))) { flag2 = true; } } } if (dictionary1.Count == 0) { foreach (StationInfo stationInfo in list1) { if (stationInfo.PlayerID == this._sim.LocalPlayer.ID) { flag1 = true; } } } if (flag1) { float supportRange = GameSession.GetSupportRange(this._db.AssetDatabase, this._db, this._sim.LocalPlayer.ID); o.SetSupportRange(supportRange); } int?systemOwningPlayer = this._db.GetSystemOwningPlayer(systemInfo.ID); if (systemOwningPlayer.HasValue && this._sim.GameDatabase.IsStarSystemVisibleToPlayer(this._sim.LocalPlayer.ID, systemInfo.ID) && StarMap.IsInRange(this._sim.GameDatabase, this._sim.LocalPlayer.ID, systemInfo.ID)) { o.SetPlayerBadge(Path.GetFileNameWithoutExtension(this._db.GetPlayerInfo(systemOwningPlayer.Value).BadgeAssetPath)); o.SetOwningPlayer(this._sim.GetPlayerObject(systemOwningPlayer.Value)); } else { o.SetPlayerBadge(""); o.SetOwningPlayer((Player)null); } source.Sort(); o.SetPlayers(source.Select <int, Player>((Func <int, Player>)(playerId => this._sim.GetPlayerObject(playerId))).ToArray <Player>()); List <PlayerInfo> playerInfos = context.PlayerInfos; List <Player> playerList1 = new List <Player>(); List <Player> playerList2 = new List <Player>(); foreach (PlayerInfo playerInfo in playerInfos) { if (this._db.SystemHasGate(systemInfo.ID, playerInfo.ID) && (playerInfo.ID == this._sim.LocalPlayer.ID || this._db.IsSurveyed(this._sim.LocalPlayer.ID, systemInfo.ID) && StarMap.IsInRange(this._db, playerInfo.ID, systemInfo.ID))) { playerList1.Add(this._sim.GetPlayerObject(playerInfo.ID)); } if (this._db.SystemHasAccelerator(systemInfo.ID, playerInfo.ID) && (playerInfo.ID == this._sim.LocalPlayer.ID || this._db.IsSurveyed(this._sim.LocalPlayer.ID, systemInfo.ID) && StarMap.IsInRange(this._db, playerInfo.ID, systemInfo.ID))) { playerList2.Add(this._sim.GetPlayerObject(playerInfo.ID)); } IEnumerable <StationInfo> forSystemAndPlayer = this._db.GetStationForSystemAndPlayer(systemInfo.ID, playerInfo.ID); if (playerInfo.ID == this._sim.LocalPlayer.ID) { o.SetHasNavalStation(forSystemAndPlayer.Any <StationInfo>((Func <StationInfo, bool>)(x => { if (x.PlayerID == this._sim.LocalPlayer.ID && x.DesignInfo.StationLevel > 0) { return(x.DesignInfo.StationType == StationType.NAVAL); } return(false); }))); o.SetHasScienceStation(forSystemAndPlayer.Any <StationInfo>((Func <StationInfo, bool>)(x => { if (x.PlayerID == this._sim.LocalPlayer.ID && x.DesignInfo.StationLevel > 0) { return(x.DesignInfo.StationType == StationType.SCIENCE); } return(false); }))); o.SetHasTradeStation(forSystemAndPlayer.Any <StationInfo>((Func <StationInfo, bool>)(x => { if (x.PlayerID == this._sim.LocalPlayer.ID && x.DesignInfo.StationLevel > 0) { return(x.DesignInfo.StationType == StationType.CIVILIAN); } return(false); }))); o.SetHasDiploStation(forSystemAndPlayer.Any <StationInfo>((Func <StationInfo, bool>)(x => { if (x.PlayerID == this._sim.LocalPlayer.ID && x.DesignInfo.StationLevel > 0) { return(x.DesignInfo.StationType == StationType.DIPLOMATIC); } return(false); }))); } o.SetStationCapacity(this._db.GetNumberMaxStationsSupportedBySystem(this._sim, systemInfo.ID, this._sim.LocalPlayer.ID)); if (playerInfo.ID == this._sim.LocalPlayer.ID && systemOwningPlayer.HasValue) { int cruiserEquivalent = this._db.GetSystemSupportedCruiserEquivalent(this._sim, systemInfo.ID, playerInfo.ID); int remainingSupportPoints = this._db.GetRemainingSupportPoints(this._sim, systemInfo.ID, playerInfo.ID); if (systemOwningPlayer.Value == this._sim.LocalPlayer.ID) { o.SetNavalCapacity(cruiserEquivalent); o.SetNavalUsage(cruiserEquivalent - remainingSupportPoints); } else { o.SetNavalCapacity(0); o.SetNavalUsage(0); } } } o.SetColonyTrapped(this._sim.GameDatabase.GetColonyTrapInfosAtSystem(systemInfo.ID).Where <ColonyTrapInfo>((Func <ColonyTrapInfo, bool>)(x => { if (this._sim.GameDatabase.GetFleetInfo(x.FleetID) != null) { return(this._sim.GameDatabase.GetFleetInfo(x.FleetID).PlayerID == this._sim.LocalPlayer.ID); } return(false); })).Any <ColonyTrapInfo>()); o.SetPlayersWithGates(playerList1.ToArray()); o.SetPlayersWithAccelerators(playerList2.ToArray()); o.SetSensorRange(this._sim.GameDatabase.GetSystemStratSensorRange(systemInfo.ID, this._sim.LocalPlayer.ID)); TradeResultsTable tradeResultsTable = this._sim.GameDatabase.GetTradeResultsTable(); TradeResultsTable resultsHistoryTable = this._sim.GameDatabase.GetLastTradeResultsHistoryTable(); if (flag2 && tradeResultsTable.TradeNodes.ContainsKey(systemInfo.ID)) { if (resultsHistoryTable.TradeNodes.ContainsKey(systemInfo.ID)) { o.SetTradeValues(this._sim, tradeResultsTable.TradeNodes[systemInfo.ID], resultsHistoryTable.TradeNodes[systemInfo.ID], systemInfo.ID); } else { o.SetTradeValues(this._sim, tradeResultsTable.TradeNodes[systemInfo.ID], new TradeNode(), systemInfo.ID); } } else { o.SetTradeValues(this._sim, new TradeNode(), new TradeNode(), systemInfo.ID); } int exploredByPlayer = this._db.GetLastTurnExploredByPlayer(this._sim.LocalPlayer.ID, systemInfo.ID); int turnCount = this._db.GetTurnCount(); o.SetIsSurveyed(exploredByPlayer != 0); this.SetSystemHasBeenRecentlySurveyed(this.Systems.Reverse[systemInfo.ID], exploredByPlayer != 0 && turnCount - exploredByPlayer <= 5 && !flag1); this.SetSystemHasRecentCombat(this.Systems.Reverse[systemInfo.ID], this._sim.CombatData.GetFirstCombatInSystem(this._sim.GameDatabase, systemInfo.ID, this._sim.GameDatabase.GetTurnCount() - 1) != null); this.SetSystemIsMissionTarget(this.Systems.Reverse[systemInfo.ID], this._db.GetPlayerMissionInfosAtSystem(this._sim.LocalPlayer.ID, systemInfo.ID).Any <MissionInfo>(), this._db.GetPlayerInfo(this._sim.LocalPlayer.ID).PrimaryColor); bool flag3 = SuperNova.IsPlayerSystemsInSuperNovaEffectRanges(this._db, this._sim.LocalPlayer.ID, systemInfo.ID) || NeutronStar.IsPlayerSystemsInNeutronStarEffectRanges(this._sim, this._sim.LocalPlayer.ID, systemInfo.ID); this.SetSystemRequriesSuperNovaWarning(this.Systems.Reverse[systemInfo.ID], flag3); this.UpdateSystemTrade(systemInfo.ID); o.SetHasLoaGate(this._db.GetFleetInfoBySystemID(systemInfo.ID, FleetType.FL_ACCELERATOR).Any <FleetInfo>()); }