public override void InitializeStates(out BaseState default_state) { default_state = findfood; Target(eater); bingeEatingEffect = new Effect("Binge_Eating", DUPLICANTS.MODIFIERS.BINGE_EATING.NAME, DUPLICANTS.MODIFIERS.BINGE_EATING.TOOLTIP, 0f, true, false, true, null, 0f, null); bingeEatingEffect.Add(new AttributeModifier(Db.Get().Attributes.Decor.Id, -30f, DUPLICANTS.MODIFIERS.BINGE_EATING.NAME, false, false, true)); bingeEatingEffect.Add(new AttributeModifier("CaloriesDelta", -6666.6665f, DUPLICANTS.MODIFIERS.BINGE_EATING.NAME, false, false, true)); Db.Get().effects.Add(bingeEatingEffect); root.ToggleEffect((StatesInstance smi) => bingeEatingEffect); noTarget.GoTo(finish); eat_pst.ToggleAnims("anim_eat_overeat_kanim", 0f).PlayAnim("working_pst").OnAnimQueueComplete(finish); finish.Enter(delegate(StatesInstance smi) { smi.StopSM("complete/no more food"); }); findfood.Enter("FindFood", delegate(StatesInstance smi) { smi.FindFood(); }); fetch.InitializeStates(eater, ediblesource, ediblechunk, requestedfoodunits, actualfoodunits, eat, cantFindFood); eat.ToggleAnims("anim_eat_overeat_kanim", 0f).QueueAnim("working_loop", true, null).Enter(delegate(StatesInstance smi) { isBingeEating.Set(true, smi); }) .DoEat(ediblechunk, actualfoodunits, findfood, findfood) .Exit("ClearIsBingeEating", delegate(StatesInstance smi) { isBingeEating.Set(false, smi); }); cantFindFood.ToggleAnims("anim_interrupt_binge_eat_kanim", 0f).PlayAnim("interrupt_binge_eat").OnAnimQueueComplete(noTarget); }
public override void InitializeStates(out BaseState default_state) { default_state = grounded; grounded.PlayAnim("grounded", KAnim.PlayMode.Loop).DefaultState(grounded.awaitingAstronaut).TagTransition(GameTags.RocketNotOnGround, spaceborne, false); grounded.awaitingAstronaut.Enter(delegate(StatesInstance smi) { if (smi.CheckStoredMinionIsAssignee()) { smi.GoTo(grounded.hasAstronaut); } Game.Instance.userMenu.Refresh(smi.gameObject); }).EventHandler(GameHashes.AssigneeChanged, delegate(StatesInstance smi) { if (smi.CheckStoredMinionIsAssignee()) { smi.GoTo(grounded.hasAstronaut); } Game.Instance.userMenu.Refresh(smi.gameObject); }).ToggleChore((StatesInstance smi) => smi.master.CreateWorkChore(), grounded.hasAstronaut); grounded.hasAstronaut.EventHandler(GameHashes.AssigneeChanged, delegate(StatesInstance smi) { if (!smi.CheckStoredMinionIsAssignee()) { smi.GoTo(grounded.waitingToRelease); } }); grounded.waitingToRelease.ToggleStatusItem(Db.Get().BuildingStatusItems.DisembarkingDuplicant, (object)null).OnSignal(gantryChanged, grounded.awaitingAstronaut, delegate(StatesInstance smi) { if (HasValidGantry(smi.gameObject)) { smi.master.ReleaseAstronaut(accumulatedPee.Get(smi)); accumulatedPee.Set(false, smi); Game.Instance.userMenu.Refresh(smi.gameObject); return(true); } return(false); }); spaceborne.DefaultState(spaceborne.launch); spaceborne.launch.Enter(delegate(StatesInstance smi) { smi.SetSuspended(true); }).GoTo(spaceborne.idle); spaceborne.idle.TagTransition(GameTags.RocketNotOnGround, spaceborne.land, true); spaceborne.land.Enter(delegate(StatesInstance smi) { smi.SetSuspended(false); Game.Instance.userMenu.Refresh(smi.gameObject); accumulatedPee.Set(true, smi); }).GoTo(grounded.waitingToRelease); }
public override void InitializeStates(out BaseState default_state) { default_state = approach; Target(sleeper); root.Exit("DestroyLocator", delegate(StatesInstance smi) { smi.DestroyLocator(); }); approach.InitializeStates(sleeper, bed, sleep, null, null, null); sleep.Enter("SetAnims", delegate(StatesInstance smi) { smi.SetAnim(); }).DefaultState(sleep.normal).ToggleTag(GameTags.Asleep) .DoSleep(sleeper, bed, success, null) .TriggerOnExit(GameHashes.SleepFinished) .EventHandler(GameHashes.SleepDisturbedByLight, delegate(StatesInstance smi) { isDisturbedByLight.Set(true, smi); }) .EventHandler(GameHashes.SleepDisturbedByNoise, delegate(StatesInstance smi) { isDisturbedByNoise.Set(true, smi); }); sleep.uninterruptable.DoNothing(); sleep.normal.ParamTransition(isInterruptable, sleep.uninterruptable, GameStateMachine <States, StatesInstance, SleepChore, object> .IsFalse).ToggleCategoryStatusItem(Db.Get().StatusItemCategories.Main, Db.Get().DuplicantStatusItems.Sleeping, null).QueueAnim("working_loop", true, null) .ParamTransition(isDisturbedByNoise, sleep.interrupt_noise, GameStateMachine <States, StatesInstance, SleepChore, object> .IsTrue) .ParamTransition(isDisturbedByLight, sleep.interrupt_light, GameStateMachine <States, StatesInstance, SleepChore, object> .IsTrue) .Update(delegate(StatesInstance smi, float dt) { smi.CheckLightLevel(); }, UpdateRate.SIM_200ms, false); sleep.interrupt_noise.ToggleCategoryStatusItem(Db.Get().StatusItemCategories.Main, Db.Get().DuplicantStatusItems.SleepingInterruptedByNoise, null).QueueAnim("interrupt_light", false, null).OnAnimQueueComplete(sleep.interrupt_noise_transition); sleep.interrupt_noise_transition.Enter(delegate(StatesInstance smi) { Effects component2 = smi.master.GetComponent <Effects>(); component2.Add(Db.Get().effects.Get("TerribleSleep"), true); if (component2.HasEffect(Db.Get().effects.Get("BadSleep"))) { component2.Remove(Db.Get().effects.Get("BadSleep")); } isDisturbedByNoise.Set(false, smi); State state2 = (!smi.master.GetComponent <Schedulable>().IsAllowed(Db.Get().ScheduleBlockTypes.Sleep)) ? success : sleep.normal; smi.GoTo(state2); }); sleep.interrupt_light.ToggleCategoryStatusItem(Db.Get().StatusItemCategories.Main, Db.Get().DuplicantStatusItems.SleepingInterruptedByLight, null).QueueAnim("interrupt", false, null).OnAnimQueueComplete(sleep.interrupt_light_transition); sleep.interrupt_light_transition.Enter(delegate(StatesInstance smi) { Effects component = smi.master.GetComponent <Effects>(); if (!component.HasEffect(Db.Get().effects.Get("TerribleSleep"))) { smi.master.GetComponent <Effects>().Add(Db.Get().effects.Get("BadSleep"), true); } State state = (!smi.master.GetComponent <Schedulable>().IsAllowed(Db.Get().ScheduleBlockTypes.Sleep)) ? success : sleep.normal; isDisturbedByLight.Set(false, smi); smi.GoTo(state); }); success.Enter(delegate(StatesInstance smi) { smi.EvaluateSleepQuality(); }).ReturnSuccess(); }