private Chore CreateUrgentUseChore(SMInstance smi) { Chore chore = CreateUseChore(smi, Db.Get().ChoreTypes.Pee); chore.AddPrecondition(ChorePreconditions.instance.IsBladderFull, null); chore.AddPrecondition(ChorePreconditions.instance.NotCurrentlyPeeing, null); return(chore); }
private Chore CreateBreakUseChore(SMInstance smi) { Chore chore = CreateUseChore(smi, Db.Get().ChoreTypes.BreakPee); chore.AddPrecondition(ChorePreconditions.instance.IsBladderNotFull, null); return(chore); }
private void CreateWorkChore() { GetComponent <Prioritizable>().AddRef(); chore = new WorkChore <EmptyConduitWorkable>(Db.Get().ChoreTypes.EmptyStorage, this, null, true, null, null, null, true, null, false, false, null, false, true, true, PriorityScreen.PriorityClass.basic, 5, false, true); chore.AddPrecondition(ChorePreconditions.instance.HasSkillPerk, Db.Get().SkillPerks.CanDoPlumbing.Id); elapsedTime = 0f; emptiedPipe = false; shouldShowSkillPerkStatusItem = true; UpdateStatusItem(null); }
/// <summary> /// Applied after AddPrecondition runs. /// </summary> internal static void Postfix(Chore __instance, Chore.Precondition precondition, object data) { if (precondition.id == ChorePreconditions.instance.IsScheduledTime.id && (data is ScheduleBlockType type) && type == Work) { // Any task classified as Work gets our finish time precondition __instance.AddPrecondition(CAN_START_NEW, __instance); } }
protected static void ModifyChore(Workable instance, Chore chore, Func <Workable, bool> isEndlessWorking) { var precondition = new Chore.Precondition() { id = "RequireAttributeRange", fn = delegate(ref Chore.Precondition.Context context, object data) { return(!isEndlessWorking(instance) || ShouldChoreBeWorked(context)); }, description = DUPLICANTS.CHORES.PRECONDITIONS.REQUIRES_ATTRIBUTE_RANGE.DESCRIPTION }; chore.AddPrecondition(precondition, null); }
/// <summary> /// Adds a chore precondition to check if the Duplicant is allowed to use that /// building. /// </summary> /// <param name="chore">The chore to modify.</param> private static void AddProfilePrecondition(Chore chore) { var choreTypes = Db.Get().ChoreTypes; var type = chore.choreType; // Blacklist all fetch, empty storage, decon, repair, disinfect if (type != null && type != choreTypes.EmptyStorage && type != choreTypes. Deconstruct && type != choreTypes.Repair && type != choreTypes.Disinfect && !type.Id.Contains("Fetch") && chore.target is Component cmp && cmp != null && IS_ALLOWED.fn != null) { // Look for WP object var profiles = cmp.gameObject.GetComponentSafe <WorkshopProfile>(); if (profiles != null) { chore.AddPrecondition(IS_ALLOWED, profiles); } } }
public Instance(Chore <Instance> chore, Def def) : base((IStateMachineTarget)chore, def) { chore.AddPrecondition(IsBagged, null); }
public static void Postfix(Chore __instance) { __instance.AddPrecondition(PriorityZero.ZeroPrecondition); }
public Instance(Chore <Instance> chore, Def def) : base((IStateMachineTarget)chore, def) { chore.AddPrecondition(ChorePreconditions.instance.CheckBehaviourPrecondition, GameTags.Creatures.Behaviours.PlayInterruptAnim); }
public Instance(Chore <Instance> chore, Def def) : base((IStateMachineTarget)chore, def) { chore.AddPrecondition(ChorePreconditions.instance.CheckBehaviourPrecondition, GameTags.Creatures.Flee); base.sm.mover.Set(GetComponent <Navigator>(), base.smi); }
private void OnSolidChanged(object data) { if (!((UnityEngine.Object) this == (UnityEngine.Object)null) && !((UnityEngine.Object)base.gameObject == (UnityEngine.Object)null)) { GameScenePartitioner.Instance.Free(ref unstableEntry); int num = Grid.PosToCell(this); int num2 = -1; UpdateColor(isReachable); if (Grid.Element[num].hardness >= 200) { bool flag = false; foreach (Chore.PreconditionInstance precondition in chore.GetPreconditions()) { Chore.PreconditionInstance current = precondition; if (current.id == ChorePreconditions.instance.HasSkillPerk.id) { flag = true; break; } } if (!flag) { chore.AddPrecondition(ChorePreconditions.instance.HasSkillPerk, Db.Get().SkillPerks.CanDigSupersuperhard); } requiredSkillPerk = Db.Get().SkillPerks.CanDigSupersuperhard.Id; materialDisplay.sharedMaterial = materials[3]; } else if (Grid.Element[num].hardness >= 150) { bool flag2 = false; foreach (Chore.PreconditionInstance precondition2 in chore.GetPreconditions()) { Chore.PreconditionInstance current2 = precondition2; if (current2.id == ChorePreconditions.instance.HasSkillPerk.id) { flag2 = true; break; } } if (!flag2) { chore.AddPrecondition(ChorePreconditions.instance.HasSkillPerk, Db.Get().SkillPerks.CanDigNearlyImpenetrable); } requiredSkillPerk = Db.Get().SkillPerks.CanDigNearlyImpenetrable.Id; materialDisplay.sharedMaterial = materials[2]; } else if (Grid.Element[num].hardness >= 50) { bool flag3 = false; foreach (Chore.PreconditionInstance precondition3 in chore.GetPreconditions()) { Chore.PreconditionInstance current3 = precondition3; if (current3.id == ChorePreconditions.instance.HasSkillPerk.id) { flag3 = true; break; } } if (!flag3) { chore.AddPrecondition(ChorePreconditions.instance.HasSkillPerk, Db.Get().SkillPerks.CanDigVeryFirm); } requiredSkillPerk = Db.Get().SkillPerks.CanDigVeryFirm.Id; materialDisplay.sharedMaterial = materials[1]; } else { requiredSkillPerk = null; chore.GetPreconditions().Remove(chore.GetPreconditions().Find((Chore.PreconditionInstance o) => o.id == ChorePreconditions.instance.HasSkillPerk.id)); } UpdateStatusItem(null); bool flag4 = false; if (!Grid.Solid[num]) { num2 = GetUnstableCellAbove(num); if (num2 == -1) { flag4 = true; } else { StartCoroutine("PeriodicUnstableFallingRecheck"); } } else if (Grid.Foundation[num]) { flag4 = true; } if (flag4) { isDigComplete = true; if (chore == null || !chore.InProgress()) { Util.KDestroyGameObject(base.gameObject); } else { GetComponentInChildren <MeshRenderer>().enabled = false; } } else if (num2 != -1) { Extents extents = default(Extents); Grid.CellToXY(num, out extents.x, out extents.y); extents.width = 1; extents.height = (num2 - num + Grid.WidthInCells - 1) / Grid.WidthInCells + 1; unstableEntry = GameScenePartitioner.Instance.Add("Diggable.OnSolidChanged", base.gameObject, extents, GameScenePartitioner.Instance.solidChangedLayer, OnSolidChanged); } } }
public Instance(Chore <Instance> chore, Def def) : base((IStateMachineTarget)chore, def) { chore.AddPrecondition(ChorePreconditions.instance.CheckBehaviourPrecondition, GameTags.Creatures.WantsToDropElements); }
public Instance(Chore <Instance> chore, Def def) : base((IStateMachineTarget)chore, def) { chore.AddPrecondition(ChorePreconditions.instance.CheckBehaviourPrecondition, GameTags.HasDebugDestination); }
public Instance(Chore <Instance> chore, Def def) : base((IStateMachineTarget)chore, def) { chore.AddPrecondition(ChorePreconditions.instance.CheckBehaviourPrecondition, GameTags.Creatures.WantsToEat); inhaleSound = GlobalAssets.GetSound(def.inhaleSound, false); }
public Instance(Chore <Instance> chore, Def def) : base((IStateMachineTarget)chore, def) { chore.AddPrecondition(ChorePreconditions.instance.CheckBehaviourPrecondition, GameTags.Creatures.ScalesGrown); }
public Instance(Chore <Instance> chore, Def def) : base((IStateMachineTarget)chore, def) { chore.AddPrecondition(ChorePreconditions.instance.CheckBehaviourPrecondition, def.tag); }
public Instance(Chore <Instance> chore, Def def) : base((IStateMachineTarget)chore, def) { originalSpeed = GetComponent <Navigator>().defaultSpeed; chore.AddPrecondition(ChorePreconditions.instance.CheckBehaviourPrecondition, GameTags.Creatures.WantsToGetRanched); }
public Instance(Chore <Instance> chore, Def def) : base((IStateMachineTarget)chore, def) { chore.AddPrecondition(ChorePreconditions.instance.HasTag, GameTags.Creatures.Drowning); }