public static bool Prefix(IntVec3 c, Map map, GenStepParams parms, int stackCount = 1)
        {
            /* if (VFECore.VFEGlobal.settings.enableLog)
             * {
             *  Log.Message("Testing defs");
             *  foreach (SymbolDef def in DefDatabase<SymbolDef>.AllDefs)
             *  {
             *      if (def.isTerrain && def.terrainDef == null)
             *          Log.Error("Found invalid terrain def: " + def.defName);
             *      else if (def.isPawn && def.pawnKindDefNS == null)
             *          Log.Error("Found invalid pawn def: " + def.defName);
             *      else if (!def.isTerrain && !def.isPawn && def.thingDef == null)
             *          Log.Error("Found invalid thing def: " + def.defName);
             *  }
             * } */

            if (map.ParentFaction != null && map.ParentFaction.def.HasModExtension <FactionSettlement>())
            {
                FactionSettlement factionSettlement = map.ParentFaction.def.GetModExtension <FactionSettlement>();

                if (factionSettlement.symbolResolver == null)
                {
                    GenStepPatchesUtils.Generate(map, c, factionSettlement);
                }
                else
                {
                    GenStepPatchesUtils.Generate(map, c, factionSettlement, factionSettlement.symbolResolver);
                }

                return(false);
            }
            else if (Find.World.worldObjects.AllWorldObjects.Find(o => o.Tile == map.Tile && o.def.HasModExtension <KCSG.FactionSettlement>()) is WorldObject worldObject)
            {
                FactionSettlement factionSettlement = worldObject.def.GetModExtension <FactionSettlement>();

                if (factionSettlement.symbolResolver == null)
                {
                    GenStepPatchesUtils.Generate(map, c, factionSettlement);
                }
                else
                {
                    GenStepPatchesUtils.Generate(map, c, factionSettlement, factionSettlement.symbolResolver);
                }

                return(false);
            }
            else
            {
                return(true);
            }
        }
        public static void Generate(Map map, IntVec3 c, FactionSettlement sf, string symbolResolver = "kcsg_settlement")
        {
            FactionSettlement.tempUseStructureLayout = sf.useStructureLayout;

            string sld;

            if (!sf.useStructureLayout)
            {
                sld = sf.chooseFromSettlements.RandomElement().defName;
            }
            else
            {
                if (ModLister.RoyaltyInstalled)
                {
                    sld = sf.chooseFromlayouts.RandomElement().defName;
                }
                else
                {
                    sld = sf.chooseFromlayouts.ToList().FindAll(sfl => !sfl.requireRoyalty).RandomElement().defName;
                }
            }

            FactionSettlement.temp = sld;

            // Get faction
            Faction faction;

            if (map.ParentFaction == null || map.ParentFaction == Faction.OfPlayer)
            {
                faction = Find.FactionManager.RandomEnemyFaction(false, false, true, TechLevel.Undefined);
            }
            else
            {
                faction = map.ParentFaction;
            }

            // Get settlement size
            int width;
            int height;

            if (sf.useStructureLayout)
            {
                KCSG_Utilities.HeightWidthFromLayout(DefDatabase <StructureLayoutDef> .GetNamed(sld), out height, out width);
            }
            else
            {
                SettlementLayoutDef temp = DefDatabase <SettlementLayoutDef> .GetNamed(sld);

                height = temp.settlementSize.x;
                width  = temp.settlementSize.z;
            }

            CellRect rect = new CellRect(c.x - width / 2, c.z - height / 2, width, height);

            rect.ClipInsideMap(map);

            ResolveParams rp = default(ResolveParams);

            rp.faction = faction;
            rp.rect    = rect;

            BaseGen.globalSettings.map = map;
            BaseGen.symbolStack.Push(symbolResolver, rp, null);
            BaseGen.Generate();
        }
Exemplo n.º 3
0
        public static bool Prefix(IntVec3 c, Map map, GenStepParams parms, int stackCount = 1)
        {
            //KENT TEMP CODE
            if (VFECore.VFEGlobal.settings.enableLog)
            {
                Log.Message("Testing defs");
                foreach (SymbolDef def in DefDatabase <SymbolDef> .AllDefs)
                {
                    if (def.isTerrain && def.terrainDef == null)
                    {
                        Log.Error("Found invalid terrain def: " + def.defName);
                    }
                    else if (def.isPawn && def.pawnKindDefNS == null)
                    {
                        Log.Error("Found invalid pawn def: " + def.defName);
                    }
                    else if (!def.isTerrain && !def.isPawn && def.thingDef == null)
                    {
                        Log.Error("Found invalid thing def: " + def.defName);
                    }
                }
            }

            if (map.ParentFaction != null && map.ParentFaction.def.HasModExtension <FactionSettlement>())
            {
                FactionSettlement   sf = map.ParentFaction.def.GetModExtension <FactionSettlement>();
                SettlementLayoutDef sld;
                if (ModLister.RoyaltyInstalled)
                {
                    sld = sf.chooseFrom.RandomElement();
                }
                else
                {
                    sld = sf.chooseFrom.ToList().FindAll(sfl => !sfl.requireRoyalty).RandomElement();
                }

                FactionSettlement.temp = sld;

                // Get faction
                Faction faction;
                if (map.ParentFaction == null || map.ParentFaction == Faction.OfPlayer)
                {
                    faction = Find.FactionManager.RandomEnemyFaction(false, false, true, TechLevel.Undefined);
                }
                else
                {
                    faction = map.ParentFaction;
                }

                // Get settlement size
                int      width  = sld.settlementSize.x;
                int      height = sld.settlementSize.z;
                CellRect rect   = new CellRect(c.x - width / 2, c.z - height / 2, width, height);
                rect.ClipInsideMap(map);

                ResolveParams rp = default(ResolveParams);
                rp.faction = faction;
                rp.rect    = rect;


                BaseGen.globalSettings.map = map;
                BaseGen.symbolStack.Push("kcsg_settlement", rp, null);
                BaseGen.Generate();
                return(false);
            }
            else if (Find.World.worldObjects.AllWorldObjects.Find(o => o.Tile == map.Tile && o.def.HasModExtension <KCSG.FactionSettlement>()) is WorldObject worldObject)
            {
                FactionSettlement   sf = worldObject.def.GetModExtension <FactionSettlement>();
                SettlementLayoutDef sld;
                if (ModLister.RoyaltyInstalled)
                {
                    sld = sf.chooseFrom.RandomElement();
                }
                else
                {
                    sld = sf.chooseFrom.ToList().FindAll(sfl => !sfl.requireRoyalty).RandomElement();
                }

                FactionSettlement.temp = sld;

                // Get faction
                Faction faction;
                if (map.ParentFaction == null || map.ParentFaction == Faction.OfPlayer)
                {
                    Log.Error("Faction was null or player.... throwing random ennemy faction");
                    faction = Find.FactionManager.RandomEnemyFaction(false, false, true, TechLevel.Undefined);
                }
                else
                {
                    faction = map.ParentFaction;
                }

                // Get settlement size
                int      width  = sld.settlementSize.x;
                int      height = sld.settlementSize.z;
                CellRect rect   = new CellRect(c.x - width / 2, c.z - height / 2, width, height);
                rect.ClipInsideMap(map);

                ResolveParams rp = default(ResolveParams);
                rp.faction = faction;
                rp.rect    = rect;


                BaseGen.globalSettings.map = map;
                if (sf.symbolResolver == null)
                {
                    BaseGen.symbolStack.Push("kcsg_settlement", rp, null);
                }
                else
                {
                    BaseGen.symbolStack.Push(sf.symbolResolver, rp, null);
                }
                BaseGen.Generate();
                return(false);
            }
            else
            {
                return(true);
            }
        }