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);
        }
示例#3
0
        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);
        }
示例#4
0
 /// <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);
     }
 }
示例#5
0
        public override StateGraph CreateGraph()
        {
            StateGraph stateGraph = new StateGraph();

            stateGraph.StartingToil = new LordToil_ManClosestTurrets();
            return(stateGraph);
        }
示例#6
0
        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);
        }
示例#8
0
        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);
        }
示例#11
0
        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);
        }
示例#12
0
        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);
        }
示例#13
0
        public override StateGraph CreateGraph()
        {
            var graph = new StateGraph();

            graph.AddToil(new LordToil_Hostage());
            return(graph);
        }
示例#14
0
        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);
        }
示例#15
0
 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());
         }
     }
 }
示例#16
0
        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);
        }
示例#17
0
        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);
        }
示例#20
0
        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);
        }
示例#21
0
        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);
        }
示例#24
0
        public override StateGraph CreateGraph()
        {
            StateGraph stateGraph = new StateGraph();

            stateGraph.AddToil(new LordToil_DefendPawn(targetPawn));
            return(stateGraph);
        }
示例#25
0
        /// <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)
                        }
                    });
                }
            }
        }
示例#26
0
        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);
        }
示例#28
0
        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);
        }
示例#29
0
    public override StateGraph CreateGraph()
    {
        var stateGraph = new StateGraph();
        var unused     = stateGraph.AttachSubgraph(new LordJob_TenantSteal().CreateGraph()).StartingToil;

        return(stateGraph);
    }
示例#30
0
        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;
        }
示例#34
0
		/// <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;
		}
示例#35
0
		/// <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);
		}