public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil lordToil = CreateGatheringToil(spot, organizer, gatheringDef); stateGraph.AddToil(lordToil); LordToil_End lordToil_End = new LordToil_End(); stateGraph.AddToil(lordToil_End); float speechDuration = 12500f; Transition transition = new Transition(lordToil, lordToil_End); transition.AddTrigger(new Trigger_TickCondition(ShouldBeCalledOff)); transition.AddTrigger(new Trigger_PawnKilled()); transition.AddTrigger(new Trigger_PawnLost(PawnLostCondition.LeftVoluntarily, organizer)); transition.AddPreAction(new TransitionAction_Custom((Action) delegate { ApplyOutcome((float)lord.ticksInToil / speechDuration); })); stateGraph.AddTransition(transition); timeoutTrigger = new Trigger_TicksPassedAfterConditionMet((int)speechDuration, () => GatheringsUtility.InGatheringArea(organizer.Position, spot, organizer.Map), 60); Transition transition2 = new Transition(lordToil, lordToil_End); transition2.AddTrigger(timeoutTrigger); transition2.AddPreAction(new TransitionAction_Custom((Action) delegate { ApplyOutcome(1f); })); stateGraph.AddTransition(transition2); return(stateGraph); }
static bool Prefix(ref Trigger_TicksPassedAfterConditionMet __instance, ref bool __result, ref Lord lord, ref TriggerSignal signal) { if (!__instance.Data.conditionMet && signal.type == TriggerSignalType.Tick && Find.TickManager.TicksGame % __instance.checkEveryTicks == 0) { __instance.Data.conditionMet = __instance.condition(); } __result = __instance.Data.conditionMet && ActivateOn(__instance, lord, signal); return(false); }
static bool ActivateOn(Trigger_TicksPassedAfterConditionMet __instance, Lord lord, TriggerSignal signal) { return(false); }