Beispiel #1
0
        public static bool CompTick(CompCauseGameCondition __instance)
        {
            if (__instance.Active)
            {
                foreach (Map map in Find.Maps)
                {
                    if (__instance.InAoE(map.Tile))
                    {
                        EnforceConditionOn2(__instance, map);
                    }
                }
            }

            List <Map> tmpDeadConditionMaps = new List <Map>();

            foreach (KeyValuePair <Map, GameCondition> causedCondition in causedConditions(__instance))
            {
                if (causedCondition.Value.Expired || !causedCondition.Key.GameConditionManager.ConditionIsActive(causedCondition.Value.def))
                {
                    tmpDeadConditionMaps.Add(causedCondition.Key);
                }
            }

            foreach (Map tmpDeadConditionMap in tmpDeadConditionMaps)
            {
                causedConditions(__instance).Remove(tmpDeadConditionMap);
            }
            return(false);
        }
Beispiel #2
0
        public static GameCondition CreateConditionOn2(CompCauseGameCondition __instance, Map map)
        {
            GameCondition gameCondition = GameConditionMaker.MakeCondition(__instance.ConditionDef);

            gameCondition.Duration        = gameCondition.TransitionTicks;
            gameCondition.conditionCauser = __instance.parent;
            map.gameConditionManager.RegisterCondition(gameCondition);
            causedConditions(__instance).Add(map, gameCondition);
            SetupCondition2(gameCondition, map);
            return(gameCondition);
        }
Beispiel #3
0
        public static GameCondition GetConditionInstance2(CompCauseGameCondition __instance, Map map)
        {
            if (!causedConditions(__instance).TryGetValue(map, out GameCondition value) && __instance.Props.preventConditionStacking)
            {
                value = map.GameConditionManager.GetActiveCondition(__instance.Props.conditionDef);
                if (value != null)
                {
                    causedConditions(__instance).Add(map, value);
                    SetupCondition2(value, map);
                }
            }

            return(value);
        }
        public static bool CreateConditionOn(CompCauseGameCondition __instance, ref GameCondition __result, Map map)
        {
            GameCondition gameCondition = GameConditionMaker.MakeCondition(__instance.ConditionDef);

            gameCondition.Duration        = gameCondition.TransitionTicks;
            gameCondition.conditionCauser = __instance.parent;
            map.gameConditionManager.RegisterCondition(gameCondition);
            lock (__instance)
            {
                causedConditionsFieldRef(__instance).Add(map, gameCondition);
            }
            gameCondition.suppressEndMessage = true;
            __result = gameCondition;
            return(false);
        }
Beispiel #5
0
        public static GameCondition EnforceConditionOn2(CompCauseGameCondition __instance, Map map)
        {
            GameCondition gameCondition = GetConditionInstance2(__instance, map);

            if (gameCondition == null)
            {
                gameCondition = CreateConditionOn2(__instance, map);
            }
            else
            {
                gameCondition.TicksLeft = gameCondition.TransitionTicks;
            }

            return(gameCondition);
        }
        public static bool GetConditionInstance(CompCauseGameCondition __instance, ref GameCondition __result, Map map)
        {
            if (!causedConditionsFieldRef(__instance).TryGetValue(map, out GameCondition value) && __instance.Props.preventConditionStacking)
            {
                value = map.GameConditionManager.GetActiveCondition(__instance.Props.conditionDef);
                if (value != null)
                {
                    lock (__instance)
                    {
                        causedConditionsFieldRef(__instance).Add(map, value);
                    }
                    value.suppressEndMessage = true;
                }
            }

            __result = value;
            return(false);
        }
Beispiel #7
0
        public static bool CompTick(CompCauseGameCondition __instance)
        {
            if (__instance.Active)
            {
                foreach (Map map in Find.Maps)
                {
                    if (__instance.InAoE(map.Tile))
                    {
                        __instance.EnforceConditionOn(map);
                    }
                }
            }
            tmpDeadConditionMaps.Clear();

            foreach (KeyValuePair <Map, GameCondition> causedCondition in __instance.causedConditions)
            {
                if (causedCondition.Value.Expired || !causedCondition.Key.GameConditionManager.ConditionIsActive(causedCondition.Value.def))
                {
                    tmpDeadConditionMaps.Add(causedCondition.Key);
                }
            }

            foreach (Map tmpDeadConditionMap in tmpDeadConditionMaps)
            {
                if (!__instance.causedConditions.ContainsKey(tmpDeadConditionMap))
                {
                    continue;
                }
                lock (__instance)
                {
                    if (!__instance.causedConditions.ContainsKey(tmpDeadConditionMap))
                    {
                        continue;
                    }
                    Dictionary <Map, GameCondition> newCausedConditions = new Dictionary <Map, GameCondition>(__instance.causedConditions);
                    newCausedConditions.Remove(tmpDeadConditionMap);
                    __instance.causedConditions = newCausedConditions;
                }
            }
            return(false);
        }