public override void InitializeStates(out StateMachine.BaseState default_state) { default_state = this.converting; this.waiting .EventTransition(GameHashes.OnStorageChange, this.hasfilter, (CoalSynth.StatesInstance smi) => smi.master.HasFilter() && smi.master.operational.IsOperational) .EventTransition(GameHashes.OperationalChanged, this.hasfilter, (CoalSynth.StatesInstance smi) => smi.master.HasFilter() && smi.master.operational.IsOperational); this.hasfilter .EventTransition(GameHashes.OnStorageChange, this.converting, (CoalSynth.StatesInstance smi) => smi.master.IsConvertable()) .EventTransition(GameHashes.OperationalChanged, this.waiting, (CoalSynth.StatesInstance smi) => !smi.master.operational.IsOperational).Enter("EnableConsumption", delegate(CoalSynth.StatesInstance smi) { smi.master.elementConsumer.EnableConsumption(true); }).Exit("DisableConsumption", delegate(CoalSynth.StatesInstance smi) { smi.master.elementConsumer.EnableConsumption(false); }); this.converting.Enter("SetActive(true)", delegate(CoalSynth.StatesInstance smi) { smi.master.operational.SetActive(true, false); }).Exit("SetActive(false)", delegate(CoalSynth.StatesInstance smi) { smi.master.operational.SetActive(false, false); }).Enter("EnableConsumption", delegate(CoalSynth.StatesInstance smi) { smi.master.elementConsumer.EnableConsumption(true); }).Exit("DisableConsumption", delegate(CoalSynth.StatesInstance smi) { smi.master.elementConsumer.EnableConsumption(false); }).EventTransition(GameHashes.OnStorageChange, this.waiting, (CoalSynth.StatesInstance smi) => !smi.master.IsConvertable()).EventTransition(GameHashes.OperationalChanged, this.waiting, (CoalSynth.StatesInstance smi) => !smi.master.operational.IsOperational); }
/// <summary> /// Clears the existing Transition actions on a state. Parameter transitions are not /// affected. /// </summary> /// <param name="state">The state to modify.</param> public static void ClearTransitions(this StateMachine.BaseState state) { if (state != null) { state.transitions.Clear(); } }
public override void InitializeStates(out StateMachine.BaseState default_state) { SteamTurbine.InitializeStatusItems(); default_state = this.operational; this.root.Update("UpdateBlocked", delegate(SteamTurbine.Instance smi, float dt) { smi.UpdateBlocked(dt); }, UpdateRate.SIM_200ms, false); this.inoperational.EventTransition(GameHashes.OperationalChanged, this.operational.active, (SteamTurbine.Instance smi) => smi.master.GetComponent <Operational>().IsOperational).QueueAnim("off", false, null); this.operational.DefaultState(this.operational.active).EventTransition(GameHashes.OperationalChanged, this.inoperational, (SteamTurbine.Instance smi) => !smi.master.GetComponent <Operational>().IsOperational).Update("UpdateOperational", delegate(SteamTurbine.Instance smi, float dt) { smi.UpdateState(dt); }, UpdateRate.SIM_200ms, false).Exit(delegate(SteamTurbine.Instance smi) { smi.DisableStatusItems(); }); this.operational.idle.QueueAnim("on", false, null); this.operational.active.Update("UpdateActive", delegate(SteamTurbine.Instance smi, float dt) { smi.master.Pump(dt); }, UpdateRate.SIM_200ms, false).ToggleStatusItem((SteamTurbine.Instance smi) => SteamTurbine.activeStatusItem, (SteamTurbine.Instance smi) => smi.master).Enter(delegate(SteamTurbine.Instance smi) { smi.GetComponent <KAnimControllerBase>().Play(SteamTurbine.States.ACTIVE_ANIMS, KAnim.PlayMode.Loop); smi.GetComponent <Operational>().SetActive(true, false); }).Exit(delegate(SteamTurbine.Instance smi) { smi.master.GetComponent <Generator>().ResetJoules(); smi.GetComponent <Operational>().SetActive(false, false); }); this.operational.tooHot.Enter(delegate(SteamTurbine.Instance smi) { smi.GetComponent <KAnimControllerBase>().Play(SteamTurbine.States.TOOHOT_ANIMS, KAnim.PlayMode.Loop); }); }
public void UpdateState(float dt) { bool flag = this.CanSteamFlow(ref this.insufficientMass, ref this.insufficientTemperature); bool flag2 = this.IsTooHot(ref this.buildingTooHot); this.UpdateStatusItems(); StateMachine.BaseState currentState = base.smi.GetCurrentState(); if (flag2) { if (currentState != base.sm.operational.tooHot) { base.smi.GoTo(base.sm.operational.tooHot); } } else if (flag) { if (currentState != base.sm.operational.active) { base.smi.GoTo(base.sm.operational.active); } } else if (currentState != base.sm.operational.idle) { base.smi.GoTo(base.sm.operational.idle); } }
public override void InitializeStates(out StateMachine.BaseState default_state) { default_state = (StateMachine.BaseState) this.waitingfordelivery; this.statusItem = new StatusItem(nameof(DazBottleEmptier), "", "", "", StatusItem.IconType.Info, NotificationType.Neutral, false, OverlayModes.None.ID); this.statusItem.resolveStringCallback = (Func <string, object, string>)((str, data) => { DazBottleEmptier bottleEmptier = (DazBottleEmptier)data; if ((UnityEngine.Object)bottleEmptier == (UnityEngine.Object)null) { return(str); } return(bottleEmptier.allowManualPumpingStationFetching ? (string)(bottleEmptier.isGasEmptier ? BUILDING.STATUSITEMS.CANISTER_EMPTIER.ALLOWED.NAME : BUILDING.STATUSITEMS.BOTTLE_EMPTIER.ALLOWED.NAME) : (string)(bottleEmptier.isGasEmptier ? BUILDING.STATUSITEMS.CANISTER_EMPTIER.DENIED.NAME : BUILDING.STATUSITEMS.BOTTLE_EMPTIER.DENIED.NAME)); }); this.statusItem.resolveTooltipCallback = (Func <string, object, string>)((str, data) => { DazBottleEmptier bottleEmptier = (DazBottleEmptier)data; if ((UnityEngine.Object)bottleEmptier == (UnityEngine.Object)null) { return(str); } return(bottleEmptier.allowManualPumpingStationFetching ? (bottleEmptier.isGasEmptier ? (string)BUILDING.STATUSITEMS.CANISTER_EMPTIER.ALLOWED.TOOLTIP : (string)BUILDING.STATUSITEMS.BOTTLE_EMPTIER.ALLOWED.TOOLTIP) : (bottleEmptier.isGasEmptier ? (string)BUILDING.STATUSITEMS.CANISTER_EMPTIER.DENIED.TOOLTIP : (string)BUILDING.STATUSITEMS.BOTTLE_EMPTIER.DENIED.TOOLTIP)); }); this.root.ToggleStatusItem(this.statusItem, (Func <DazBottleEmptier.StatesInstance, object>)(smi => (object)smi.master)); this.unoperational.TagTransition(GameTags.Operational, this.waitingfordelivery).PlayAnim("off"); this.waitingfordelivery.TagTransition(GameTags.Operational, this.unoperational, true).EventTransition(GameHashes.OnStorageChange, this.emptying, (StateMachine <DazBottleEmptier.States, DazBottleEmptier.StatesInstance, DazBottleEmptier, object> .Transition.ConditionCallback)(smi => !smi.GetComponent <Storage>().IsEmpty())).Enter("CreateChore", (StateMachine <DazBottleEmptier.States, DazBottleEmptier.StatesInstance, DazBottleEmptier, object> .State.Callback)(smi => smi.CreateChore())).Exit("CancelChore", (StateMachine <DazBottleEmptier.States, DazBottleEmptier.StatesInstance, DazBottleEmptier, object> .State.Callback)(smi => smi.CancelChore())).PlayAnim("on"); this.emptying.TagTransition(GameTags.Operational, this.unoperational, true).EventTransition(GameHashes.OnStorageChange, this.waitingfordelivery, (StateMachine <DazBottleEmptier.States, DazBottleEmptier.StatesInstance, DazBottleEmptier, object> .Transition.ConditionCallback)(smi => smi.GetComponent <Storage>().IsEmpty())).Enter("StartMeter", (StateMachine <DazBottleEmptier.States, DazBottleEmptier.StatesInstance, DazBottleEmptier, object> .State.Callback)(smi => smi.StartMeter())).Update("Emit", (System.Action <DazBottleEmptier.StatesInstance, float>)((smi, dt) => smi.Emit(dt))).PlayAnim("working_loop", KAnim.PlayMode.Loop); }
static void Postfix(Repairable.States __instance, ref StateMachine.BaseState default_state) { if (Options.Opts.AutoRepairOff) { default_state = __instance.forbidden; } }
/// <summary> /// Clears the existing Enter actions on a state. /// </summary> /// <param name="state">The state to modify.</param> public static void ClearEnterActions(this StateMachine.BaseState state) { if (state != null) { state.enterActions.Clear(); } }
private void OnRefreshUserMenu(object data) { if ((UnityEngine.Object)base.gameObject != (UnityEngine.Object)null && smi != null) { StateMachine.BaseState currentState = smi.GetCurrentState(); if (currentState == smi.sm.forbidden) { UserMenu userMenu = Game.Instance.userMenu; GameObject gameObject = base.gameObject; string iconName = "action_repair"; string text = STRINGS.BUILDINGS.REPAIRABLE.ENABLE_AUTOREPAIR.NAME; System.Action on_click = AllowRepair; string tooltipText = STRINGS.BUILDINGS.REPAIRABLE.ENABLE_AUTOREPAIR.TOOLTIP; userMenu.AddButton(gameObject, new KIconButtonMenu.ButtonInfo(iconName, text, on_click, Action.NumActions, null, null, null, tooltipText, true), 1f); } else { UserMenu userMenu2 = Game.Instance.userMenu; GameObject gameObject2 = base.gameObject; string tooltipText = "action_repair"; string text = STRINGS.BUILDINGS.REPAIRABLE.DISABLE_AUTOREPAIR.NAME; System.Action on_click = CancelRepair; string iconName = STRINGS.BUILDINGS.REPAIRABLE.DISABLE_AUTOREPAIR.TOOLTIP; userMenu2.AddButton(gameObject2, new KIconButtonMenu.ButtonInfo(tooltipText, text, on_click, Action.NumActions, null, null, null, iconName, true), 1f); } } }
public override void InitializeStates(out StateMachine.BaseState default_state) { default_state = (StateMachine.BaseState) this.off; this.off.PlayAnim("off").EventTransition(GameHashes.OperationalChanged, (GameStateMachine <HexiLiquidGermScrubber.States, HexiLiquidGermScrubber.StatesInstance, HexiLiquidGermScrubber, object> .State) this.on, (StateMachine <HexiLiquidGermScrubber.States, HexiLiquidGermScrubber.StatesInstance, HexiLiquidGermScrubber, object> .Transition.ConditionCallback)(smi => smi.master.operational.IsOperational)); this.on.PlayAnim("on").EventTransition(GameHashes.OperationalChanged, this.off, (StateMachine <HexiLiquidGermScrubber.States, HexiLiquidGermScrubber.StatesInstance, HexiLiquidGermScrubber, object> .Transition.ConditionCallback)(smi => !smi.master.operational.IsOperational)).DefaultState(this.on.waiting); this.on.waiting.EventTransition(GameHashes.OnStorageChange, this.on.working_pre, (StateMachine <HexiLiquidGermScrubber.States, HexiLiquidGermScrubber.StatesInstance, HexiLiquidGermScrubber, object> .Transition.ConditionCallback)(smi => smi.master.GetComponent <GermScrubConverter>().CanConvertAtAll())); this.on.working_pre.PlayAnim("working_pre").OnAnimQueueComplete(this.on.working); this.on.working.Enter((StateMachine <HexiLiquidGermScrubber.States, HexiLiquidGermScrubber.StatesInstance, HexiLiquidGermScrubber, object> .State.Callback)(smi => smi.master.operational.SetActive(true, false))).QueueAnim("working_loop", true, (Func <HexiLiquidGermScrubber.StatesInstance, string>)null).EventTransition(GameHashes.OnStorageChange, this.on.working_pst, (StateMachine <HexiLiquidGermScrubber.States, HexiLiquidGermScrubber.StatesInstance, HexiLiquidGermScrubber, object> .Transition.ConditionCallback)(smi => !smi.master.GetComponent <GermScrubConverter>().CanConvertAtAll())).Exit((StateMachine <HexiLiquidGermScrubber.States, HexiLiquidGermScrubber.StatesInstance, HexiLiquidGermScrubber, object> .State.Callback)(smi => smi.master.operational.SetActive(false, false))); this.on.working_pst.PlayAnim("working_pst").OnAnimQueueComplete(this.on.waiting); }
// Token: 0x0600233B RID: 9019 RVA: 0x000AE72C File Offset: 0x000AC92C public override void InitializeStates(out StateMachine.BaseState default_state) { default_state = this.offline; base.serializable = false; this.statusItemUnderMass = new StatusItem("statusItemUnderMass", "No material in contact with operating surface(s)", "Both operating surfaces has to be in contact with gas, liquid or tile.", string.Empty, StatusItem.IconType.Info, NotificationType.BadMinor, false, SimViewMode.None, 63486); this.statusItemOverTemp = new StatusItem("statusItemOverTemp", BUILDING.STATUSITEMS.HEATINGSTALLEDHOTENV.NAME, BUILDING.STATUSITEMS.HEATINGSTALLEDHOTENV.TOOLTIP, string.Empty, StatusItem.IconType.Info, NotificationType.BadMinor, false, SimViewMode.None, 63486); this.statusItemOverTemp.resolveStringCallback = delegate(string str, object obj) { PeltierCooler.StatesInstance statesInstance = (PeltierCooler.StatesInstance)obj; return(string.Format(str, GameUtil.GetFormattedTemperature(statesInstance.master.MaxOutputTemperature, GameUtil.TimeSlice.None, GameUtil.TemperatureInterpretation.Absolute, true))); }; this.statusItemUnderTemp = new StatusItem("statusItemUnderTemp", BUILDING.STATUSITEMS.CANNOTCOOLFURTHER.NAME, BUILDING.STATUSITEMS.CANNOTCOOLFURTHER.TOOLTIP, string.Empty, StatusItem.IconType.Info, NotificationType.BadMinor, false, SimViewMode.None, 63486); this.statusItemUnderTemp.resolveStringCallback = delegate(string str, object obj) { PeltierCooler.StatesInstance statesInstance = (PeltierCooler.StatesInstance)obj; return(string.Format(str, GameUtil.GetFormattedTemperature(statesInstance.master.MinInputTemperature, GameUtil.TimeSlice.None, GameUtil.TemperatureInterpretation.Absolute, true))); }; this.offline.EventTransition(GameHashes.OperationalChanged, this.online, (PeltierCooler.StatesInstance smi) => smi.master.operational.IsOperational); this.online.EventTransition(GameHashes.OperationalChanged, this.offline, (PeltierCooler.StatesInstance smi) => !smi.master.operational.IsOperational).DefaultState(this.online.heating).Update("peltiercooler_online", delegate(PeltierCooler.StatesInstance smi, float dt) { switch (smi.master.MonitorHeating(dt)) { case PeltierCooler.MonitorState.ReadyToHeat: smi.GoTo(this.online.heating); break; case PeltierCooler.MonitorState.TooHot: smi.GoTo(this.online.overtemp); break; case PeltierCooler.MonitorState.TooCold: smi.GoTo(this.online.undertemp); break; case PeltierCooler.MonitorState.NotEnoughMass: smi.GoTo(this.online.undermass); break; } }, UpdateRate.SIM_200ms, false); this.online.heating.Enter(delegate(PeltierCooler.StatesInstance smi) { smi.master.operational.SetActive(true, false); }).Exit(delegate(PeltierCooler.StatesInstance smi) { smi.master.operational.SetActive(false, false); }); this.online.undermass.ToggleCategoryStatusItem(Db.Get().StatusItemCategories.Heat, this.statusItemUnderMass, null); this.online.overtemp.ToggleCategoryStatusItem(Db.Get().StatusItemCategories.Heat, this.statusItemOverTemp, null); this.online.undertemp.ToggleCategoryStatusItem(Db.Get().StatusItemCategories.Heat, this.statusItemUnderTemp, null); }
public override void InitializeStates(out StateMachine.BaseState default_state) { default_state = this.noage; this.noage.Transition(this.immortal, (smi => smi.master.IsImmortal()), UpdateRate.SIM_200ms).Transition(this.youthful, (smi => smi.master.IsYouthful()), UpdateRate.SIM_200ms).Transition(this.middleaged, (smi => !smi.master.IsYouthful() && !smi.master.IsElderly() && !smi.master.IsDying()), UpdateRate.SIM_200ms).Transition(this.elderly, (smi => smi.master.IsElderly()), UpdateRate.SIM_200ms).Transition(this.dying, (smi => smi.master.IsDying()), UpdateRate.SIM_200ms).Transition(this.dead, (smi => smi.master.IsDead()), UpdateRate.SIM_200ms); this.immortal.Enter("Immortal", (smi => smi.master.ApplyImmortalModifiers())).Exit("NotImmortal", (smi => smi.master.RemoveModifiers(smi.master.immortalAttributeModifiers))).ToggleStatusItem(DuplicantLifecycleStrings.Immortal, null).ToggleExpression(Db.Get().Expressions.Relief, null).TagTransition(GameTags.Dead, this.dead); this.youthful.Enter("Youthful", (smi => smi.master.ApplyYouthfulModifiers())).Exit("NotYouthful", (smi => smi.master.RemoveModifiers(smi.master.youthAttributeModifiers))).ToggleStatusItem(DuplicantLifecycleStrings.AgingYouth, null).ToggleExpression(Db.Get().Expressions.Happy, null).Transition(this.middleaged, (smi => smi.master.IsMiddleAged()), UpdateRate.SIM_4000ms).Transition(this.immortal, (smi => smi.master.IsImmortal()), UpdateRate.SIM_1000ms).TagTransition(GameTags.Dead, this.dead); this.middleaged.Enter("MiddleAged", (smi => smi.master.ApplyMiddleAgedModifiers())).Exit("NotMiddleAged", (smi => smi.master.RemoveModifiers(smi.master.middleAttributeModifiers))).ToggleStatusItem(DuplicantLifecycleStrings.AgingMiddle, null).Transition(this.elderly, (smi => smi.master.IsElderly()), UpdateRate.SIM_4000ms).Transition(this.immortal, (smi => smi.master.IsImmortal()), UpdateRate.SIM_1000ms).TagTransition(GameTags.Dead, this.dead); this.elderly.Enter("Elderly", (smi => smi.master.ApplyElderlyModifiers())).Exit("NotElderly", (smi => smi.master.RemoveModifiers(smi.master.elderlyAttributeModifiers))).ToggleStatusItem(DuplicantLifecycleStrings.AgingElderly, null).ToggleExpression(Db.Get().Expressions.Tired, null).Transition(this.dying, (smi => smi.master.IsDying()), UpdateRate.SIM_4000ms).Transition(this.immortal, (smi => smi.master.IsImmortal()), UpdateRate.SIM_1000ms).TagTransition(GameTags.Dead, this.dead); this.dying.Enter("Dying", (smi => smi.master.ApplyDyingModifiers())).ToggleStatusItem(DuplicantLifecycleStrings.AgingDying, null).ToggleExpression(Db.Get().Expressions.Sick, null).Transition(this.dead, (smi => smi.master.TimeToDie()), UpdateRate.SIM_4000ms).Transition(this.immortal, (smi => smi.master.IsImmortal()), UpdateRate.SIM_1000ms).TagTransition(GameTags.Dead, this.dead); this.dead.Enter("Dead", (smi => smi.StopSM("Death"))); }
public override void InitializeStates(out StateMachine.BaseState default_state) { default_state = waiting; this.waiting .EventTransition(GameHashes.OnStorageChange, this.HasInput, (FusionReactor.StatesInstance smi) => smi.master.HasInput() && smi.master.operational.IsOperational) .EventTransition(GameHashes.OperationalChanged, this.waiting, (FusionReactor.StatesInstance smi) => smi.master.HasInput() && smi.master.operational.IsOperational); this.HasInput .EventTransition(GameHashes.OnStorageChange, this.HasInput, (FusionReactor.StatesInstance smi) => smi.master.HasInput() && smi.master.operational.IsOperational) .EventTransition(GameHashes.OperationalChanged, this.waiting, (FusionReactor.StatesInstance smi) => smi.master.HasInput() && smi.master.operational.IsOperational); }
public static bool Prefix(ref StateMachine.BaseState default_state, SleepChoreMonitor __instance) { if (SleepNotIncludedConfigChecker.ForceLoad || CustomGameSettings.Instance.GetCurrentQualitySetting(SleepNotIncludedPatches.RemoveSleepEffects).id == "Enabled") { default_state = (StateMachine.BaseState)__instance.satisfied; __instance.root.TagTransition(GameTags.Minion, __instance.satisfied, false); return(false); } else { return(true); } }
public static bool Prefix(ref StateMachine.BaseState default_state, SuitSuffocationMonitor __instance) { if (OxygenNotNeededConfigChecker.ForceLoad || CustomGameSettings.Instance.GetCurrentQualitySetting(OxygenNotNeededPatches.WorldRequiresOxygen).id == "Enabled") { default_state = (StateMachine.BaseState)__instance.satisfied; __instance.root.TagTransition(GameTags.Minion, __instance.satisfied, false); return(false); } else { return(true); } }
public static bool Prefix(ref StateMachine.BaseState default_state, BladderMonitor __instance) { if (BladderNotIncludedConfigChecker.ForceLoad || CustomGameSettings.Instance.GetCurrentQualitySetting(BladderNotIncludedPatches.RemoveBladderEffects).id == "Enabled") { default_state = (StateMachine.BaseState)__instance.satisfied; __instance.root.TagTransition(GameTags.Minion, __instance.satisfied, false); __instance.satisfied.Transition(__instance.satisfied, (smi => smi.WantsToPee()), UpdateRate.SIM_4000ms); return(false); } else { return(true); } }
public override void InitializeStates(out StateMachine.BaseState default_state) { default_state = (StateMachine.BaseState) this.waitingfordelivery; this.statusItem = new StatusItem(nameof(VesselInserter), string.Empty, string.Empty, string.Empty, StatusItem.IconType.Info, NotificationType.Neutral, false, OverlayModes.None.ID, 129022); this.statusItem.resolveStringCallback = (Func <string, object, string>)((str, data) => { VesselInserter bottleEmptier = (VesselInserter)data; if ((UnityEngine.Object)bottleEmptier == (UnityEngine.Object)null) { return(str); } if (bottleEmptier.allowManualPumpingStationFetching) { return((string)BUILDING.STATUSITEMS.BOTTLE_EMPTIER.ALLOWED.NAME); } return((string)BUILDING.STATUSITEMS.BOTTLE_EMPTIER.DENIED.NAME); }); this.statusItem.resolveTooltipCallback = (Func <string, object, string>)((str, data) => { VesselInserter bottleEmptier = (VesselInserter)data; if ((UnityEngine.Object)bottleEmptier == (UnityEngine.Object)null) { return(str); } if (bottleEmptier.allowManualPumpingStationFetching) { return((string)BUILDING.STATUSITEMS.BOTTLE_EMPTIER.ALLOWED.TOOLTIP); } return((string)BUILDING.STATUSITEMS.BOTTLE_EMPTIER.DENIED.TOOLTIP); }); this.root.ToggleStatusItem(this.statusItem, (Func <VesselInserter.StatesInstance, object>)(smi => (object)smi.master)); this.unoperational.TagTransition(GameTags.Operational, this.waitingfordelivery, false).PlayAnim("off"); this.waitingfordelivery.TagTransition(GameTags.Operational, this.unoperational, true) .EventTransition(GameHashes.OnStorageChange, this.emptying, (StateMachine <VesselInserter.States, VesselInserter.StatesInstance, VesselInserter, object> .Transition.ConditionCallback) (smi => smi.GetComponent <Storage>().MassStored() != 0)) .Enter("CreateChore", (StateMachine <VesselInserter.States, VesselInserter.StatesInstance, VesselInserter, object> .State.Callback)(smi => smi.CreateChore())) .Exit("CancelChore", (StateMachine <VesselInserter.States, VesselInserter.StatesInstance, VesselInserter, object> .State.Callback)(smi => smi.CancelChore())) .PlayAnim("on"); this.emptying.TagTransition(GameTags.Operational, this.unoperational, true) //.Update("CheckBonusDeliveries", (System.Action<VesselInserter.StatesInstance, float>)((smi, dt) => smi.CheckChore(dt))) .EventTransition(GameHashes.OnStorageChange, this.waitingfordelivery, (StateMachine <VesselInserter.States, VesselInserter.StatesInstance, VesselInserter, object> .Transition.ConditionCallback) (smi => smi.GetComponent <Storage>().MassStored() == 0)); //.Enter("StartMeter", (StateMachine<VesselInserter.States, VesselInserter.StatesInstance, VesselInserter, object>.State.Callback) // (smi => smi.SetStorageZeroes())); //.Update("Emit", (System.Action<VesselInserter.StatesInstance, float>) // ((smi, dt) => smi.Emit(dt)), UpdateRate.SIM_200ms, false).PlayAnim("working_loop", KAnim.PlayMode.Loop); }
public override void InitializeStates(out StateMachine.BaseState default_state) { default_state = (StateMachine.BaseState) this.disabled; this.root.EventTransition(GameHashes.OperationalChanged, this.disabled, (StateMachine <EthanolDistillery.States, EthanolDistillery.StatesInstance, EthanolDistillery, object> .Transition.ConditionCallback)(smi => !smi.master.operational.IsOperational)); this.disabled.EventTransition(GameHashes.OperationalChanged, this.waiting, (StateMachine <EthanolDistillery.States, EthanolDistillery.StatesInstance, EthanolDistillery, object> .Transition.ConditionCallback)(smi => smi.master.operational.IsOperational)); this.waiting.Enter("Waiting", (StateMachine <EthanolDistillery.States, EthanolDistillery.StatesInstance, EthanolDistillery, object> .State.Callback) (smi => smi.master.operational.SetActive(false, false))).EventTransition(GameHashes.OnStorageChange, this.converting, (StateMachine <EthanolDistillery.States, EthanolDistillery.StatesInstance, EthanolDistillery, object> .Transition.ConditionCallback) (smi => smi.master.CheckEnoughMassToConvert())); this.converting.Enter("Ready", (StateMachine <EthanolDistillery.States, EthanolDistillery.StatesInstance, EthanolDistillery, object> .State.Callback) (smi => smi.master.operational.SetActive(true, false))) .Transition(this.waiting, (StateMachine <EthanolDistillery.States, EthanolDistillery.StatesInstance, EthanolDistillery, object> .Transition.ConditionCallback) (smi => !smi.master.CheckCanConvert()), UpdateRate.SIM_200ms) .EventHandler(GameHashes.OnStorageChange, (StateMachine <EthanolDistillery.States, EthanolDistillery.StatesInstance, EthanolDistillery, object> .State.Callback) (smi => smi.TryEmit())); }
public override void InitializeStates(out StateMachine.BaseState default_state) { default_state = this.disabled; this.root.EventTransition(GameHashes.OperationalChanged, this.disabled, (CoalComp.StatesInstance smi) => !smi.master.operational.IsOperational); this.disabled.EventTransition(GameHashes.OperationalChanged, this.waiting, (CoalComp.StatesInstance smi) => smi.master.operational.IsOperational); this.waiting.EventTransition(GameHashes.OnStorageChange, this.converting, (CoalComp.StatesInstance smi) => smi.master.GetComponent <ElementConverter>().HasEnoughMassToStartConverting()); this.converting.Enter(delegate(CoalComp.StatesInstance smi) { smi.master.operational.SetActive(true, false); }).Exit(delegate(CoalComp.StatesInstance smi) { smi.master.operational.SetActive(false, false); }).Transition(this.waiting, (CoalComp.StatesInstance smi) => !smi.master.GetComponent <ElementConverter>().CanConvertAtAll(), UpdateRate.SIM_200ms).EventHandler(GameHashes.OnStorageChange, delegate(CoalComp.StatesInstance smi) { smi.TryEmit(); }); }
public override void InitializeStates(out StateMachine.BaseState default_state) { default_state = this.offline; base.serializable = false; this.statusItemUnderMassLiquid = new StatusItem("statusItemUnderMassLiquid", BUILDING.STATUSITEMS.HEATINGSTALLEDLOWMASS_LIQUID.NAME, BUILDING.STATUSITEMS.HEATINGSTALLEDLOWMASS_LIQUID.TOOLTIP, string.Empty, StatusItem.IconType.Info, NotificationType.BadMinor, false, OverlayModes.None.ID, 129022); this.statusItemUnderMassGas = new StatusItem("statusItemUnderMassGas", BUILDING.STATUSITEMS.HEATINGSTALLEDLOWMASS_GAS.NAME, BUILDING.STATUSITEMS.HEATINGSTALLEDLOWMASS_GAS.TOOLTIP, string.Empty, StatusItem.IconType.Info, NotificationType.BadMinor, false, OverlayModes.None.ID, 129022); this.statusItemOverTemp = new StatusItem("statusItemOverTemp", BUILDING.STATUSITEMS.HEATINGSTALLEDHOTENV.NAME, BUILDING.STATUSITEMS.HEATINGSTALLEDHOTENV.TOOLTIP, string.Empty, StatusItem.IconType.Info, NotificationType.BadMinor, false, OverlayModes.None.ID, 129022); this.statusItemOverTemp.resolveStringCallback = delegate(string str, object obj) { ThermalReducer.StatesInstance statesInstance = (ThermalReducer.StatesInstance)obj; return(string.Format(str, GameUtil.GetFormattedTemperature(statesInstance.master.TargetTemperature, GameUtil.TimeSlice.None, GameUtil.TemperatureInterpretation.Absolute, true, false))); }; this.offline.EventTransition(GameHashes.OperationalChanged, this.online, (ThermalReducer.StatesInstance smi) => smi.master.operational.IsOperational); this.online.EventTransition(GameHashes.OperationalChanged, this.offline, (ThermalReducer.StatesInstance smi) => !smi.master.operational.IsOperational).DefaultState(this.online.heating).Update("spaceheater_online", delegate(ThermalReducer.StatesInstance smi, float dt) { switch (smi.master.MonitorHeating(dt)) { case ThermalReducer.MonitorState.ReadyToHeat: smi.GoTo(this.online.heating); break; case ThermalReducer.MonitorState.TooHot: smi.GoTo(this.online.overtemp); break; case ThermalReducer.MonitorState.NotEnoughLiquid: smi.GoTo(this.online.undermassliquid); break; case ThermalReducer.MonitorState.NotEnoughGas: smi.GoTo(this.online.undermassgas); break; } }, UpdateRate.SIM_4000ms, false); this.online.heating.Enter(delegate(ThermalReducer.StatesInstance smi) { smi.master.operational.SetActive(true, false); }).Exit(delegate(ThermalReducer.StatesInstance smi) { smi.master.operational.SetActive(false, false); }); this.online.undermassliquid.ToggleCategoryStatusItem(Db.Get().StatusItemCategories.Heat, this.statusItemUnderMassLiquid, null); this.online.undermassgas.ToggleCategoryStatusItem(Db.Get().StatusItemCategories.Heat, this.statusItemUnderMassGas, null); this.online.overtemp.ToggleCategoryStatusItem(Db.Get().StatusItemCategories.Heat, this.statusItemOverTemp, null); }
public override void InitializeStates(out StateMachine.BaseState default_state) { default_state = (StateMachine.BaseState) this.off; this.off.PlayAnim("off").EventTransition(GameHashes.OperationalChanged, (GameStateMachine <RadioTowerStates, RadioTowerStates.Instance, IStateMachineTarget, RadioTowerStates.Def> .State) this.on, (StateMachine <RadioTowerStates, RadioTowerStates.Instance, IStateMachineTarget, RadioTowerStates.Def> .Transition.ConditionCallback)(smi => smi.GetComponent <Operational>().IsOperational)); this.on.DefaultState(this.on.pre).Enter("ToggleActive", (StateMachine <RadioTowerStates, RadioTowerStates.Instance, IStateMachineTarget, RadioTowerStates.Def> .State.Callback)(smi => smi.GetComponent <Operational>().SetActive(true))).Exit("ToggleActive", (StateMachine <RadioTowerStates, RadioTowerStates.Instance, IStateMachineTarget, RadioTowerStates.Def> .State.Callback)(smi => smi.GetComponent <Operational>().SetActive(false))); this.on.pre.PlayAnim("on_pre").OnAnimQueueComplete(this.on.loop); this.on.loop.PlayAnim("on", KAnim.PlayMode.Loop).EventTransition(GameHashes.OperationalChanged, this.on.pst, (StateMachine <RadioTowerStates, RadioTowerStates.Instance, IStateMachineTarget, RadioTowerStates.Def> .Transition.ConditionCallback)(smi => !smi.GetComponent <Operational>().IsOperational)).TagTransition(GameTags.Detecting, (GameStateMachine <RadioTowerStates, RadioTowerStates.Instance, IStateMachineTarget, RadioTowerStates.Def> .State) this.on.working); this.on.pst.PlayAnim("on_pst").OnAnimQueueComplete(this.off); this.on.working.DefaultState(this.on.working.pre).Enter("ToggleActive", (StateMachine <RadioTowerStates, RadioTowerStates.Instance, IStateMachineTarget, RadioTowerStates.Def> .State.Callback)(smi => { smi.GetComponent <Operational>().SetActive(true); })).Exit("ToggleActive", (StateMachine <RadioTowerStates, RadioTowerStates.Instance, IStateMachineTarget, RadioTowerStates.Def> .State.Callback)(smi => { smi.GetComponent <Operational>().SetActive(false); })); this.on.working.pre.PlayAnim("detect_pre").OnAnimQueueComplete(this.on.working.loop); this.on.working.loop.PlayAnim("detect_loop", KAnim.PlayMode.Loop).EventTransition(GameHashes.OperationalChanged, this.on.working.pst, (StateMachine <RadioTowerStates, RadioTowerStates.Instance, IStateMachineTarget, RadioTowerStates.Def> .Transition.ConditionCallback)(smi => !smi.GetComponent <Operational>().IsOperational)).EventTransition(GameHashes.ActiveChanged, this.on.working.pst, (StateMachine <RadioTowerStates, RadioTowerStates.Instance, IStateMachineTarget, RadioTowerStates.Def> .Transition.ConditionCallback)(smi => !smi.GetComponent <Operational>().IsActive)).TagTransition(GameTags.Detecting, this.on.working.pst, true); this.on.working.pst.PlayAnim("detect_pst").OnAnimQueueComplete(this.on.loop); }
public override void InitializeStates(out StateMachine.BaseState default_state) { default_state = (StateMachine.BaseState) this.calm; this.calm. Enter((StateMachine <AggroMonitor, AggroMonitor.Instance, IStateMachineTarget, AggroMonitor.Def> .State.Callback)(smi => { //PUtil.LogDebug("Critter enter calm state"); smi.gameObject.AddOrGet <FactionAlignment>().SwitchAlignment(FactionManager.FactionID.Pest); })). Update("evaluate_aggroLevel_calm", (System.Action <AggroMonitor.Instance, float>)((smi, dt) => smi.EvaluateAggroLevel()), UpdateRate.SIM_200ms).ParamTransition <bool>((StateMachine <AggroMonitor, AggroMonitor.Instance, IStateMachineTarget, AggroMonitor.Def> .Parameter <bool>) this.isAggro, this.aggro, GameStateMachine <AggroMonitor, AggroMonitor.Instance, IStateMachineTarget, AggroMonitor.Def> .IsTrue); this.aggro. Enter((StateMachine <AggroMonitor, AggroMonitor.Instance, IStateMachineTarget, AggroMonitor.Def> .State.Callback)(smi => { //PUtil.LogDebug("Critter enter aggro state"); smi.gameObject.AddOrGet <FactionAlignment>().SwitchAlignment(FactionManager.FactionID.Hostile); })). ToggleStatusItem((String)DangerousWorldStrings.AGGRO_CRITTER_AGGRO_TITLE, (String)DangerousWorldStrings.AGGRO_CRITTER_AGGRO_DESC). Update("evaluate_aggroLevel_aggro", (System.Action <AggroMonitor.Instance, float>)((smi, dt) => smi.EvaluateAggroLevel()), UpdateRate.SIM_200ms).ParamTransition <bool>((StateMachine <AggroMonitor, AggroMonitor.Instance, IStateMachineTarget, AggroMonitor.Def> .Parameter <bool>) this.isAggro, this.calm, GameStateMachine <AggroMonitor, AggroMonitor.Instance, IStateMachineTarget, AggroMonitor.Def> .IsFalse); this.aggro.attack. /*Enter((StateMachine<AggroMonitor, AggroMonitor.Instance, IStateMachineTarget, AggroMonitor.Def>.State.Callback)(smi => * { * PUtil.LogDebug(("Critter attack: {0}").F(smi.MainFiend.name)); * })).*/ ToggleStatusItem((String)DangerousWorldStrings.AGGRO_CRITTER_ATTACK_TITLE, (String)DangerousWorldStrings.AGGRO_CRITTER_ATTACK_DESC). Update("evaluate_aggroLevel_aggro", (System.Action <AggroMonitor.Instance, float>)((smi, dt) => smi.EvaluateAggroLevel()), UpdateRate.SIM_200ms); this.aggro.subdued. /*Enter((StateMachine<AggroMonitor, AggroMonitor.Instance, IStateMachineTarget, AggroMonitor.Def>.State.Callback)(smi => * { * PUtil.LogDebug(("Critter subdued: {0}").F(smi.MainFiend.name)); * })).*/ ToggleStatusItem((String)DangerousWorldStrings.AGGRO_CRITTER_SUBDUED_TITLE, (String)DangerousWorldStrings.AGGRO_CRITTER_SUBDUED_DESC). Update("evaluate_aggroLevel_aggro", (System.Action <AggroMonitor.Instance, float>)((smi, dt) => smi.EvaluateAggroLevel()), UpdateRate.SIM_200ms); }
public override void InitializeStates(out StateMachine.BaseState default_state) { default_state = EnoughLight; root.Update(CheckLightLevel); EnoughLight.ParamTransition(LightLevel, Dark, (smi, lux) => lux < DarkThreshold); Dark .Enter(smi => smi.Effects.Add(Effects.DarkId, false)) .Exit(smi => smi.Effects.Remove(Effects.DarkId)) .ParamTransition(LightLevel, PitchBlack, IsZero) .ParamTransition(LightLevel, EnoughLight, (smi, lux) => lux >= DarkThreshold); PitchBlack .Enter(smi => smi.Effects.Add(Effects.PitchBlackId, false)) .Exit(smi => smi.Effects.Remove(Effects.PitchBlackId)) .ParamTransition(LightLevel, Dark, IsGTZero); }
public override void InitializeStates(out StateMachine.BaseState default_state) { this.serializable = true; default_state = (StateMachine.BaseState) this.waiting; this.statusItemCooling = new StatusItem("cooling", (string)CREATURES.STATUSITEMS.COOLING.NAME, (string)CREATURES.STATUSITEMS.COOLING.TOOLTIP, string.Empty, StatusItem.IconType.Info, NotificationType.Neutral, false, OverlayModes.None.ID, 129022); this.waiting //.Enter("Waiting", (StateMachine<CloudyBreath.States, CloudyBreath.StatesInstance, CloudyBreath, object>.State.Callback) //(smi => smi.master.operational.SetActive(false, false))) .EventTransition(GameHashes.OnStorageChange, this.cooling, (StateMachine <CloudyBreath.States, CloudyBreath.StatesInstance, CloudyBreath, object> .Transition.ConditionCallback) (smi => smi.master.CheckCanCool())); this.cooling //.Enter("Cooling", (StateMachine<CloudyBreath.States, CloudyBreath.StatesInstance, CloudyBreath, object>.State.Callback) //(smi => smi.master.operational.SetActive(true, false))) .Transition(this.waiting, (StateMachine <CloudyBreath.States, CloudyBreath.StatesInstance, CloudyBreath, object> .Transition.ConditionCallback) (smi => !smi.master.CheckCanCool()), UpdateRate.SIM_200ms) .EventHandler(GameHashes.OnStorageChange, (StateMachine <CloudyBreath.States, CloudyBreath.StatesInstance, CloudyBreath, object> .State.Callback) (smi => smi.master.Cool())); }
public override void InitializeStates(out StateMachine.BaseState default_state) { default_state = (StateMachine.BaseState) this.disabled; this.disabled.EventTransition(GameHashes.ActiveChanged, this.converting, (StateMachine <GermScrubConverter.States, GermScrubConverter.StatesInstance, GermScrubConverter, object> .Transition.ConditionCallback)(smi => { if (!((UnityEngine.Object)smi.master.operational == (UnityEngine.Object)null)) { return(smi.master.operational.IsActive); } return(true); })); this.converting.Enter("AddStatusItems", (StateMachine <GermScrubConverter.States, GermScrubConverter.StatesInstance, GermScrubConverter, object> .State.Callback)(smi => smi.AddStatusItems())).Exit("RemoveStatusItems", (StateMachine <GermScrubConverter.States, GermScrubConverter.StatesInstance, GermScrubConverter, object> .State.Callback)(smi => smi.RemoveStatusItems())).EventTransition(GameHashes.ActiveChanged, this.disabled, (StateMachine <GermScrubConverter.States, GermScrubConverter.StatesInstance, GermScrubConverter, object> .Transition.ConditionCallback)(smi => { if ((UnityEngine.Object)smi.master.operational != (UnityEngine.Object)null) { return(!smi.master.operational.IsActive); } return(false); })).Update("ConvertMass", (Action <GermScrubConverter.StatesInstance, float>)((smi, dt) => smi.master.ConvertMass()), UpdateRate.SIM_1000ms, true); }
public override void InitializeStates(out StateMachine.BaseState default_state) { default_state = (StateMachine.BaseState) this.off; this.root.Update("RefreshConsuming", ((smi, dt) => smi.master.UpdateConsuming()), UpdateRate.SIM_1000ms, false); this.off .PlayAnim("off") .EventTransition(GameHashes.OperationalChanged, this.idle, (smi => smi.GetComponent <Operational>().IsOperational)); this.idle .PlayAnim("on") .EventTransition(GameHashes.OperationalChanged, this.off, (smi => !smi.GetComponent <Operational>().IsOperational)) .ParamTransition <bool>(this.consuming, this.working, IsTrue); this.working .PlayAnim("working_pre") .PlayAnim("working_loop", KAnim.PlayMode.Loop) .EventTransition(GameHashes.OperationalChanged, this.off, (smi => !smi.GetComponent <Operational>().IsOperational)) .ParamTransition <bool>(this.consuming, this.post, IsFalse); this.post .PlayAnim("working_pst") .OnAnimQueueComplete(this.idle); }
public override void InitializeStates(out StateMachine.BaseState default_state) { default_state = (StateMachine.BaseState) this.off; this.off.PlayAnim("off").EventTransition(GameHashes.OperationalChanged, (GameStateMachine <AdvancedSpaceScannerController, AdvancedSpaceScannerController.Instance, IStateMachineTarget, AdvancedSpaceScannerController.Def> .State) this.on, (StateMachine <AdvancedSpaceScannerController, AdvancedSpaceScannerController.Instance, IStateMachineTarget, AdvancedSpaceScannerController.Def> .Transition.ConditionCallback)(smi => smi.GetComponent <Operational>().IsOperational)); this.on.DefaultState(this.on.pre).ToggleStatusItem(Db.Get().BuildingStatusItems.DetectorScanning).Enter("ToggleActive", (StateMachine <AdvancedSpaceScannerController, AdvancedSpaceScannerController.Instance, IStateMachineTarget, AdvancedSpaceScannerController.Def> .State.Callback)(smi => smi.GetComponent <Operational>().SetActive(true))).Exit("ToggleActive", (StateMachine <AdvancedSpaceScannerController, AdvancedSpaceScannerController.Instance, IStateMachineTarget, AdvancedSpaceScannerController.Def> .State.Callback)(smi => smi.GetComponent <Operational>().SetActive(false))).Update("Scan Sky", (System.Action <AdvancedSpaceScannerController.Instance, float>)((smi, dt) => smi.ScanSky())); this.on.pre.PlayAnim("on_pre").OnAnimQueueComplete(this.on.loop); this.on.loop.PlayAnim("on", KAnim.PlayMode.Loop).EventTransition(GameHashes.OperationalChanged, this.on.pst, (StateMachine <AdvancedSpaceScannerController, AdvancedSpaceScannerController.Instance, IStateMachineTarget, AdvancedSpaceScannerController.Def> .Transition.ConditionCallback)(smi => !smi.GetComponent <Operational>().IsOperational)).TagTransition(GameTags.Detecting, (GameStateMachine <AdvancedSpaceScannerController, AdvancedSpaceScannerController.Instance, IStateMachineTarget, AdvancedSpaceScannerController.Def> .State) this.on.working); this.on.pst.PlayAnim("on_pst").OnAnimQueueComplete(this.off); this.on.working.DefaultState(this.on.working.pre).ToggleStatusItem(Db.Get().BuildingStatusItems.IncomingMeteors).Enter("ToggleActive", (StateMachine <AdvancedSpaceScannerController, AdvancedSpaceScannerController.Instance, IStateMachineTarget, AdvancedSpaceScannerController.Def> .State.Callback)(smi => { smi.GetComponent <Operational>().SetActive(true); smi.SetLogicSignal(true); })).Exit("ToggleActive", (StateMachine <AdvancedSpaceScannerController, AdvancedSpaceScannerController.Instance, IStateMachineTarget, AdvancedSpaceScannerController.Def> .State.Callback)(smi => { smi.GetComponent <Operational>().SetActive(false); smi.SetLogicSignal(false); })); this.on.working.pre.PlayAnim("detect_pre").OnAnimQueueComplete(this.on.working.loop); this.on.working.loop.PlayAnim("detect_loop", KAnim.PlayMode.Loop).EventTransition(GameHashes.OperationalChanged, this.on.working.pst, (StateMachine <AdvancedSpaceScannerController, AdvancedSpaceScannerController.Instance, IStateMachineTarget, AdvancedSpaceScannerController.Def> .Transition.ConditionCallback)(smi => !smi.GetComponent <Operational>().IsOperational)).EventTransition(GameHashes.ActiveChanged, this.on.working.pst, (StateMachine <AdvancedSpaceScannerController, AdvancedSpaceScannerController.Instance, IStateMachineTarget, AdvancedSpaceScannerController.Def> .Transition.ConditionCallback)(smi => !smi.GetComponent <Operational>().IsActive)).TagTransition(GameTags.Detecting, this.on.working.pst, true); this.on.working.pst.PlayAnim("detect_pst").OnAnimQueueComplete(this.on.loop).Enter("Reroll", (StateMachine <AdvancedSpaceScannerController, AdvancedSpaceScannerController.Instance, IStateMachineTarget, AdvancedSpaceScannerController.Def> .State.Callback)(smi => smi.RerollAccuracy())); }
/// <summary> /// Transpiles InitializeStates to remove the FastUpdate updater. /// </summary> internal static bool Prefix(ref StateMachine.BaseState default_state, ReachabilityMonitor __instance) { // Existing states ReachabilityMonitorState reachable = __instance.reachable, unreachable = __instance.unreachable; var param = __instance.isReachable; // New state: avoid an extra event on startup by only transitioning after the // first successful reachability update var tbd = __instance.CreateState("tbd"); default_state = tbd; __instance.serializable = StateMachine.SerializeType.Never; tbd.ParamTransition(param, unreachable, ReachabilityMonitor.IsFalse). ParamTransition(param, reachable, ReachabilityMonitor.IsTrue); reachable.ToggleTag(GameTags.Reachable). Enter("TriggerEvent", TriggerEvent). ParamTransition(param, unreachable, ReachabilityMonitor.IsFalse); unreachable.Enter("TriggerEvent", TriggerEvent). ParamTransition(param, reachable, ReachabilityMonitor.IsTrue); return(false); }
public override void InitializeStates(out StateMachine.BaseState default_state) { var darkThreshold = LightsOutMod.ConfigManager.Config.DarkLuxThreshold; var pitchBlackThreshold = LightsOutMod.ConfigManager.Config.PitchBlackLuxThreshold; default_state = EnoughLight; root.Update(CheckLightLevel); EnoughLight.ParamTransition(LightLevel, Dark, (smi, lux) => lux < darkThreshold); Dark .Enter(smi => smi.Effects.Add(Effects.DarkId, false)) .Exit(smi => smi.Effects.Remove(Effects.DarkId)) .ParamTransition(LightLevel, PitchBlack, (smi, lux) => lux <= pitchBlackThreshold) .ParamTransition(LightLevel, EnoughLight, (smi, lux) => lux >= darkThreshold); PitchBlack .Enter(smi => smi.Effects.Add(Effects.PitchBlackId, false)) .Exit(smi => smi.Effects.Remove(Effects.PitchBlackId)) .ParamTransition(LightLevel, Dark, (smi, lux) => lux > pitchBlackThreshold); }
public override void InitializeStates(out StateMachine.BaseState default_state) { default_state = (StateMachine.BaseState) this.empty; this.empty.PlayAnim("off").EventTransition(GameHashes.OnStorageChange, this.filling, (StateMachine <LiquidBottler.Controller, LiquidBottler.Controller.Instance, LiquidBottler, object> .Transition.ConditionCallback)(smi => smi.master.storage.IsFull())); this.filling.PlayAnim("working").OnAnimQueueComplete(this.ready); this.ready.EventTransition(GameHashes.OnStorageChange, this.pickup, (StateMachine <LiquidBottler.Controller, LiquidBottler.Controller.Instance, LiquidBottler, object> .Transition.ConditionCallback)(smi => !smi.master.storage.IsFull())).Enter((StateMachine <LiquidBottler.Controller, LiquidBottler.Controller.Instance, LiquidBottler, object> .State.Callback)(smi => { smi.master.storage.allowItemRemoval = true; foreach (GameObject go in smi.master.storage.items) { go.Trigger(-778359855, (object)smi.master.storage); } })).Exit((StateMachine <LiquidBottler.Controller, LiquidBottler.Controller.Instance, LiquidBottler, object> .State.Callback)(smi => { smi.master.storage.allowItemRemoval = false; foreach (GameObject go in smi.master.storage.items) { go.Trigger(-778359855, (object)smi.master.storage); } })); this.pickup.PlayAnim("pick_up").OnAnimQueueComplete(this.empty); }
public override void InitializeStates(out StateMachine.BaseState default_state) { default_state = this.satisfiedState; // Create and configure the light effect Effect needLightEffect = new Effect("NeedLight", "Needs light", "This creature needs light to live properly.", 0f, true, true, true); needLightEffect.Add(new AttributeModifier(Db.Get().CritterAttributes.Metabolism.Id, -40f, CREATURES.MODIFIERS.UNHAPPY.NAME)); needLightEffect.Add(new AttributeModifier(Db.Get().CritterAttributes.Happiness.Id, -10f, CREATURES.MODIFIERS.UNHAPPY.NAME)); satisfiedState.Transition(needLightState, (CreatureLightMonitor.Instance smi) => smi.IsInDark(), UpdateRate.SIM_1000ms); needLightState.Transition(satisfiedState, (CreatureLightMonitor.Instance smi) => !smi.IsInDark(), UpdateRate.SIM_1000ms); satisfiedState.Enter(delegate(CreatureLightMonitor.Instance smi) { }); needLightState.Enter(delegate(CreatureLightMonitor.Instance smi) { }); // Toggle the effects when enter or ewit un needLight state needLightState.ToggleEffect((CreatureLightMonitor.Instance smi) => needLightEffect); }