示例#1
0
        private void GetPointOfInterests()
        {
            this.customRandomizationGroups = new Dictionary <int, List <int> >();
            this.randomAnomalyPositions    = new List <HexPos>();
            TerrainTransformation transform = base.Context.Settings.Transformations.Find((TerrainTransformation t) => t.Name == "Volcano");
            bool flag  = base.Context.Configuration.IsDLCAvailable("SummerFlamesPack");
            bool flag2 = base.Context.Configuration.IsDLCAvailable("NavalPack");

            for (int i = 0; i < base.Context.Grid.Columns; i++)
            {
                for (int j = 0; j < base.Context.Grid.Rows; j++)
                {
                    if (this.tmxPointOfInterestLayer.Data[j, i] != 0)
                    {
                        HexPos hexPos       = new HexPos(i, j);
                        bool   flag3        = false;
                        string tileProperty = base.Context.Settings.TmxMap.GetTileProperty(this.tmxPointOfInterestLayer.Data[hexPos.Row, hexPos.Column], "Values");
                        string poiName;
                        if (!string.IsNullOrEmpty(tileProperty))
                        {
                            poiName = this.GetPointOfInterest_CustomRandomization(hexPos, tileProperty);
                        }
                        else
                        {
                            poiName = base.Context.Settings.TmxMap.GetTileProperty(this.tmxPointOfInterestLayer.Data[j, i], ImportTmxPointOfInterestLayer.poiTypeNameProperty);
                        }
                        if (string.IsNullOrEmpty(poiName))
                        {
                            base.ReportTmx(string.Concat(new object[]
                            {
                                "?MissingPropertyTile&$Coordinate=",
                                i,
                                ",",
                                j - base.Context.Grid.Rows + 1,
                                "&$MissingProperty=",
                                ImportTmxPointOfInterestLayer.poiTypeNameProperty
                            }));
                        }
                        else
                        {
                            if (poiName.Contains("Facility"))
                            {
                                if (poiName == ImportTmxPointOfInterestLayer.randomFacilityName)
                                {
                                    string[] array = (from template in base.Context.Settings.POITemplates.Values
                                                      select template.Name into name
                                                      where name.Contains("Facility")
                                                      select name).ToArray <string>();
                                    poiName = array[this.random.Next(array.Length)];
                                }
                                bool flag4 = false;
                                for (int k = 0; k < 6; k++)
                                {
                                    HexPos hexPos2 = hexPos.Neighbour((HexPos.Direction)k);
                                    if (hexPos2.Row >= 0 && hexPos2.Row <= base.Context.Settings.Height && hexPos2.Column >= 0 && hexPos2.Column <= base.Context.Settings.Width && this.tmxPointOfInterestLayer.Data[hexPos2.Row, hexPos2.Column] != 0)
                                    {
                                        string tileProperty2 = base.Context.Settings.TmxMap.GetTileProperty(this.tmxPointOfInterestLayer.Data[hexPos2.Row, hexPos2.Column], ImportTmxPointOfInterestLayer.poiTypeNameProperty);
                                        if (!string.IsNullOrEmpty(tileProperty2) && tileProperty2.Contains("Citadel"))
                                        {
                                            if (flag4)
                                            {
                                                base.ReportTmx(string.Concat(new object[]
                                                {
                                                    "?CitadelIncorrectPosition&$Coordinate=",
                                                    hexPos2.Column,
                                                    ",",
                                                    hexPos2.Row - base.Context.Grid.Rows + 1
                                                }));
                                                throw new TmxImportException();
                                            }
                                            flag4 = true;
                                        }
                                    }
                                }
                                if (!flag4)
                                {
                                    goto IL_9F7;
                                }
                                flag3 = true;
                            }
                            if (poiName.Contains("Citadel"))
                            {
                                if (poiName == ImportTmxPointOfInterestLayer.randomCitadelName)
                                {
                                    string[] array2 = (from template in base.Context.Settings.POITemplates.Values
                                                       select template.Name into name
                                                       where name.Contains("Citadel")
                                                       select name).ToArray <string>();
                                    poiName = array2[this.random.Next(array2.Length)];
                                }
                                flag3 = true;
                            }
                            flag3 |= poiName.Contains("NavalQuestLocation_SunkenRuin");
                            Terrain terrain = base.Context.GetTerrain(hexPos);
                            if ((!flag3 && terrain.IsWaterTile) || terrain.Name.Contains("Waste"))
                            {
                                base.ReportTmx(string.Concat(new object[]
                                {
                                    "?POIIncompatibleTerrain&$Coordinate=",
                                    hexPos.Column,
                                    ",",
                                    hexPos.Row - base.Context.Grid.Rows + 1
                                }));
                            }
                            else if (flag3 && !terrain.IsWaterTile)
                            {
                                base.ReportTmx(string.Concat(new object[]
                                {
                                    "?POIIncompatibleTerrain&$Coordinate=",
                                    hexPos.Column,
                                    ",",
                                    hexPos.Row - base.Context.Grid.Rows + 1
                                }));
                            }
                            else if (poiName == "Ridge")
                            {
                                this.ridgesHexes.Add(hexPos);
                            }
                            else if (poiName == "Volcano")
                            {
                                this.ridgesHexes.Add(hexPos);
                                if (flag)
                                {
                                    base.Context.ApplyTransformation(transform, hexPos);
                                }
                            }
                            else
                            {
                                if (poiName.Contains("Anomaly"))
                                {
                                    if (poiName == ImportTmxPointOfInterestLayer.randomAnomalyName)
                                    {
                                        this.randomAnomalyPositions.Add(hexPos);
                                    }
                                    else if (base.Context.Anomalies.Keys.Contains(poiName))
                                    {
                                        if (!base.Context.Anomalies[poiName].Contains(hexPos))
                                        {
                                            base.Context.Anomalies[poiName].Add(hexPos);
                                        }
                                    }
                                    else
                                    {
                                        base.Context.Anomalies.Add(poiName, new List <HexPos>());
                                        base.Context.Anomalies[poiName].Add(hexPos);
                                    }
                                }
                                if (poiName.Contains("Village"))
                                {
                                    if (poiName == ImportTmxPointOfInterestLayer.randomMinorFactionVillage)
                                    {
                                        string[] array3 = (from template in base.Context.Settings.POITemplates.Values
                                                           select template.Name into name
                                                           where name.Contains("Village_")
                                                           select name).ToArray <string>();
                                        poiName = array3[this.random.Next(array3.Length)];
                                    }
                                    short  key    = base.Context.RegionData[j, i];
                                    Region region = base.Context.Regions[key];
                                    if (region == null || poiName.Split(new char[]
                                    {
                                        '_'
                                    }).Count <string>() < 2)
                                    {
                                        goto IL_9F7;
                                    }
                                    Region region2  = region;
                                    int    villages = region2.Villages;
                                    region2.Villages = villages + 1;
                                    if (string.IsNullOrEmpty(region.MinorFactionName))
                                    {
                                        region.MinorFactionName = poiName.Split(new char[]
                                        {
                                            '_'
                                        })[1];
                                    }
                                    else
                                    {
                                        poiName = "Village_" + region.MinorFactionName;
                                    }
                                }
                                if (poiName == ImportTmxPointOfInterestLayer.randomStrategicResourceDepositName)
                                {
                                    string[] array4 = (from template in base.Context.Settings.POITemplates.Values
                                                       select template.Name into name
                                                       where name.Contains("ResourceDeposit_Strategic")
                                                       select name).ToArray <string>();
                                    poiName = array4[this.random.Next(array4.Length)];
                                }
                                if (poiName == ImportTmxPointOfInterestLayer.randomLuxuryResourceDepositName)
                                {
                                    string[] array5 = (from template in base.Context.Settings.POITemplates.Values
                                                       select template.Name into name
                                                       where name.Contains("ResourceDeposit_Luxury")
                                                       select name).ToArray <string>();
                                    poiName = array5[this.random.Next(array5.Length)];
                                }
                                PointOfInterestTemplate pointOfInterestTemplate = base.Context.Settings.POITemplates.Values.FirstOrDefault((PointOfInterestTemplate template) => template.Name == poiName);
                                if (!flag2 && (poiName.Contains("Facility") || poiName.Contains("Citadel") || poiName.Contains("NavalQuestLocation_SunkenRuin")))
                                {
                                    pointOfInterestTemplate = null;
                                }
                                if (pointOfInterestTemplate != null)
                                {
                                    if (poiName.Contains("ResourceDeposit"))
                                    {
                                        short  key2    = base.Context.RegionData[j, i];
                                        Region region3 = base.Context.Regions[key2];
                                        if (region3 != null)
                                        {
                                            region3.Resources.Add(new PointOfInterestDefinition
                                            {
                                                Position     = new HexPos(i, j),
                                                TemplateName = pointOfInterestTemplate.Name
                                            });
                                        }
                                    }
                                    base.Context.POIDefinitions.Add(new PointOfInterestDefinition
                                    {
                                        Position     = new HexPos(i, j),
                                        TemplateName = pointOfInterestTemplate.Name
                                    });
                                }
                            }
                        }
                    }
                    IL_9F7 :;
                }
            }
            this.customRandomizationGroups.Clear();
        }