public override void OnBodyGUI() { BaseNode node = target as BaseNode; StateGraph graph = node.graph as StateGraph; base.OnBodyGUI(); NodePort input = null; if (node.InstanceInputs.Count() > 0) { input = node.InstanceInputs.First(); } NodePort output = null; if (node.InstanceOutputs.Count() > 0) { output = node.InstanceOutputs.First(); } if (input == null) { NodeEditorGUILayout.VerticalPortField(null, output); } else if (output == null) { NodeEditorGUILayout.VerticalPortField(null, input); } else { NodeEditorGUILayout.VerticalPortPair(input, output); } }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil_DefendBase lordToil_DefendBase = (LordToil_DefendBase)(stateGraph.StartingToil = new LordToil_DefendBase(baseCenter)); LordToil_DefendBase lordToil_DefendBase2 = new LordToil_DefendBase(baseCenter); stateGraph.AddToil(lordToil_DefendBase2); LordToil_AssaultColony lordToil_AssaultColony = new LordToil_AssaultColony(attackDownedIfStarving: true); lordToil_AssaultColony.useAvoidGrid = true; stateGraph.AddToil(lordToil_AssaultColony); Transition transition = new Transition(lordToil_DefendBase, lordToil_DefendBase2); transition.AddSource(lordToil_AssaultColony); transition.AddTrigger(new Trigger_BecameNonHostileToPlayer()); stateGraph.AddTransition(transition); Transition transition2 = new Transition(lordToil_DefendBase2, lordToil_DefendBase); transition2.AddTrigger(new Trigger_BecamePlayerEnemy()); stateGraph.AddTransition(transition2); //Transition transition3 = new Transition(lordToil_DefendBase, lordToil_AssaultColony); //transition3.AddTrigger(new Trigger_FractionPawnsLost(0.2f)); //transition3.AddTrigger(new Trigger_PawnHarmed(0.4f)); //transition3.AddTrigger(new Trigger_ChanceOnTickInteval(2500, 0.03f)); //transition3.AddTrigger(new Trigger_TicksPassed(251999)); //transition3.AddTrigger(new Trigger_UrgentlyHungry()); //transition3.AddTrigger(new Trigger_ChanceOnPlayerHarmNPCBuilding(0.4f)); //transition3.AddPostAction(new TransitionAction_WakeAll()); //string message = "MessageDefendersAttacking".Translate(faction.def.pawnsPlural, faction.Name, Faction.OfPlayer.def.pawnsPlural).CapitalizeFirst(); //transition3.AddPreAction(new TransitionAction_Message(message, MessageTypeDefOf.ThreatBig)); //stateGraph.AddTransition(transition3); return(stateGraph); }
private bool Draw(object val, StateGraph context) { if (val == null) { return(true); } IList list = val as IList; while (Drawers.Count < list.Count) { Drawers.Add(DrawerCollector.CreatContainerDrawer(Field, ElementType)); } for (int i = 0; i < list.Count; ++i) { string style = selectIndex == i ? "MeTransitionSelect" : "RL Element"; using (new GUILayout.HorizontalScope(style)) { var drawer = Drawers[i]; if (GUILayout.Button("", "RL DragHandle", GUILayout.ExpandHeight(true))) { selectIndex = i; } using (new GUILayout.VerticalScope()) { if (drawer.Draw(null, list[i], context)) { DrawerCollector.OnPropertyModify(context); list[i] = drawer.GetValue(); } } } GUILayout.Space(4); } return(false); }
/// <summary> /// Same as <paramref name="stateGraph"/>.AddTransition, but for multiple <paramref name="transitions"/> /// </summary> /// <param name="stateGraph"></param> /// <param name="transitions"></param> public static void AddTransitions(this StateGraph stateGraph, IEnumerable <Transition> transitions) { foreach (Transition transition in transitions) { stateGraph.AddTransition(transition); } }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); stateGraph.StartingToil = new LordToil_ManClosestTurrets(); return(stateGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil lordToil_Steal = stateGraph.AttachSubgraph(new LordJob_TenantSteal().CreateGraph()).StartingToil; return(stateGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); stateGraph.AddToil(new LordToil_IdleNearby()); return(stateGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil_DefendOutpost lordToil_Defend = new LordToil_DefendOutpost(this.rallyPoint); stateGraph.AddToil(lordToil_Defend); LordToil_End lordToil_End = new LordToil_End(); stateGraph.AddToil(lordToil_End); this.timeoutTrigger = new Trigger_TicksPassed(8000); Transition transition = new Transition(lordToil_Defend, lordToil_End); transition.AddTrigger(this.timeoutTrigger); //transition.AddPreAction(new TransitionAction_Message("Defend lord timeout.", MessageSound.Standard, this.rallyPoint)); stateGraph.AddTransition(transition); Trigger_Memo memoTrigger = new Trigger_Memo("ThreatIsFinished"); Transition transition2 = new Transition(lordToil_Defend, lordToil_End); transition2.AddTrigger(memoTrigger); //transition2.AddPreAction(new TransitionAction_Message("Defend lord threat is finished.", MessageSound.Standard, this.rallyPoint)); stateGraph.AddTransition(transition2); return(stateGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil_LoadShipCargo loadToil = new LordToil_LoadShipCargo(ship); stateGraph.AddToil(loadToil); LordToil_End lordToil_End = new LordToil_End(); stateGraph.AddToil(lordToil_End); Transition transition = new Transition(loadToil, lordToil_End); transition.AddTrigger(new Trigger_PawnLost()); transition.AddPreAction(new TransitionAction_Message("MessageFailedToLoadTransportersBecauseColonistLost".Translate(), MessageSound.Negative)); transition.AddPreAction(new TransitionAction_Custom(new Action(this.CancelLoadingProcess))); stateGraph.AddTransition(transition); Transition endTransition = new Transition(loadToil, lordToil_End); endTransition.AddTrigger(new Trigger_TicksPassed(TimeOutTick)); endTransition.AddTrigger(new Trigger_PawnsExhausted()); endTransition.AddPreAction(new TransitionAction_Custom(new Action(delegate { Log.Message("Ending"); this.CancelLoadingProcess(); }))); stateGraph.AddTransition(endTransition); return(stateGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil startingToil = stateGraph.AttachSubgraph(new LordJob_Travel(this.siegeSpot).CreateGraph()).StartingToil; LordToil_Siege lordToil_Siege = new LordToil_Siege(this.siegeSpot, this.blueprintPoints); stateGraph.AddToil(lordToil_Siege); LordToil startingToil2 = stateGraph.AttachSubgraph(new LordJob_AssaultColony(this.faction, true, true, false, false, true).CreateGraph()).StartingToil; Transition transition = new Transition(startingToil, lordToil_Siege); transition.AddTrigger(new Trigger_Memo("TravelArrived")); transition.AddTrigger(new Trigger_TicksPassed(5000)); stateGraph.AddTransition(transition); Transition transition2 = new Transition(lordToil_Siege, startingToil2); transition2.AddTrigger(new Trigger_Memo("NoBuilders")); transition2.AddTrigger(new Trigger_Memo("NoArtillery")); transition2.AddTrigger(new Trigger_PawnHarmed(0.08f, false)); transition2.AddTrigger(new Trigger_FractionPawnsLost(0.3f)); transition2.AddTrigger(new Trigger_TicksPassed((int)(60000.0 * Rand.Range(1.5f, 3f)))); transition2.AddPreAction(new TransitionAction_Message("MessageSiegersAssaulting".Translate(this.faction.def.pawnsPlural, this.faction), MessageTypeDefOf.ThreatBig)); transition2.AddPostAction(new TransitionAction_WakeAll()); stateGraph.AddTransition(transition2); return(stateGraph); }
public override StateGraph CreateGraph() { var mainGraph = new StateGraph(); var toil_Attend = new LordToil_AttendShow(audienceRect, entertainer, entertainerSpot); mainGraph.AddToil(toil_Attend); var toil_End = new LordToil_End(); mainGraph.AddToil(toil_End); var trans_NormalEnd = new Transition(toil_Attend, toil_End); trans_NormalEnd.AddTrigger(new Trigger_Memo("StopEntertaining")); trans_NormalEnd.AddTrigger(new Trigger_TicksPassed(durationRange.RandomInRange)); trans_NormalEnd.AddPreAction(new TransitionAction_Message("ShowEnded".Translate(entertainer.LabelShort))); mainGraph.AddTransition(trans_NormalEnd); var trans_BadEnd = new Transition(toil_Attend, toil_End); trans_BadEnd.AddTrigger(new Trigger_Memo("DangerPresent")); trans_BadEnd.AddTrigger(new Trigger_TickCondition(() => ShouldBeCalledOff())); trans_BadEnd.AddTrigger(new Trigger_PawnLostViolently()); trans_BadEnd.AddPreAction(new TransitionAction_Message("ShowEndedBad".Translate(entertainer.LabelShort))); mainGraph.AddTransition(trans_BadEnd); return(mainGraph); }
public override StateGraph CreateGraph() { StateGraph graph = new StateGraph(); LordToil_ControlMechanoid sdToil = new LordToil_ControlMechanoid(); graph.AddToil(sdToil); LordToil_End endToil = new LordToil_End(); Transition endTransition = new Transition(sdToil, endToil); endTransition.AddTrigger(new Trigger_Custom(delegate { Pawn pawn = this.lord.ownedPawns[0]; Pawn mech = pawn.RemoteControlLink(); bool shouldEnd = (mech == null || !mech.Spawned || mech.Dead || mech.Downed || pawn.UnableToControl()); if (shouldEnd) { if (mech != null) { ExtendedPawnData mechData = Base.Instance.GetExtendedDataStorage().GetExtendedDataFor(mech); mechData.remoteControlLink = null; } ExtendedPawnData pawnData = Base.Instance.GetExtendedDataStorage().GetExtendedDataFor(pawn); pawnData.remoteControlLink = null; } return(shouldEnd); })); graph.AddToil(endToil); graph.AddTransition(endTransition); return(graph); }
public override StateGraph CreateGraph() { var graph = new StateGraph(); graph.AddToil(new LordToil_Hostage()); return(graph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil_DefendAndExpandHive lordToil_DefendAndExpandHive = new LordToil_DefendAndExpandHive(); lordToil_DefendAndExpandHive.distToHiveToAttack = 10f; stateGraph.StartingToil = lordToil_DefendAndExpandHive; LordToil_DefendHiveAggressively lordToil_DefendHiveAggressively = new LordToil_DefendHiveAggressively(); lordToil_DefendHiveAggressively.distToHiveToAttack = 40f; stateGraph.AddToil(lordToil_DefendHiveAggressively); LordToil_AssaultColony lordToil_AssaultColony = new LordToil_AssaultColony(false); stateGraph.AddToil(lordToil_AssaultColony); Transition transition = new Transition(lordToil_DefendAndExpandHive, (!this.aggressive) ? lordToil_DefendHiveAggressively : lordToil_AssaultColony, false, true); transition.AddTrigger(new Trigger_PawnHarmed(0.5f, true, null)); transition.AddTrigger(new Trigger_PawnLostViolently()); transition.AddTrigger(new Trigger_Memo(Hive.MemoAttackedByEnemy)); transition.AddTrigger(new Trigger_Memo(Hive.MemoBurnedBadly)); transition.AddTrigger(new Trigger_Memo(Hive.MemoDestroyed)); transition.AddTrigger(new Trigger_Memo(HediffGiver_Heat.MemoPawnBurnedByAir)); transition.AddPostAction(new TransitionAction_EndAllJobs()); stateGraph.AddTransition(transition); Transition transition2 = new Transition(lordToil_DefendAndExpandHive, lordToil_AssaultColony, false, true); Transition transition3 = transition2; float chance = 0.5f; Faction parentFaction = base.Map.ParentFaction; transition3.AddTrigger(new Trigger_PawnHarmed(chance, false, parentFaction)); transition2.AddPostAction(new TransitionAction_EndAllJobs()); stateGraph.AddTransition(transition2); Transition transition4 = new Transition(lordToil_DefendHiveAggressively, lordToil_AssaultColony, false, true); Transition transition5 = transition4; chance = 0.5f; parentFaction = base.Map.ParentFaction; transition5.AddTrigger(new Trigger_PawnHarmed(chance, false, parentFaction)); transition4.AddPostAction(new TransitionAction_EndAllJobs()); stateGraph.AddTransition(transition4); Transition transition6 = new Transition(lordToil_DefendAndExpandHive, (!this.aggressive) ? lordToil_DefendHiveAggressively : lordToil_AssaultColony, false, true); transition6.canMoveToSameState = true; transition6.AddSource(lordToil_AssaultColony); transition6.AddTrigger(new Trigger_Memo(Hive.MemoDestroyed)); stateGraph.AddTransition(transition6); Transition transition7 = new Transition(lordToil_AssaultColony, lordToil_DefendAndExpandHive, false, true); transition7.AddSource(lordToil_DefendHiveAggressively); transition7.AddTrigger(new Trigger_TicksPassedWithoutHarmOrMemos(1200, new string[] { Hive.MemoAttackedByEnemy, Hive.MemoBurnedBadly, Hive.MemoDestroyed, HediffGiver_Heat.MemoPawnBurnedByAir })); transition7.AddPostAction(new TransitionAction_EndAttackBuildingJobs()); stateGraph.AddTransition(transition7); return(stateGraph); }
public static void Postfix(StateGraph __result) { //--Log.Message("[ABF]AssaultColonyForRape::CreateGraph"); if (__result == null) { return; } //--Log.Message("[RJW]AssaultColonyForRape::CreateGraph"); foreach (var trans in __result.transitions) { if (HasDesignatedTransition(trans)) { foreach (Trigger t in trans.triggers) { if (t.filters == null) { t.filters = new List <TriggerFilter>() { new Trigger_SexSatisfy(0.3f) }; } else { t.filters.Add(new Trigger_SexSatisfy(0.3f)); } } //--Log.Message("[ABF]AssaultColonyForRape::CreateGraph Adding SexSatisfyTrigger to " + trans.ToString()); } } }
public static void Main(string[] args) { StateGraph stateGraph; StateRunner runner; StateRunner overlayRunner = null; args = new string[] { "" }; if (args.Contains("Debug")) { stateGraph = StateGraph.LoadStateGraph( @"..\..\..\..\DarkestDark.Data\Mini\States", @"..\..\..\..\DarkestDark.Data\Mini\Transitions"); runner = new StateRunner(stateGraph, "Room"); overlayRunner = new StateRunner(stateGraph, "Nothing"); } else { stateGraph = StateGraph.LoadStateGraph( @"..\..\..\..\DarkestDark.Data\DarkestDark\States", @"..\..\..\..\DarkestDark.Data\DarkestDark\Transitions"); runner = new StateRunner(stateGraph, "Main Menu"); overlayRunner = new StateRunner(stateGraph, "Nothing"); } // Instantiate a state runner and set its initial state. new Repl().Loop(runner, overlayRunner); }
public static AnimatorSystem <T> Create <T>(World world, StateGraph graph) where T : struct, IUnitState { var animator = world.GetOrCreateManager <AnimatorSystem <T> >(); animator.StateGraph = graph; return(animator); }
public override StateGraph CreateGraph() { var graph = new StateGraph(); graph.AddToil(new LordToil_LiveInCity(workSpot)); return(graph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil party = CreateGatheringToil(spot, organizer, gatheringDef); stateGraph.AddToil(party); LordToil_End lordToil_End = new LordToil_End(); stateGraph.AddToil(lordToil_End); Transition transition = new Transition(party, 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((LordToil_Party)party); })); transition.AddPreAction(new TransitionAction_Message(gatheringDef.calledOffMessage, MessageTypeDefOf.NegativeEvent, new TargetInfo(spot, base.Map))); stateGraph.AddTransition(transition); timeoutTrigger = GetTimeoutTrigger(); Transition transition2 = new Transition(party, lordToil_End); transition2.AddTrigger(timeoutTrigger); transition2.AddPreAction(new TransitionAction_Custom((Action) delegate { ApplyOutcome((LordToil_Party)party); })); transition2.AddPreAction(new TransitionAction_Message(gatheringDef.finishedMessage, MessageTypeDefOf.SituationResolved, new TargetInfo(spot, base.Map))); stateGraph.AddTransition(transition2); return(stateGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil_Election lordToil_Election = new LordToil_Election(this.spot); stateGraph.AddToil(lordToil_Election); LordToil_End lordToil_End = new LordToil_End(); stateGraph.AddToil(lordToil_End); Transition transition = new Transition(lordToil_Election, lordToil_End); transition.AddTrigger(new Trigger_TickCondition(() => this.ShouldBeCalledOff())); transition.AddTrigger(new Trigger_TickCondition(() => this.candidates.Count == 0)); transition.AddTrigger(new Trigger_PawnLostViolently()); transition.AddPreAction(new TransitionAction_Message("MessageElectionCalledOff".Translate(this.baseName), MessageTypeDefOf.NegativeEvent, new TargetInfo(this.spot, this.Map, false))); stateGraph.AddTransition(transition); this.timeoutTrigger = new Trigger_TicksPassed(Rand.RangeInclusive(GenDate.TicksPerHour * 4, GenDate.TicksPerHour * 8)); Transition transition2 = new Transition(lordToil_Election, lordToil_End); transition2.AddTrigger(this.timeoutTrigger); transition2.AddPreAction(new TransitionAction_Custom((Action) delegate { this.Finished(); })); stateGraph.AddTransition(transition2); return(stateGraph); }
public override void OnSucessfullCast(Saveable_Caster pawn, IEnumerable <Thing> targets, IExposable effectState) { List <Pawn> newPawns = new List <Pawn>(); foreach (PawnKindDef pawnKind in this.pawnKinds) { Pawn newPawn = PawnGenerator.GeneratePawn(pawnKind, pawn.pawn.Faction); IntVec3 loc = CellFinder.RandomClosewalkCellNear(pawn.pawn.Position, this.range); GenSpawn.Spawn(newPawn, loc); newPawns.Add(newPawn); if (this.spawnedMote != null) { this.spawnedMote.AbilityStarted(pawn, newPawn); } } Brain brain = pawn.pawn.GetSquadBrain(); if (brain == null) { StateGraph squadBrainStateGraph = GraphMaker.AssaultColonyGraph(pawn.pawn.Faction, false, false); newPawns.Insert(0, pawn.pawn); BrainMaker.MakeNewBrain(pawn.pawn.Faction, squadBrainStateGraph, newPawns); } else { foreach (Pawn newPawn in newPawns) { brain.AddPawn(newPawn); } } }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil_MillAboutCloseBy chillax = new LordToil_MillAboutCloseBy(locus); stateGraph.AddToil(chillax); LordToil_ExitMap leaveMap = new LordToil_ExitMap(LocomotionUrgency.Jog); Transition signalToLeave = new Transition(chillax, leaveMap); signalToLeave.AddTrigger(new Trigger_PawnRecruited()); signalToLeave.AddTrigger(new Trigger_Custom((signal) => signal.type == TriggerSignalType.FactionRelationsChanged)); signalToLeave.AddTrigger(new Trigger_FightWon()); signalToLeave.AddTrigger(new Trigger_Memo("SetFree")); //triggered by ThingComp_RescueMe //signalToLeave.AddPostAction(new TransitionAction_Message("prisoners leaving.")); <- in case you want to use that one instead, for added clarity (more generic than PrisonersFreedLGE) signalToLeave.AddPostAction(new TransitionAction_WakeAll()); signalToLeave.AddPostAction(new TransitionAction_Custom(() => { Find.World.worldObjects.SiteAt(lord.Map.Tile)?.GetComponent <PrisonerRescueQuestComp>()?.GiveRewardsAndSendLetter(); })); signalToLeave.AddPostAction(new TransitionAction_EndAllJobs()); stateGraph.AddTransition(signalToLeave); stateGraph.AddToil(leaveMap); return(stateGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); stateGraph.AddToil(new LordToil_DefendPoint(point, 28f, wanderRadius)); return(stateGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); stateGraph.AddToil(new LordToil_DefendPawn(targetPawn)); return(stateGraph); }
/// <summary> /// This generates all transitions needed for the control window to work /// </summary> /// <param name="stateGraph"></param> /// <returns>the Transitions</returns> private IEnumerable <Transition> AnyPlayerChoiceTransition(StateGraph stateGraph) { for (int i = 0; i < stateGraph.lordToils.Count; i++) { for (int j = 0; j < stateGraph.lordToils.Count; j++) { if (i == j) { continue; } //save j as another variable, otherwise j refers to the same number as the one the loop uses, which in the end is always Count int k = j; yield return(new Transition(stateGraph.lordToils[i], stateGraph.lordToils[j]) { triggers = new List <Trigger>(1) { new Trigger_Custom((TriggerSignal _) => deployedMilitaryCommandMenu.squadMilitaryOrderDic[squad] == (MilitaryOrder)k + 1 && ReadyForCommands) }, preActions = new List <TransitionAction>(1) { new TransitionAction_Custom(UpdateOrderPosition) } }); } } }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil_DefendAndExpandHive lordToil_DefendAndExpandHive = new LordToil_DefendAndExpandHive(); lordToil_DefendAndExpandHive.distToHiveToAttack = 10f; stateGraph.StartingToil = lordToil_DefendAndExpandHive; LordToil_AssaultColony lordToil_AssaultColony = new LordToil_AssaultColony(); stateGraph.AddToil(lordToil_AssaultColony); Transition transition = new Transition(lordToil_DefendAndExpandHive, lordToil_AssaultColony); transition.AddTrigger(new Trigger_PawnHarmed(0.5f, true)); transition.AddTrigger(new Trigger_PawnLostViolently()); transition.AddTrigger(new Trigger_Memo(Hive.MemoAttackedByEnemy)); transition.AddTrigger(new Trigger_Memo(Hive.MemoBurnedBadly)); transition.AddTrigger(new Trigger_Memo(Hive.MemoDestroyed)); transition.AddTrigger(new Trigger_Memo(HediffGiver_Heat.MemoPawnBurnedByAir)); transition.AddPostAction(new TransitionAction_EndAllJobs()); stateGraph.AddTransition(transition); Transition transition2 = new Transition(lordToil_DefendAndExpandHive, lordToil_AssaultColony); transition2.canMoveToSameState = true; transition2.AddSource(lordToil_AssaultColony); transition2.AddTrigger(new Trigger_Memo(Hive.MemoDestroyed)); stateGraph.AddTransition(transition2); Transition transition3 = new Transition(lordToil_AssaultColony, lordToil_DefendAndExpandHive); transition3.AddTrigger(new Trigger_TicksPassedWithoutHarmOrMemos(1200, Hive.MemoAttackedByEnemy, Hive.MemoBurnedBadly, Hive.MemoDestroyed, HediffGiver_Heat.MemoPawnBurnedByAir)); transition3.AddPostAction(new TransitionAction_EndAttackBuildingJobs()); stateGraph.AddTransition(transition3); return(stateGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); stateGraph.AddToil(new LordToil_DefendPoint(this.point, 28f)); return(stateGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil_Funeral lordToil_Funeral = new LordToil_Funeral(this.spot); stateGraph.AddToil(lordToil_Funeral); LordToil_End lordToil_End = new LordToil_End(); stateGraph.AddToil(lordToil_End); Transition transition = new Transition(lordToil_Funeral, lordToil_End); transition.AddTrigger(new Trigger_TickCondition(() => !PartyUtility.AcceptableGameConditionsToContinueParty(base.Map))); transition.AddTrigger(new Trigger_PawnLostViolently()); transition.AddPreAction(new TransitionAction_Message("MessageFuneralCalledOff".Translate(), MessageTypeDefOf.NegativeEvent, new TargetInfo(this.spot, this.Map, false))); stateGraph.AddTransition(transition); int length = Rand.RangeInclusive(GenDate.TicksPerHour, Mathf.RoundToInt(GenDate.TicksPerHour * 2.5f)); this.timeoutTrigger = new Trigger_TicksPassed(length); Transition transition2 = new Transition(lordToil_Funeral, lordToil_End); transition2.AddTrigger(this.timeoutTrigger); transition2.AddPreAction(new TransitionAction_Custom((Action) delegate { this.Finished(); })); stateGraph.AddTransition(transition2); return(stateGraph); }
public override StateGraph CreateGraph() { var stateGraph = new StateGraph(); var unused = stateGraph.AttachSubgraph(new LordJob_TenantSteal().CreateGraph()).StartingToil; return(stateGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil_SetLeadership lordToil_Party = new LordToil_SetLeadership(this.spot); stateGraph.AddToil(lordToil_Party); LordToil_End lordToil_End = new LordToil_End(); stateGraph.AddToil(lordToil_End); Transition transition = new Transition(lordToil_Party, lordToil_End); transition.AddTrigger(new Trigger_TickCondition(() => this.ShouldBeCalledOff())); transition.AddTrigger(new Trigger_PawnLostViolently()); transition.AddPreAction(new TransitionAction_Message("ElectionFail_Disaster".Translate(), MessageTypeDefOf.NegativeEvent, new TargetInfo(this.spot, base.Map, false))); stateGraph.AddTransition(transition); this.timeoutTrigger = new Trigger_TicksPassed(Rand.RangeInclusive(5000, 8000)); Transition transition2 = new Transition(lordToil_Party, lordToil_End); transition2.AddTrigger(this.timeoutTrigger); transition2.AddPreAction(new TransitionAction_Message("ElectionFinished".Translate(), MessageTypeDefOf.PositiveEvent, new TargetInfo(this.spot, base.Map, false))); transition2.AddPreAction(new TransitionAction_Custom(new Action(delegate { this.Finished(); }))); stateGraph.AddTransition(transition2); return(stateGraph); }
public override StateGraph CreateGraph() { var mainGraph = new StateGraph(); var arriveAtChillSpot = new LordToil_CaravanTravel(chillSpot); mainGraph.lordToils.Add(arriveAtChillSpot); var caravanStation = new LordToil_CaravanStation(); mainGraph.lordToils.Add(caravanStation); var transitionToChill = new Transition(arriveAtChillSpot, caravanStation); transitionToChill.triggers.Add(new Trigger_Memo("TravelArrived")); mainGraph.transitions.Add(transitionToChill); var unloadGoods = new LordToil_UnloadGoods(); mainGraph.lordToils.Add(unloadGoods); var transitionToUnloadGoods = new Transition(caravanStation, unloadGoods); transitionToUnloadGoods.triggers.Add(new Trigger_CanTrade()); mainGraph.transitions.Add(transitionToUnloadGoods); var trade = new LordToil_Trade(); mainGraph.lordToils.Add(trade); var transitionToTrade = new Transition(unloadGoods, trade); transitionToTrade.triggers.Add(new Trigger_Memo("TravelArrived")); // transit toil data to the next toil transitionToTrade.preActions.Add(new TransitionAction_Custom(() => trade.data = unloadGoods.Data)); mainGraph.transitions.Add(transitionToTrade); var loadGoods = new LordToil_LoadGoods(); mainGraph.lordToils.Add(loadGoods); var transitionToLoadGoods = new Transition(trade, loadGoods); transitionToLoadGoods.triggers.Add(new Trigger_TicksPassed(GenDate.TicksPerHour*4)); transitionToLoadGoods.preActions.Add( new TransitionAction_Message("MessageTraderCaravanLeaving".Translate(faction.Name))); transitionToLoadGoods.preActions.Add(new TransitionAction_Custom(() => loadGoods.data = trade.Data)); mainGraph.transitions.Add(transitionToLoadGoods); var leaveColony = new LordToil_ExitMapAndEscortCarriers(); mainGraph.lordToils.Add(leaveColony); var transitionToLeaveColony = new Transition(loadGoods, leaveColony); transitionToLeaveColony.triggers.Add(new Trigger_Memo("TravelArrived")); mainGraph.transitions.Add(transitionToLeaveColony); // attaching defence and flee subgraph mainGraph.AttachSubgraph(TraderDefence(mainGraph.lordToils)); return mainGraph; }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil_DefendOutpost lordToil_Defend = new LordToil_DefendOutpost(this.rallyPoint); stateGraph.AddToil(lordToil_Defend); LordToil_End lordToil_End = new LordToil_End(); stateGraph.AddToil(lordToil_End); this.timeoutTrigger = new Trigger_TicksPassed(8000); Transition transition = new Transition(lordToil_Defend, lordToil_End); transition.AddTrigger(this.timeoutTrigger); //transition.AddPreAction(new TransitionAction_Message("Defend lord timeout.", MessageSound.Standard, this.rallyPoint)); stateGraph.AddTransition(transition); Trigger_Memo memoTrigger = new Trigger_Memo("ThreatIsFinished"); Transition transition2 = new Transition(lordToil_Defend, lordToil_End); transition2.AddTrigger(memoTrigger); //transition2.AddPreAction(new TransitionAction_Message("Defend lord threat is finished.", MessageSound.Standard, this.rallyPoint)); stateGraph.AddTransition(transition2); return stateGraph; }
// defence and flee subgraph public StateGraph TraderDefence(List<LordToil> sourceLordToils) { var graph = new StateGraph(); var toilFlee = new LordToil_TakeWoundedGuest(); graph.lordToils.Add(toilFlee); var toilDefence = new LordToil_DefendCaravan(); graph.lordToils.Add(toilDefence); var transitionToFlee = new Transition(toilDefence, toilFlee); transitionToFlee.sources.AddRange(sourceLordToils); transitionToFlee.triggers.Add(new Trigger_ImportantCaravanPeopleLost()); transitionToFlee.preActions.Add(new TransitionAction_Message( "MessageVisitorsTakingWounded".Translate(faction.def.pawnsPlural.CapitalizeFirst(), faction.Name))); transitionToFlee.preActions.Add(new TransitionAction_WakeAll()); graph.transitions.Add(transitionToFlee); // for each lordToil added transition to the defence lordToil, and it's toils index is kept to get back to it later foreach (var currentToil in sourceLordToils) { var transitionToDefence = new Transition(currentToil, toilDefence); transitionToDefence.triggers.Add(new Trigger_PawnHarmed()); // keep the toil index that actually triggered transition as reference to return back to transitionToDefence.preActions.Add(new TransitionAction_Custom(() => { toilDefence.Data.initialLordToilIndex = sourceLordToils.IndexOf(currentToil); })); transitionToDefence.preActions.Add(new TransitionAction_WakeAll()); graph.transitions.Add(transitionToDefence); } // adds transitions back to the initial lordToil, initialize target toil with temporary null var transitionToSource = new Transition(toilDefence, null); transitionToSource.triggers.Add(new Trigger_Memo("DefenceSuccessful")); // asign target toil to return towith transitionAction transitionToSource.preActions.Add(new TransitionAction_Custom(() => { transitionToSource.target = sourceLordToils[toilDefence.Data.initialLordToilIndex]; })); graph.transitions.Add(transitionToSource); return graph; }
/// <summary> /// Initializes a new instance. /// </summary> /// <param name="stateGraph">The state graph that should be built up.</param> public StateGraphBuilder(StateGraph stateGraph) { Requires.NotNull(stateGraph, nameof(stateGraph)); _stateGraph = stateGraph; }
/// <summary> /// Checks whether the <paramref name="invariant" /> holds in all states of the <paramref name="stateGraph" />. /// </summary> /// <param name="stateGraph">The state graph that should be checked.</param> /// <param name="invariant">The invariant that should be checked.</param> internal AnalysisResult CheckInvariant(StateGraph stateGraph, Formula invariant) { Requires.NotNull(stateGraph, nameof(stateGraph)); Requires.NotNull(invariant, nameof(invariant)); var formulaIndex = Array.IndexOf(stateGraph.StateFormulas, invariant); Requires.That(formulaIndex != -1, nameof(invariant), "The invariant cannot be analyzed over the state graph. Use the same " + $"'{typeof(Formula).FullName}' instance as during the construction of the state graph."); return CheckInvariant(() => new StateGraphModel(stateGraph, Configuration.SuccessorCapacity), formulaIndex); }