public void StopQuest()
        {
            this.active = false;
            MapParent mapParent = this.parent as MapParent;

            if (mapParent != null && mapParent.Map != null)
            {
                int num = mapParent.Map.listerThings.ThingsOfDef(this.targetDef).Count <Thing>();
                if (num > this.targetNumber && this.ticksHeld > this.ticksTarget)
                {
                    if (mapParent.Map.gameConditionManager.ConditionIsActive(this.gameConditionCaused))
                    {
                        mapParent.Map.gameConditionManager.ActiveConditions.Remove(mapParent.Map.gameConditionManager.GetActiveCondition(this.gameConditionCaused));
                    }
                    Settlement settlement = Find.World.worldObjects.SettlementAt(this.worldTileAffected);
                    if (settlement != null && settlement.HasMap)
                    {
                        GameConditionManager gameConditionManager = settlement.Map.gameConditionManager;
                        if (gameConditionManager.ConditionIsActive(this.gameConditionCaused))
                        {
                            gameConditionManager.ActiveConditions.Remove(gameConditionManager.GetActiveCondition(this.gameConditionCaused));
                        }
                    }
                }
            }
        }
Exemple #2
0
        protected override bool CanFireNowSub(IncidentParms parms)
        {
            if (!settings.Active)
            {
                return(false);
            }

            GameConditionManager gameConditionManager = parms.target.GameConditionManager;

            if (gameConditionManager == null)
            {
                Log.ErrorOnce($"Couldn't find condition manager for incident target {parms.target}", 70849667);
                return(false);
            }
            if (gameConditionManager.ConditionIsActive(def.gameCondition))
            {
                return(false);
            }
            List <GameCondition> activeConditions = gameConditionManager.ActiveConditions;

            for (int i = 0; i < activeConditions.Count; i++)
            {
                if (!def.gameCondition.CanCoexistWith(activeConditions[i].def))
                {
                    return(false);
                }
            }
            return(true);
        }
Exemple #3
0
        static void Prefix(GameConditionManager __instance, Rect rect)
        {
            if (__instance != Find.CurrentMap?.gameConditionManager)
            {
                return;
            }

            var comp   = Find.CurrentMap.CarouselComp();
            var center = new Vector2(UI.screenWidth - 10f - 32f, rect.yMax - 10f - 32f);

            Widgets.DrawTextureRotated(center, CompassWidget.CompassTex, -comp.current - 90f, 1f);

            Rect btnRect = new Rect(center.x - 32f, center.y - 32f, 64f, 64f);

            TooltipHandler.TipRegion(
                btnRect,
                () => $"{"CompassTip".Translate()}\n\n{Carousel.RotateKey.LabelCap}: {Carousel.RotateKey.MainKeyLabel}",
                5799998
                );

            if (Widgets.ButtonInvisible(btnRect, true))
            {
                comp.RotateBy(-comp.current);
            }
        }
Exemple #4
0
            private static bool Prefix(GameConditionManager __instance, GameCondition cond)
            {
                var ind = ZUtils.ZTracker.GetZIndexFor(__instance.ownerMap);

                if (ind == 0 && !(__instance.ownerMap.Parent is MapParent_ZLevel))
                {
                    AddCondition = true;
                    foreach (var map in ZUtils.ZTracker.GetAllMaps(__instance.ownerMap.Tile))
                    {
                        if (map != __instance.ownerMap && (ZUtils.ZTracker.GetZIndexFor(map) < 0 &&
                                                           !blackList.Contains(cond.def) || ZUtils.ZTracker.GetZIndexFor(map) > 0))
                        {
                            var newCond = GameConditionMaker.MakeCondition(cond.def, cond.Duration);
                            newCond.conditionCauser = cond.conditionCauser;
                            newCond.Permanent       = cond.Permanent;
                            newCond.startTick       = cond.startTick;
                            newCond.quest           = cond.quest;
                            ZLogger.Message("Register: " + newCond + " in the " + ZUtils.ZTracker.GetMapInfo(map), true);
                            map.gameConditionManager.RegisterCondition(newCond);
                        }
                    }
                    AddCondition = false;
                }
                else if (ind < 0 && (!AddCondition || blackList.Contains(cond.def)))
                {
                    return(false);
                }
                else if (ind > 0 && !AddCondition)
                {
                    return(false);
                }
                return(true);
            }
Exemple #5
0
 static void Postfix(GameConditionManager __instance, ref float __result)
 {
     if (__instance != Find.CurrentMap?.gameConditionManager || CarouselMod.settings.disableCompass)
     {
         return;
     }
     __result += 84f;
 }
        private void InitializeSolarFlare()
        {
            GameConditionManager gameConditionManager = this.gameConditionManager;
            int           duration = Mathf.RoundToInt(this.Duration);
            GameCondition cond     = GameConditionMaker.MakeCondition(GameConditionDefOf.SolarFlare, duration);

            gameConditionManager.RegisterCondition(cond);
        }
Exemple #7
0
 static void Postfix(GameConditionManager __instance, ref float __result)
 {
     if (__instance != Find.CurrentMap?.gameConditionManager)
     {
         return;
     }
     __result += 84f;
 }
        private void InitializeVolcanicWinter()
        {
            GameConditionManager gameConditionManager = this.gameConditionManager;
            int           duration = Mathf.RoundToInt(this.Duration);
            GameCondition cond     = GameConditionMaker.MakeCondition(GameConditionDefOf.VolcanicWinter, duration);

            gameConditionManager.RegisterCondition(cond);
        }
        private void InitializeDeathSkies()
        {
            GameConditionManager gameConditionManager = this.gameConditionManager;
            int           duration = Mathf.RoundToInt(this.Duration);
            GameCondition cond2    = GameConditionMaker.MakeCondition(TorannMagicDefOf.DarkClouds, duration);

            gameConditionManager.RegisterCondition(cond2);
        }
Exemple #10
0
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            GameConditionManager gameConditionManager = parms.target.GameConditionManager;
            GameCondition        cond = GameConditionMaker.MakeCondition(this.def.gameCondition, Ticks, 0);

            gameConditionManager.RegisterCondition(cond);
            base.SendStandardLetter();
            return(true);
        }
Exemple #11
0
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            GameConditionManager gameConditionManager = parms.target.GameConditionManager;
            int           duration = Mathf.RoundToInt(base.def.durationDays.RandomInRange * 60000f);
            GameCondition cond     = GameConditionMaker.MakeCondition(base.def.gameCondition, duration, 0);

            gameConditionManager.RegisterCondition(cond);
            //base.SendStandardLetter();    //it's that easy!
            return(true);
        }
Exemple #12
0
 // Use this for initialization
 void Start()
 {
     isTalking       = false;
     playerColliding = false;
     NPCstate        = 1;
     Parser          = new XmlParser(xml);
     dialogueGraph   = (DialogueGraph)Parser.GetGraph();
     currentNode     = GetStartNode(NPCstate);
     m = new GameConditionManager();
 }
Exemple #13
0
        public static bool ConditionIsActive(this GameConditionManager instance, GameConditionDef def)
        {
            bool result = instance.ConditionIsActive(def);

            if (result && def == GameConditionDefOf.SolarFlare)
            {
                return(!instance.ownerMap.GetShieldCoordinator().HasActiveShield());
            }
            return(result);
        }
Exemple #14
0
        public static void Postfix(GameConditionManager __instance, ref GameConditionDef def, ref bool __result)
        {
            if (def == GameConditionDefOf.SolarFlare)
            {
                //    Log.Message(string.Format("GameConditionManager_ConditionIsActive_Patch SolarFlare: {0}", __result));
                __result = __result || __instance.ConditionIsActive(XenomorphDefOf.RRY_Xenomorph_PowerCut);
#if DEBUG
                //    Log.Message(string.Format("GameConditionManager_ConditionIsActive_Patch Xenomorph_PowerCut: {0}", __result));
#endif
            }
        }
        /// <summary>
        /// Gets the offset for the given condition manager, recursively checking any parent managers we have
        /// </summary>
        /// <param name="manager">The condition manager to check</param>
        /// <param name="data">The <see cref="BiomeData"/> to use</param>
        /// <returns>The aggregated offset</returns>
        private static float GetOffset(GameConditionManager manager, BiomeData data)
        {
            // Add up all the various offsets we have:
            var num = manager.ActiveConditions.Sum(condition => data.GetBiomeConditionTemperatureOffset(condition));

            if (manager.Parent != null)
            {
                num += GetOffset(manager.Parent, data);
            }
            return(num);
        }
 public static bool Prefix(GameConditionManager __instance, ref float __result)
 {
     try
     {
         __result = GetOffset(__instance, Main.BiomeSettings[__instance.map.Biome]);
         return(false);
     }
     catch (Exception)
     {
         Log.Error("Unable to override game condition temperature offsets; falling back to vanilla.");
         return(true);
     }
 }
Exemple #17
0
        public static float AggregatePlantDensityFactor(this GameConditionManager gcm)
        {
            float num = 1f;

            for (int i = 0; i < gcm.ActiveConditions.Count; i++)
            {
                num *= gcm.ActiveConditions[i].PlantDensityFactor();
            }
            if (gcm.Parent != null)
            {
                num += AggregatePlantDensityFactor(gcm.Parent);
            }
            return(num);
        }
Exemple #18
0
        private void InitializeDarkStorms()
        {
            GameConditionManager gameConditionManager = base.CasterPawn.Map.gameConditionManager;
            int           duration = 45000;
            GameCondition cond     = GameConditionMaker.MakeCondition(TorannMagicDefOf.DarkThunderstorm, duration);

            gameConditionManager.RegisterCondition(cond);
            GameCondition_DarkThunderstorm gcdt = cond as GameCondition_DarkThunderstorm;

            if (gcdt != null)
            {
                gcdt.faction = base.CasterPawn.Faction;
            }
        }
        public void StopInfection()
        {
            this.active = false;
            MapParent infectedSite = Find.World.worldObjects.ObjectsAt(this.infectedTile) as MapParent;

            if (infectedSite != null && infectedSite.Map != null)
            {
                GameConditionManager gameConditionManager = infectedSite.Map.gameConditionManager;
                if (gameConditionManager.ConditionIsActive(this.gameConditionCaused))
                {
                    gameConditionManager.ActiveConditions.Remove(gameConditionManager.GetActiveCondition(this.gameConditionCaused));
                }
            }
            this.fillRadius();
        }
Exemple #20
0
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            if (!settings.Active)
            {
                return(false);
            }

            GameConditionManager gameConditionManager = parms.target.GameConditionManager;
            int           duration = Mathf.RoundToInt(def.durationDays.RandomInRange * 60000f);
            GameCondition cond     = GameConditionMaker.MakeCondition(def.gameCondition, duration);

            gameConditionManager.RegisterCondition(cond);
            SendStandardLetter(parms, null);
            return(true);
        }
Exemple #21
0
            private float AggregateTemperatureOffset(GameConditionManager gameConditionManager)
            {
                float num = 0f;

                for (int i = 0; i < gameConditionManager.ActiveConditions.Count; i++)
                {
                    num += gameConditionManager.ActiveConditions[i].TemperatureOffset();
                }

                if (gameConditionManager.Parent != null)
                {
                    num += AggregateTemperatureOffset(gameConditionManager.Parent);
                }

                return(num);
            }
 public void StopQuest()
 {
     this.active = false;
     if (this.ThingToDestroy.Destroyed)
     {
         Settlement settlement = Find.World.worldObjects.SettlementAt(this.worldTileAffected);
         if (settlement != null && settlement.HasMap)
         {
             Log.Message(string.Format("Found player base named {0}", settlement.TraderName));
             GameConditionManager gameConditionManager = settlement.Map.gameConditionManager;
             if (gameConditionManager.ConditionIsActive(this.gameConditionCaused))
             {
                 gameConditionManager.ActiveConditions.Remove(gameConditionManager.GetActiveCondition(this.gameConditionCaused));
             }
         }
     }
 }
 public void ConstructComponents()
 {
     worldObjects         = new WorldObjectsHolder();
     factionManager       = new FactionManager();
     worldPawns           = new WorldPawns();
     gameConditionManager = new GameConditionManager(this);
     storyState           = new StoryState(this);
     renderer             = new WorldRenderer();
     UI                 = new WorldInterface();
     debugDrawer        = new WorldDebugDrawer();
     dynamicDrawManager = new WorldDynamicDrawManager();
     pathFinder         = new WorldPathFinder();
     pathPool           = new WorldPathPool();
     reachability       = new WorldReachability();
     floodFiller        = new WorldFloodFiller();
     ticksAbsCache      = new ConfiguredTicksAbsAtGameStartCache();
     components.Clear();
     FillComponents();
 }
 public void ConstructComponents()
 {
     this.worldObjects         = new WorldObjectsHolder();
     this.factionManager       = new FactionManager();
     this.uniqueIDsManager     = new UniqueIDsManager();
     this.worldPawns           = new WorldPawns();
     this.settings             = new WorldSettings();
     this.gameConditionManager = new GameConditionManager(null);
     this.storyState           = new StoryState(this);
     this.renderer             = new WorldRenderer();
     this.UI                 = new WorldInterface();
     this.debugDrawer        = new WorldDebugDrawer();
     this.dynamicDrawManager = new WorldDynamicDrawManager();
     this.pathFinder         = new WorldPathFinder();
     this.pathPool           = new WorldPathPool();
     this.reachability       = new WorldReachability();
     this.floodFiller        = new WorldFloodFiller();
     this.ticksAbsCache      = new ConfiguredTicksAbsAtGameStartCache();
     this.components.Clear();
     this.FillComponents();
 }
Exemple #25
0
        public override void CompTickRare()
        {
            base.CompTickRare();
            if (!LoadedModManager.GetMod <MonsterHunterRimworldMod>().GetSettings <MonsterHunterRimworldModSettings>().elderDragonWeatherEffects)
            {
                return;
            }
            if (!(parent is Pawn elderDragon))
            {
                return;
            }
            if (!WyvernUtility.IsElderDragon(elderDragon))
            {
                return;
            }
            if (elderDragon.Dead)
            {
                return;
            }
            Map map = elderDragon.Map;

            if (map == null)
            {
                return;
            }

            GameConditionManager gameConditionManager = map.GameConditionManager;

            if (gameConditionManager.ConditionIsActive(GameConditionDefOf.ToxicFallout))
            {
                return;
            }
            int           duration = Mathf.RoundToInt(0.5f * 60000f); // lasts half a day after elder dragon dies
            GameCondition cond     = GameConditionMaker.MakeCondition(GameConditionDefOf.ToxicFallout, duration);

            gameConditionManager.RegisterCondition(cond);
        }
Exemple #26
0
 public void ConstructComponents()
 {
     this.spawnedThings      = new ThingOwner <Thing>(this);
     this.cellIndices        = new CellIndices(this);
     this.listerThings       = new ListerThings(ListerThingsUse.Global);
     this.listerBuildings    = new ListerBuildings();
     this.mapPawns           = new MapPawns(this);
     this.dynamicDrawManager = new DynamicDrawManager(this);
     this.mapDrawer          = new MapDrawer(this);
     this.tooltipGiverList   = new TooltipGiverList();
     this.pawnDestinationReservationManager = new PawnDestinationReservationManager();
     this.reservationManager = new ReservationManager(this);
     this.physicalInteractionReservationManager = new PhysicalInteractionReservationManager();
     this.designationManager             = new DesignationManager(this);
     this.lordManager                    = new LordManager(this);
     this.debugDrawer                    = new DebugCellDrawer();
     this.passingShipManager             = new PassingShipManager(this);
     this.haulDestinationManager         = new HaulDestinationManager(this);
     this.gameConditionManager           = new GameConditionManager(this);
     this.weatherManager                 = new WeatherManager(this);
     this.zoneManager                    = new ZoneManager(this);
     this.resourceCounter                = new ResourceCounter(this);
     this.mapTemperature                 = new MapTemperature(this);
     this.temperatureCache               = new TemperatureCache(this);
     this.areaManager                    = new AreaManager(this);
     this.attackTargetsCache             = new AttackTargetsCache(this);
     this.attackTargetReservationManager = new AttackTargetReservationManager(this);
     this.lordsStarter                   = new VoluntarilyJoinableLordsStarter(this);
     this.thingGrid                  = new ThingGrid(this);
     this.coverGrid                  = new CoverGrid(this);
     this.edificeGrid                = new EdificeGrid(this);
     this.blueprintGrid              = new BlueprintGrid(this);
     this.fogGrid                    = new FogGrid(this);
     this.glowGrid                   = new GlowGrid(this);
     this.regionGrid                 = new RegionGrid(this);
     this.terrainGrid                = new TerrainGrid(this);
     this.pathGrid                   = new PathGrid(this);
     this.roofGrid                   = new RoofGrid(this);
     this.fertilityGrid              = new FertilityGrid(this);
     this.snowGrid                   = new SnowGrid(this);
     this.deepResourceGrid           = new DeepResourceGrid(this);
     this.exitMapGrid                = new ExitMapGrid(this);
     this.linkGrid                   = new LinkGrid(this);
     this.glowFlooder                = new GlowFlooder(this);
     this.powerNetManager            = new PowerNetManager(this);
     this.powerNetGrid               = new PowerNetGrid(this);
     this.regionMaker                = new RegionMaker(this);
     this.pathFinder                 = new PathFinder(this);
     this.pawnPathPool               = new PawnPathPool(this);
     this.regionAndRoomUpdater       = new RegionAndRoomUpdater(this);
     this.regionLinkDatabase         = new RegionLinkDatabase();
     this.moteCounter                = new MoteCounter();
     this.gatherSpotLister           = new GatherSpotLister();
     this.windManager                = new WindManager(this);
     this.listerBuildingsRepairable  = new ListerBuildingsRepairable();
     this.listerHaulables            = new ListerHaulables(this);
     this.listerMergeables           = new ListerMergeables(this);
     this.listerFilthInHomeArea      = new ListerFilthInHomeArea(this);
     this.reachability               = new Reachability(this);
     this.itemAvailability           = new ItemAvailability(this);
     this.autoBuildRoofAreaSetter    = new AutoBuildRoofAreaSetter(this);
     this.roofCollapseBufferResolver = new RoofCollapseBufferResolver(this);
     this.roofCollapseBuffer         = new RoofCollapseBuffer();
     this.wildAnimalSpawner          = new WildAnimalSpawner(this);
     this.wildPlantSpawner           = new WildPlantSpawner(this);
     this.steadyEnvironmentEffects   = new SteadyEnvironmentEffects(this);
     this.skyManager                 = new SkyManager(this);
     this.overlayDrawer              = new OverlayDrawer();
     this.floodFiller                = new FloodFiller(this);
     this.weatherDecider             = new WeatherDecider(this);
     this.fireWatcher                = new FireWatcher(this);
     this.dangerWatcher              = new DangerWatcher(this);
     this.damageWatcher              = new DamageWatcher();
     this.strengthWatcher            = new StrengthWatcher(this);
     this.wealthWatcher              = new WealthWatcher(this);
     this.regionDirtyer              = new RegionDirtyer(this);
     this.cellsInRandomOrder         = new MapCellsInRandomOrder(this);
     this.rememberedCameraPos        = new RememberedCameraPos(this);
     this.mineStrikeManager          = new MineStrikeManager();
     this.storyState                 = new StoryState(this);
     this.retainedCaravanData        = new RetainedCaravanData(this);
     this.components.Clear();
     this.FillComponents();
 }
Exemple #27
0
 // Use this for initialization
 void Start()
 {
     isTalking = false;
     playerColliding = false;
     NPCstate = 1;
     Parser = new XmlParser(xml);
     dialogueGraph = (DialogueGraph)Parser.GetGraph();
     currentNode = GetStartNode(NPCstate);
     m =  new GameConditionManager();
 }
Exemple #28
0
 public static bool ElectricityDisabled(this GameConditionManager instance)
 {
     return(instance.ElectricityDisabled && !instance.ownerMap.GetShieldCoordinator().HasActiveShield());
 }
        public override IEnumerable <FloatMenuOption> CompFloatMenuOptions(Pawn selPawn)
        {
            List <FloatMenuOption> list = new List <FloatMenuOption>();
            Map map = this.parent.Map;
            GameConditionManager manager = map.gameConditionManager;

            if (this.mana > 10f)
            {
                list.Add(new FloatMenuOption("RD_EndExtremeWeather".Translate(),                 // End Extreme Weather (10 mana)
                                             delegate()
                {
                    this.mana -= 10f;
                    map.weatherManager.TransitionTo(WeatherDefOf.Clear);
                    if (manager.ConditionIsActive(GameConditionDefOf.ColdSnap))
                    {
                        manager.ActiveConditions.Remove(manager.GetActiveCondition(GameConditionDefOf.ColdSnap));
                    }
                    if (manager.ConditionIsActive(GameConditionDefOf.Flashstorm))
                    {
                        manager.ActiveConditions.Remove(manager.GetActiveCondition(GameConditionDefOf.Flashstorm));
                    }
                    if (manager.ConditionIsActive(GameConditionDefOf.HeatWave))
                    {
                        manager.ActiveConditions.Remove(manager.GetActiveCondition(GameConditionDefOf.HeatWave));
                    }
                }
                                             ));
            }
            if (this.mana > 15f)
            {
                list.Add(new FloatMenuOption("RD_BringRain".Translate(), delegate()                 //(15mana)
                {
                    this.mana -= 15f;
                    map.weatherManager.TransitionTo(WeatherDef.Named("Rain"));
                }
                                             ));
            }
            if (this.mana > 18f)
            {
                list.Add(new FloatMenuOption("RD_BringFog".Translate(),                 //Bring Fog (18 mana)
                                             delegate()
                {
                    this.mana -= 18f;
                    map.weatherManager.TransitionTo(WeatherDef.Named("Fog"));
                }
                                             ));
            }
            if (this.mana > 40f)
            {
                list.Add(new FloatMenuOption("RD_StrikeOurEnemies".Translate(), delegate()                 //(40mana)
                {
                    IEnumerable <Pawn> source = from p in map.mapPawns.AllPawnsSpawned
                                                where p.HostileTo(Faction.OfPlayer)
                                                select p;
                    this.mana -= 40f;
                    if (source.Count <Pawn>() > 0)
                    {
                        GameCondition_TargetedStorm gameCondition_TargetedStorm = (GameCondition_TargetedStorm)GameConditionMaker.MakeCondition(GameConditionDef.Named("RD_TargetedStorm"), 12000);
                        map.gameConditionManager.RegisterCondition(gameCondition_TargetedStorm);
                    }
                }
                                             ));
            }
            return(list);
        }