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); }
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); }
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); }
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); }
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); }