public WorldPosition[] GetTravelEntrancePositions() { WorldCircle worldCircle = new WorldCircle(this.WorldPosition, 1); WorldPosition[] worldPositions = worldCircle.GetWorldPositions(this.worldPositionningService.World.WorldParameters); List <WorldPosition> list = new List <WorldPosition>(worldPositions); for (int i = list.Count - 1; i >= 0; i--) { WorldPosition worldPosition = list[i]; if (!worldPosition.IsValid) { list.RemoveAt(i); } else if (!this.pathfindingService.IsTileStopable(worldPosition, PathfindingMovementCapacity.Ground, (PathfindingFlags)0)) { list.RemoveAt(i); } else if (this.worldPositionningService.IsWaterTile(worldPosition)) { list.RemoveAt(i); } } list.Sort((WorldPosition left, WorldPosition right) => this.worldPositionningService.GetDistance(this.WorldPosition, left).CompareTo(this.worldPositionningService.GetDistance(this.WorldPosition, right))); return(list.ToArray()); }
void Start() { renderer = gameObject.GetComponent <LineRenderer>(); radii[0] = XRadius; radii[1] = YRadius; circle = new WorldCircle(ref renderer, Segments, radii); ZoneWall = GameObject.FindGameObjectWithTag("ZoneWall"); }
public override void Deactivate() { base.Deactivate(); WorldCircle worldCircle = new WorldCircle(base.WorldPosition, base.WorldEffectDefinition.Range); List <short> list = new List <short>(); WorldPosition[] worldPositions = worldCircle.GetWorldPositions(base.WorldEffectManager.WorldPositionningService.World.WorldParameters); for (int i = 0; i < worldPositions.Length; i++) { short regionIndex = base.WorldEffectManager.WorldPositionningService.GetRegionIndex(worldPositions[i]); if (!list.Contains(regionIndex)) { Region region = base.WorldEffectManager.WorldPositionningService.GetRegion(worldPositions[i]); if (region.City != null) { for (int j = 0; j < region.City.Districts.Count; j++) { District district = region.City.Districts[j]; if (this.descriptorsAppliedOnDistrict.ContainsKey(district.WorldPosition)) { List <string> list2 = this.descriptorsAppliedOnDistrict[district.WorldPosition]; for (int k = 0; k < list2.Count; k++) { StaticString descriptorNames = list2[k]; district.RemoveDescriptorByName(descriptorNames); } } district.Refresh(false); } } list.Add(regionIndex); } } worldPositions = new WorldCircle(base.WorldPosition, base.WorldEffectDefinition.Range + 1).GetWorldPositions(base.WorldEffectManager.WorldPositionningService.World.WorldParameters); for (int l = 0; l < worldPositions.Length; l++) { PointOfInterest pointOfInterest = base.WorldEffectManager.WorldPositionningService.GetPointOfInterest(worldPositions[l]); if (pointOfInterest != null) { if (pointOfInterest.CreepingNodeGUID != GameEntityGUID.Zero) { IGameEntity gameEntity = null; if (base.WorldEffectManager.GameEntityRepositoryService.TryGetValue(pointOfInterest.CreepingNodeGUID, out gameEntity)) { CreepingNode creepingNode = gameEntity as CreepingNode; if (!creepingNode.IsUnderConstruction) { creepingNode.ReApplyFIMSEOnCreepingNode(); } } } else if (pointOfInterest.SimulationObject.Tags.Contains(Village.ConvertedVillage)) { DepartmentOfTheInterior.ReApplyFIMSEOnConvertedVillage(pointOfInterest.Empire, pointOfInterest); } } } }
void IWorldEffectService.RemoveWorldEffectFromOwnerGUID(GameEntityGUID ownerGUID) { List <WorldEffect> list = new List <WorldEffect>(); foreach (List <WorldEffect> list2 in this.worldEffects.Values) { for (int i = 0; i < list2.Count; i++) { if (list2[i].OwnerGUID == ownerGUID) { list.Add(list2[i]); } } } int j = 0; while (j < list.Count) { WorldPosition worldPosition = list[j].WorldPosition; list[j].Deactivate(); List <WorldEffect> list3 = null; try { list3 = this.worldEffects[worldPosition]; goto IL_D3; } catch { Diagnostics.LogError("There isn't any effect at the position {0}", new object[] { worldPosition.ToString() }); } IL_CA: j++; continue; IL_D3: list3.Remove(list[j]); if (list3.Count == 0) { this.worldEffects.Remove(worldPosition); } WorldCircle worldCircle = new WorldCircle(worldPosition, list[j].WorldEffectDefinition.Range); List <short> list4 = new List <short>(); WorldPosition[] worldPositions = worldCircle.GetWorldPositions(this.WorldPositionningService.World.WorldParameters); for (int k = 0; k < worldPositions.Length; k++) { short regionIndex = this.WorldPositionningService.GetRegionIndex(worldPositions[k]); if (!list4.Contains(regionIndex)) { this.WorldPositionSimulationEvaluatorService.SetSomethingChangedOnRegion(regionIndex); list4.Add(regionIndex); } } goto IL_CA; } }
private void ManageGeomancy() { if (ELCPUtilities.GeomancyDuration < 1 || ELCPUtilities.GeomancyRadius < 0) { return; } Stopwatch stopwatch = new Stopwatch(); if (Amplitude.Unity.Framework.Application.Preferences.EnableModdingTools) { stopwatch.Start(); } foreach (global::Empire empire in base.Game.Empires) { List <IGarrison> list = new List <IGarrison>(); DepartmentOfTheInterior agency = empire.GetAgency <DepartmentOfTheInterior>(); if (agency != null) { list.AddRange(agency.Cities.Cast <IGarrison>()); list.AddRange(agency.Camps.Cast <IGarrison>()); } DepartmentOfDefense agency2 = empire.GetAgency <DepartmentOfDefense>(); if (agency2 != null) { list.AddRange(agency2.Armies.Cast <IGarrison>()); } foreach (IGarrison garrison in list) { using (IEnumerator <Unit> enumerator2 = garrison.Units.GetEnumerator()) { while (enumerator2.MoveNext()) { if (enumerator2.Current.CheckUnitAbility(UnitAbility.UnitAbilityGeomancy, -1)) { WorldCircle worldCircle = new WorldCircle((garrison as IWorldPositionable).WorldPosition, ELCPUtilities.GeomancyRadius); WorldPosition[] array = base.Game.World.PerformReversibleTerraformation(worldCircle.GetWorldPositions(base.Game.World.WorldParameters), false, ELCPUtilities.GeomancyDuration + 1); if (array.Length != 0) { base.Game.World.UpdateTerraformStateMap(true); this.eventService.Notify(new EventEmpireWorldTerraformed(empire, array, true)); } } } } } } if (Amplitude.Unity.Framework.Application.Preferences.EnableModdingTools) { stopwatch.Stop(); Diagnostics.Log("ELCP ManageGeomancy time elapsed: {0}", new object[] { stopwatch.Elapsed }); } }
void Start() { renderer = gameObject.GetComponent <LineRenderer>(); radii[0] = XRadius; radii[1] = YRadius; circle = new WorldCircle(ref renderer, Segments, radii); ZoneWall = GameObject.FindGameObjectWithTag("ZoneWall"); ZoneWall.transform.localScale = new Vector3((XRadius * 0.01f), ZoneWall.transform.localScale.y, (XRadius * 0.01f)); ZoneWall.transform.position = new Vector3(transform.position.x, ZoneWall.transform.position.y, transform.position.z); timePassed = Time.deltaTime; }
void Start() { lineRenderer = gameObject.GetComponent <LineRenderer>(); circle = new WorldCircle(ref lineRenderer, Segments, Radius, Radius); ZoneWall = GameObject.FindGameObjectWithTag("ZoneWall"); ZoneWall.transform.position = new Vector3(transform.position.x, ZoneWall.transform.position.y, transform.position.z); timePassed = Time.deltaTime; }
private List <District> GetAffectedDistrict() { List <District> list = new List <District>(); WorldCircle worldCircle = new WorldCircle(base.WorldPosition, base.WorldEffectDefinition.Range); List <short> list2 = new List <short>(); WorldPosition[] worldPositions = worldCircle.GetWorldPositions(base.WorldEffectManager.WorldPositionningService.World.WorldParameters); for (int i = 0; i < worldPositions.Length; i++) { short regionIndex = base.WorldEffectManager.WorldPositionningService.GetRegionIndex(worldPositions[i]); if (!list2.Contains(regionIndex)) { Region region = base.WorldEffectManager.WorldPositionningService.GetRegion(worldPositions[i]); if (region.City != null) { foreach (District district in region.City.Districts) { if (base.HasAnEffectOnPosition(district.WorldPosition)) { list.Add(district); } } } list2.Add(regionIndex); } } worldPositions = new WorldCircle(base.WorldPosition, base.WorldEffectDefinition.Range + 1).GetWorldPositions(base.WorldEffectManager.WorldPositionningService.World.WorldParameters); for (int j = 0; j < worldPositions.Length; j++) { PointOfInterest pointOfInterest = base.WorldEffectManager.WorldPositionningService.GetPointOfInterest(worldPositions[j]); if (pointOfInterest != null) { if (pointOfInterest.CreepingNodeGUID != GameEntityGUID.Zero) { IGameEntity gameEntity = null; if (base.WorldEffectManager.GameEntityRepositoryService.TryGetValue(pointOfInterest.CreepingNodeGUID, out gameEntity)) { CreepingNode creepingNode = gameEntity as CreepingNode; if (!creepingNode.IsUnderConstruction) { creepingNode.ReApplyFIMSEOnCreepingNode(); } } } else if (pointOfInterest.SimulationObject.Tags.Contains(Village.ConvertedVillage)) { DepartmentOfTheInterior.ReApplyFIMSEOnConvertedVillage(pointOfInterest.Empire, pointOfInterest); } } } return(list); }
public bool IsPositionNextToDevice(WorldPosition position) { WorldCircle worldCircle = new WorldCircle(position, 1); WorldPosition[] worldPositions = worldCircle.GetWorldPositions(this.WorldPositionningService.World.WorldParameters); List <WorldPosition> list = new List <WorldPosition>(worldPositions); for (int i = list.Count - 1; i >= 0; i--) { if (this.GetDeviceAtPosition(list[i]) != null) { return(true); } } return(false); }
private bool IsAreaVolcanoformed(WorldPosition areaCenter) { World world = base.Game.World; WorldCircle worldCircle = new WorldCircle(areaCenter, 1); WorldPosition[] worldPositions = worldCircle.GetWorldPositions(this.WorldPositionningService.World.WorldParameters); List <WorldPosition> list = new List <WorldPosition>(worldPositions); for (int i = list.Count - 1; i >= 0; i--) { TerrainTypeMapping terrainTypeMapping = null; if (world.TryGetTerraformMapping(worldPositions[i], out terrainTypeMapping)) { return(false); } } return(true); }
protected override IEnumerator OnShow(params object[] parameters) { IPlayerControllerRepositoryService playerControllerRepositoryService = base.Game.Services.GetService <IPlayerControllerRepositoryService>(); this.ResetPropertyValues(); WorldPosition worldPosition = (WorldPosition)this.context; this.stringBuilder.Length = 0; if (worldPosition.IsValid) { World world = ((global::Game)base.GameService.Game).World; WorldCircle worldCircle = new WorldCircle(worldPosition, 1); WorldPosition[] worldPositions = worldCircle.GetWorldPositions(this.worldPositionningService.World.WorldParameters); List <WorldPosition> filteredPositions = new List <WorldPosition>(worldPositions); for (int positionIndex = filteredPositions.Count - 1; positionIndex >= 0; positionIndex--) { TerrainTypeMapping terrainTypeMapping = null; if (!world.TryGetTerraformMapping(worldPositions[positionIndex], out terrainTypeMapping)) { filteredPositions.RemoveAt(positionIndex); } } for (int index = 0; index < filteredPositions.Count; index++) { this.FillWorldPositionEffects(playerControllerRepositoryService.ActivePlayerController.Empire, filteredPositions[index], false); } this.FillOutputString(ref this.stringBuilder); this.OldResult.Text = this.stringBuilder.ToString(); this.ResetPropertyValues(); this.stringBuilder.Length = 0; for (int index2 = 0; index2 < filteredPositions.Count; index2++) { this.FillWorldPositionEffects(playerControllerRepositoryService.ActivePlayerController.Empire, filteredPositions[index2], true); } this.FillOutputString(ref this.stringBuilder); this.NewResult.Text = this.stringBuilder.ToString(); this.OldResultNotAffected.Visible = (filteredPositions.Count == 0); this.NewResultNotAffected.Visible = (filteredPositions.Count == 0); } yield return(base.OnShow(parameters)); yield break; }
private void RefreshSharedLineOfSight(ISharedSightEntity sharedSightEntity) { if (!sharedSightEntity.WorldPosition.IsValid || !sharedSightEntity.SharedSightActive || sharedSightEntity.SharedSightBitsMask == 0) { sharedSightEntity.SharedSightDirty = false; return; } WorldCircle worldCircle = new WorldCircle(sharedSightEntity.WorldPosition, sharedSightEntity.SharedSightRange); List <WorldPosition> list = new List <WorldPosition>(worldCircle.GetWorldPositions(base.Game.World.WorldParameters)); for (int i = list.Count - 1; i >= 0; i--) { WorldPosition tilePosition = list[i]; if (!tilePosition.IsValid) { list.RemoveAt(i); } else if (this.IsWorldPositionObstructingVision(sharedSightEntity.WorldPosition, tilePosition, sharedSightEntity.SharedSightHeight, true)) { list.RemoveAt(i); } } for (int j = 0; j < list.Count; j++) { WorldPosition worldPosition = list[j]; short value = this.sharedVisibilityMap.GetValue(worldPosition) | sharedSightEntity.SharedSightBitsMask; this.sharedVisibilityMap.SetValue(worldPosition, value); if (sharedSightEntity.SharedExploration) { Empire[] majorEmpiresFromBitMask = base.Game.GetMajorEmpiresFromBitMask(sharedSightEntity.SharedSightBitsMask); for (int k = 0; k < majorEmpiresFromBitMask.Length; k++) { if (majorEmpiresFromBitMask[k] is MajorEmpire) { this.SetWorldPositionAsExplored(worldPosition, majorEmpiresFromBitMask[k], (short)majorEmpiresFromBitMask[k].Bits); } } } } sharedSightEntity.SharedSightDirty = false; }
void IWorldEffectService.AddWorldEffect(WorldEffectDefinition worldEffectDefinition, WorldPosition position, int empireIndex, GameEntityGUID ownerGUID, XmlReader reader) { WorldEffect worldEffect = Activator.CreateInstance(worldEffectDefinition.EffectType) as WorldEffect; worldEffect.Initialize(empireIndex, position, ownerGUID, worldEffectDefinition, this); List <WorldEffect> list; if (!this.worldEffects.ContainsKey(position)) { list = new List <WorldEffect>(); this.worldEffects.Add(position, list); } else { list = this.worldEffects[position]; } list.Add(worldEffect); if (reader != null) { worldEffect.ReadXml(reader); } else { worldEffect.Activate(); } WorldCircle worldCircle = new WorldCircle(position, worldEffectDefinition.Range); List <short> list2 = new List <short>(); WorldPosition[] worldPositions = worldCircle.GetWorldPositions(this.WorldPositionningService.World.WorldParameters); for (int i = 0; i < worldPositions.Length; i++) { short regionIndex = this.WorldPositionningService.GetRegionIndex(worldPositions[i]); if (!list2.Contains(regionIndex)) { this.WorldPositionSimulationEvaluatorService.SetSomethingChangedOnRegion(regionIndex); list2.Add(regionIndex); } } }
public WorldPosition[] GetTravelExitPositions() { WorldCircle worldCircle = new WorldCircle(this.WorldPosition, 1); WorldPosition[] worldPositions = worldCircle.GetWorldPositions(this.worldPositionningService.World.WorldParameters); List <WorldPosition> list = new List <WorldPosition>(worldPositions); for (int i = list.Count - 1; i >= 0; i--) { WorldPosition worldPosition = list[i]; if (!worldPosition.IsValid) { list.RemoveAt(i); } else if (!DepartmentOfDefense.CheckWhetherTargetPositionIsValidForUseAsArmySpawnLocation(worldPosition, PathfindingMovementCapacity.Ground | PathfindingMovementCapacity.Water)) { list.RemoveAt(i); } else if (!this.pathfindingService.IsTileStopable(worldPosition, PathfindingMovementCapacity.Ground, (PathfindingFlags)0)) { list.RemoveAt(i); } else { Region region = this.worldPositionningService.GetRegion(worldPosition); if (region != null && region.Kaiju != null && worldPosition == region.Kaiju.WorldPosition) { list.RemoveAt(i); } else if (this.worldPositionningService.IsWaterTile(worldPosition)) { list.RemoveAt(i); } } } list.Sort((WorldPosition left, WorldPosition right) => this.worldPositionningService.GetDistance(this.WorldPosition, left).CompareTo(this.worldPositionningService.GetDistance(this.WorldPosition, right))); return(list.ToArray()); }
private WorldPositionScore ComputeCreepingNodeImprovementScoreAtPosition(global::Empire empire, City city, PointOfInterest creepingNodePOI, CreepingNodeImprovementDefinition creepingNodeImprovementDefinition) { if (creepingNodePOI == null) { return(null); } if (creepingNodeImprovementDefinition == null) { return(null); } WorldPosition worldPosition = creepingNodePOI.WorldPosition; if (!worldPosition.IsValid) { return(null); } WorldPositionScore worldPositionScore = new WorldPositionScore(worldPosition, this.fimse); int regionIndex = (int)this.WorldPositionningService.GetRegionIndex(worldPosition); int fidsiextractionRange = creepingNodeImprovementDefinition.FIDSIExtractionRange; int num = fidsiextractionRange; if (ELCPUtilities.UseELCPSymbiosisBuffs && num > 0) { num = ((fidsiextractionRange < 7) ? 1 : 2); } WorldPosition[] worldPositions = new WorldCircle(worldPosition, num).GetWorldPositions(this.WorldPositionningService.World.WorldParameters); int num2 = 0; bool flag = false; foreach (WorldPosition worldPosition2 in worldPositions) { if (worldPosition2.IsValid) { if ((int)this.WorldPositionningService.GetRegionIndex(worldPosition2) != regionIndex) { worldPositionScore.SumOfLostTiles++; } else if (!this.WorldPositionningService.IsExploitable(worldPosition2, 0)) { worldPositionScore.SumOfLostTiles++; } else { if (city != null) { District district = this.WorldPositionningService.GetDistrict(worldPosition2); if (district != null) { if (district.Type == DistrictType.Exploitation) { goto IL_17A; } float propertyValue = district.GetPropertyValue(SimulationProperties.NumberOfExtensionAround); if (propertyValue < (float)DepartmentOfTheInterior.MinimumNumberOfExtensionNeighbourForLevelUp) { num2 += (int)propertyValue; goto IL_17A; } goto IL_17A; } } flag |= this.WorldPositionningService.IsWaterTile(worldPosition2); worldPositionScore.Add(this.GetWorldPositionScore(empire.Index, worldPosition2), 1f); worldPositionScore.NewDistrictNeighbourgNumber++; if (!this.WorldPositionningService.IsWaterTile(worldPosition2)) { worldPositionScore.NewDistrictNotWaterNeighbourNumber++; } } } IL_17A :; } worldPositionScore.SumOfNumberOfExtensionAround = num2; worldPositionScore.HasCostalTile = flag; return(worldPositionScore); }