コード例 #1
0
    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());
    }
コード例 #2
0
 void Start()
 {
     renderer = gameObject.GetComponent <LineRenderer>();
     radii[0] = XRadius;  radii[1] = YRadius;
     circle   = new WorldCircle(ref renderer, Segments, radii);
     ZoneWall = GameObject.FindGameObjectWithTag("ZoneWall");
 }
コード例 #3
0
    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);
                }
            }
        }
    }
コード例 #4
0
    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;
        }
    }
コード例 #5
0
    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
            });
        }
    }
コード例 #6
0
    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;
    }
コード例 #7
0
    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;
    }
コード例 #8
0
    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);
    }
コード例 #9
0
    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);
    }
コード例 #10
0
    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);
    }
コード例 #11
0
    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;
    }
コード例 #12
0
    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;
    }
コード例 #13
0
    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);
            }
        }
    }
コード例 #14
0
    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());
    }
コード例 #15
0
    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);
    }