Esempio n. 1
0
 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);
 }
Esempio n. 3
0
 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();
 }