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); } } }
// Method for making the chart based on the data and user input private PlotModel Chartmaker(string inhoud, int maand, string mastr) { new Thread(new ThreadStart(Getdata)).Start(); // Filtering the Bike containers AdaptedList <BikeContainer> Fietstrommels2 = FietsTrommels.Filter(element => element.Deelgemeente == inhoud.ToLower()); // Filtering the Theft AdaptedList <Theft> FietsDiefstal2 = FietsDiefstal.Filter(element => element.Neighbourhood == inhoud.ToLower()); AdaptedList <Month> months = this.dataFactory.CreateMonths(new AdaptedList <DateTime>(FietsDiefstal2.Map <DateTime>(e => e.Date).OrderBy(e => e.Date).ToList()), false); months = months.Filter(item => item.GetMonth == maand); //Making arrays int[] bak = new int[] { Fietstrommels2.Count }; int[] thefts = new[] { months[0].EventsThisMonth }; string[] xas = new[] { Extensions.FirstCharToUpper("Bike thefts in " + Fietstrommels2[0].Deelgemeente + " for the month " + mastr) }; //Making a chart PlotModel model = GraphMaker.Mutiplebarschartmaker(bak, thefts, "Fietstrommels", "Diefstallen"); model = GraphMaker.Axisdecorator(model, xas, false); return(model); }
public void Graph_GetOpenNetwork_UnreachablePeer() { var graph = new Graph <int, int>(x => x); int count = 100; var nodes = MakeNodes(count); GraphMaker.SimpleComplete(graph, nodes, 10); // Disconnect 1, and then make it so that it has only outlinks to other nodes. graph.Disconnect(1); for (int i = 0; i < count; i++) { if (i == 1) { continue; } graph.AddLink(1, i, 10); } var network = graph.GetOpenNetwork(0); Assert.AreEqual(99, network.Count); for (int i = 0; i < count; i++) { if (i == 1) { continue; } Assert.IsTrue(network.Contains(i)); } }
//private void TryDefense() //{ // return; // // if (inDefense) return; // inDefense = true; // // if (squadBrain == null) // { // var stateGraph = CreateDefenseGraph(this, 10); // squadBrain = BrainMaker.MakeNewBrain(Faction.OfMechanoids, stateGraph); // Find.History.AddGameEvent("PAL is displeased with your actions. PAL is not your PAL anymore.", GameEventType.BadUrgent, true, this); // } // // foreach (var mechanoid in TotalMechanoids) // { // if (mechanoid.Faction == Faction.OfMechanoids) continue; // // mechanoid.SetFaction(Faction.OfMechanoids); // squadBrain.AddPawn(mechanoid); // } // SoundDefOf.PsychicPulseGlobal.PlayOneShotOnCamera(); //} private static StateGraph CreateDefenseGraph(Thing center, float defendRadius) { StateGraph stateGraph = new StateGraph(); IntVec3 defendPoint; if ( !CellFinder.TryFindRandomCellNear(center.Position, 5, c => c.Standable() && c.CanReach(center, PathEndMode.Touch, TraverseParms.For(TraverseMode.PassDoors)), out defendPoint)) { Log.Error("Found no place for mechanoids to defend " + center); return(GraphMaker.AssaultColonyGraph(center.Faction, false, false)); } var stateDefendPoint = GetState("RimWorld.SquadAI.State_DefendPoint", center.Position); SetField(stateDefendPoint, "defendRadius", defendRadius); stateGraph.StartingState = stateDefendPoint; State target = stateGraph.AttachSubgraph(GetDefendColonyGraph(center.Position)); Transition transition = new Transition(stateDefendPoint, target); transition.triggers.Add(new Trigger_TicksPassed(16000)); transition.triggers.Add(new Trigger_Memo("TakeOverColony")); transition.preActions.Add(new TransitionAction_Message("PAL is now taking over.")); stateGraph.transitions.Add(transition); return(stateGraph); }
private void buttonImport_Click(object sender, EventArgs e) { try { if (textBoxFilePath.Text == "") throw new FileNotFoundException("No file chosen. Enter file name into the text box."); var graphMaker = new GraphMaker(); var graph = graphMaker.CreateGraphFromXml(textBoxFilePath.Text); richTextBoxXml.Text = graphMaker.ModelChildrenNode.ToString(); var patternFinder = new PatternFinder(); string patterns = patternFinder.FindAllPatterns(graph); richTextBoxPatterns.Text = patterns; PatternString = patterns; } catch (FileNotFoundException ex) { MessageBox.Show(ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error); } catch (Exception ex) { MessageBox.Show("Cannot find patterns in the submitted file.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
/// <summary> /// Make Random Tree with N vertexes /// </summary> /// <param name="N">Vertex Count</param> /// <param name="maxDegree">Max Degree</param> /// <returns>Tree with N vertexes</returns> public static SortedSet <int>[] RandomTree(int N, int maxDegree = int.MaxValue) { var maker = new GraphMaker(N, Math.Min(N - 1, maxDegree)); maker.MakeTree(); return(maker.Graph); }
/// <summary> /// Make Random Connected Graph with N vertexes and E edges /// </summary> /// <param name="N">Vertex Count</param> /// <param name="E">Edge Count</param> /// <param name="maxDegree">Max Degree</param> /// <returns>Connected Graph with N vertexes and E edges</returns> public static SortedSet <int>[] RandomGraph(int N, int E, int maxDegree = int.MaxValue) { var maker = new GraphMaker(N, Math.Min(N - 1, maxDegree)); E = Math.Max(E, N - 1); maker.MakeGraph(E); return(maker.Graph); }
public static void OnEnable(Object target) { graphMaker = target as GraphMaker; dimensions = graphMaker.dimensions; if (graphMaker.graphMode == GRAPH_MODE.TILE) { AdjustDimensions(new Vector2Int(-1, -1)); } }
private void MakeBidiLine(Graph <int, int> graph, int numNodes) { List <int> nodes = new List <int>(numNodes); for (int i = 0; i < numNodes; i++) { nodes.Add(i); } GraphMaker.BidiLine(graph, nodes, 10); }
public void Awake() { if (instance != null) { Destroy(gameObject); return; } instance = this; // Init graph if (graphMaker == null) { graphMaker = new GameObject("Graph Maker").AddComponent <GraphMaker>(); } graphMaker.GenerateBoard(boardDimensions.x, boardDimensions.y, 2.5f); winningScore = graphMaker.graphPoints.Count; InitializeResources(); InitializeBuildings(); // Create nodes nodes = new List <NodeController>(graphMaker.numPoints); for (int i = 0; i < graphMaker.graphPoints.Count; ++i) { nodes.Add(Instantiate(nodePrefab).GetComponent <NodeController>()); var point = graphMaker.graphPoints[i]; var node = nodes[nodes.Count - 1]; node.transform.position = point.position; node.transform.SetParent(transform); node.Init(i, point, nodeStartColor); } // Init players players = new List <Player>(playerNetworks.Count); bestNetwork.Init(null); for (int i = 0; i < numPlayersToCreate; ++i) { players.Add(new GameObject($"Player {i.ToString()}").AddComponent <Player>()); playerNetworks.Add(PlayerNetworkManager.Copy($"Player {i.ToString()} Networks", bestNetwork)); players[i].Init(i, playerColors[i], playerNetworks[i]); if (i > 0) { playerNetworks[i].MutateNetworksAsexual(0.2f, 0.02f, 0.001f, false); } } StartGame(); }
public void GraphMaker_BidiLine_Adds_Links() { var graph = new Graph <int, int>(x => x); var nodes = new int[] { 0, 1, 2, 3 }; GraphMaker.BidiLine(graph, nodes, 10); Assert.AreEqual(nodes.Length, graph.GetNodes().Count); for (int i = 0; i < nodes.Length - 1; i++) { Assert.AreEqual(10, graph.GetLinkData(i, i + 1)); Assert.AreEqual(10, graph.GetLinkData(i + 1, i)); } }
public void Graph_GetOpenNetwork_DisconnectedNode() { var graph = new Graph <int, int>(x => x); int count = 100; var nodes = MakeNodes(count); GraphMaker.SimpleComplete(graph, nodes, 10); graph.Disconnect(0); var network = graph.GetOpenNetwork(0); Assert.AreEqual(1, network.Count); Assert.AreEqual(0, network[0]); }
public void Graph_GetOpenNetwork_InlinksOnly() { var graph = new Graph <int, int>(x => x); int count = 100; var nodes = MakeNodes(count); GraphMaker.SimpleComplete(graph, nodes, 10); graph.Disconnect(0); for (int i = 1; i < count; i++) { graph.AddLink(i, 0, 10); } var network = graph.GetOpenNetwork(0); Assert.AreEqual(1, network.Count); Assert.AreEqual(0, network[0]); }
public void Graph_GetOpenNetwork_DirectedLineAsymmetry() { var graph = new Graph <int, int>(x => x); int count = 100; var nodes = MakeNodes(count); // 0 --> 1 --> 2 .... GraphMaker.DirectedLine(graph, nodes, 10); var firstNetwork = graph.GetOpenNetwork(0); var lastNetwork = graph.GetOpenNetwork(count - 1); Assert.AreEqual(count, firstNetwork.Count); for (int i = 0; i < count; i++) { Assert.IsTrue(firstNetwork.Contains(i)); } Assert.AreEqual(1, lastNetwork.Count); }
public void GraphMaker_BidiLine_Rejects_InvalidArgs() { var graph = new Graph <int, int>(x => x); var shortNodes = new int[] { 0 }; var sufficientNodes = new int[] { 0, 1 }; // Null graph. Assert2.Throws <ArgumentNullException>( () => GraphMaker.BidiLine(null, sufficientNodes, 10) ); // Null nodes Assert2.Throws <ArgumentNullException>( () => GraphMaker.BidiLine(graph, null, 10) ); // Not enough nodes. Assert2.Throws <InvalidOperationException>( () => GraphMaker.BidiLine(graph, shortNodes, 10) ); }
public void Graph_GetOpenNetwork_DisconnectedPeer() { var graph = new Graph <int, int>(x => x); int count = 100; var nodes = MakeNodes(count); GraphMaker.SimpleComplete(graph, nodes, 10); graph.Disconnect(1); var network = graph.GetOpenNetwork(0); Assert.AreEqual(99, network.Count); for (int i = 0; i < count; i++) { if (i == 1) { continue; } Assert.IsTrue(network.Contains(i)); } }
static void Main(string[] args) { //var path = AppDomain.CurrentDomain.BaseDirectory + @"testfiles\test3.txt"; var path = (AppDomain.CurrentDomain.BaseDirectory + @"Examples\add.gsa").Replace(@"FlowChartBuilder\bin\Debug\netcoreapp3.0\", ""); var list = TextFileParser.ParseText(path);//.Replace(@"FlowChartBuilder\bin\Debug\netcoreapp3.0\", "")); var grid = new BlockDistributor(list); grid.PrintGrid(); grid.RemoveEmptyLines(); grid.PrintGrid(); grid.SetNodesPositions(); grid.PrintGrid(); var graph = new GraphMaker(grid.GetNodes(), grid.GetGrid());; Stopwatch sw = new Stopwatch(); sw.Start(); graph.LineCreator(); sw.Stop(); Console.WriteLine("ElapsedTotal={0}", sw.Elapsed); graph.RemoveMiddlePointsFromLines(); Console.ReadKey(); }
public void Graph_GetOpenNetwork_OutlinksOnly() { var graph = new Graph <int, int>(x => x); int count = 100; var nodes = MakeNodes(count); GraphMaker.SimpleComplete(graph, nodes, 10); graph.Disconnect(0); for (int i = 1; i < count; i++) { graph.AddLink(0, i, 10); } var network = graph.GetOpenNetwork(0); Assert.AreEqual(100, network.Count); for (int i = 0; i < count; i++) { Assert.IsTrue(network.Contains(i)); } }
public MainWindow() { InitializeComponent(); this.Vectors = new List <VectorModel>(); BrushesArray = new Brush[80]; for (int i = 0; i < 80; i++) { BrushesArray[i] = PickBrush(); } //var path = AppDomain.CurrentDomain.BaseDirectory + @"testfiles\test3.txt"; var path = (AppDomain.CurrentDomain.BaseDirectory + @"Examples\and.gsa").Replace(@"UI\bin\Debug\netcoreapp3.1\", ""); var list = TextFileParser.ParseText(path);//.Replace(@"UI\bin\Debug\netcoreapp3.1\", "")); var grid = new BlockDistributor(list); grid.RemoveEmptyLines(); grid.PrintGrid(); grid.SetNodesPositions(); var graph = new GraphMaker(grid.GetNodes(), grid.GetGrid()); Stopwatch sw = new Stopwatch(); sw.Start(); graph.LineCreator(); sw.Stop(); Console.WriteLine("ElapsedTotal={0}", sw.Elapsed); graph.RemoveMiddlePointsFromLines(); this.Lines = graph.GetLines(); this.Nodes = graph.GetNodes(); int id = 1; foreach (var line in Lines) { var points = line.GetPointsOfLine(); for (int i = 0; i < points.Count - 1; i++) { Vectors.Add(new VectorModel(new Coordinates(points[i].x * _multiplier, points[i].y * _multiplier), new Coordinates(points[i + 1].x * _multiplier, points[i + 1].y * _multiplier), id)); } id++; } this.Vectors = this.Vectors.Where(x => x.Id <= 100).ToList(); this.Recheck = new Queue <VectorModel>(); foreach (var vector in Vectors) { AddLine(vector); } while (this.Recheck.Count != 0) { var recheck = this.Recheck.Dequeue(); if (recheck.GetChangeNumber() < 5) { recheck.AddChange(); AddLine(recheck); } } foreach (var vector in Vectors) { DrawVector(vector); } foreach (var node in Nodes) { AddBlock(node.GetPosition().y, node.GetPosition().x, node.GetId(), node.GetType()); } }
protected override IEnumerable <Toil> MakeNewToils() { yield return(Toils_Reserve.Reserve(terraformerIndex)); yield return(Toils_Goto.GotoCell(terraformerIndex, PathEndMode.InteractionCell).FailOnDestroyed(terraformerIndex)); yield return(Toils_General.Wait(240).FailOnDestroyed(terraformerIndex)); Toil scytherScoutsArrivalToil = new Toil() { initAction = () => { IntVec3 spawningCell; List <Pawn> scytherScoutsList = new List <Pawn>(); for (int scytherIndex = 0; scytherIndex < 4; scytherIndex++) { bool validDropPodCellIsFound = DropCellFinder.TryFindDropSpotNear(this.TargetThingA.InteractionCell, out spawningCell, true, true); if (validDropPodCellIsFound) { Faction faction = Faction.OfMechanoids; Pawn scytherScout = PawnGenerator.GeneratePawn(PawnKindDef.Named("Scyther"), faction); scytherScoutsList.Add(scytherScout); DropPodUtility.MakeDropPodAt(spawningCell, new DropPodInfo { SingleContainedThing = scytherScout, openDelay = 600, leaveSlag = false }); } } StateGraph stateGraph = GraphMaker.MechanoidsDefendShipGraph(this.TargetThingA, defensiveRadiusAroundTerraformer); BrainMaker.MakeNewBrain(Faction.OfMechanoids, stateGraph, scytherScoutsList); }, defaultCompleteMode = ToilCompleteMode.Instant }; yield return(scytherScoutsArrivalToil); Toil pawnEscapingToil = new Toil() { initAction = () => { (this.TargetThingA as Building_MechanoidTerraformer).reverseEngineeringState = Building_MechanoidTerraformer.ReverseEngineeringState.BuildingNotSecured; ThingRequest thingRequest = new ThingRequest(); thingRequest.singleDef = ThingDefOf.CommsConsole; Thing commsConsole = GenClosest.ClosestThingReachable(pawn.Position, thingRequest, PathEndMode.InteractionCell, TraverseParms.For(pawn)); if (commsConsole != null) { pawn.pather.StartPath(commsConsole, PathEndMode.InteractionCell); } else { // The player has no comms console. He should move his colonist manually... and fast! pawn.pather.StartPath(pawn.Position, PathEndMode.OnCell); } string herHimOrIt = "it"; string sheHeOrIt = "it"; if (pawn.gender == Gender.Female) { herHimOrIt = "her"; sheHeOrIt = "she"; } else if (pawn.gender == Gender.Male) { herHimOrIt = "him"; sheHeOrIt = "he"; } string eventText = " " + pawn.Name.ToStringShort + " is just arriving near the strange building when " + sheHeOrIt + " hears the loud noise of incoming drop pods.\n\n" + "You should better take " + herHimOrIt + " to safety... and fast!\n"; Find.LetterStack.ReceiveLetter("Drop pods", eventText, LetterType.BadUrgent, this.pawn.Position); }, defaultCompleteMode = ToilCompleteMode.PatherArrival }; yield return(pawnEscapingToil); yield return(Toils_Reserve.Release(terraformerIndex)); }
private List <Vector2> MakeGraph(Vector2 start) { return(GraphMaker.GetGraph()); }
public void LaunchInvasion(string eventTitle, string eventText, float raidPointsFactor, int dropsNumber, LetterType letterType, IntVec3 spawnPosition) { this.invasionIsDone = true; // Get an indicative amount of points based on the colony wealth so it scales up well for late-game colonies. IncidentParms invasionParameters = IncidentMakerUtility.DefaultParmsNow(Find.Storyteller.def, IncidentCategory.ThreatBig); invasionParameters.faction = Faction.OfMechanoids; invasionParameters.raidStrategy = RaidStrategyDefOf.ImmediateAttack; invasionParameters.raidArrivalMode = PawnsArriveMode.EdgeDrop; invasionParameters.raidNeverFleeIndividual = true; invasionParameters.raidPodOpenDelay = 800; if (dropsNumber > 0) { invasionParameters.points *= (raidPointsFactor / dropsNumber); if (invasionParameters.points < 320) { invasionParameters.points = 320; } for (int dropIndex = 0; dropIndex < dropsNumber; dropIndex++) { IntVec3 dropPodSpawningPosition; float squadPoint = invasionParameters.points; if (spawnPosition.IsValid) { invasionParameters.spawnCenter = spawnPosition; } else { RCellFinder.TryFindRandomPawnEntryCell(out invasionParameters.spawnCenter); } List <Pawn> mechanoidsList = new List <Pawn>(); while (squadPoint >= PawnKindDef.Named("Scyther").combatPower) { bool validDropPodCellIsFound = DropCellFinder.TryFindDropSpotNear(invasionParameters.spawnCenter, out dropPodSpawningPosition, false, true); if (validDropPodCellIsFound) { Faction faction = Faction.OfMechanoids; Pawn squadMember; if (Rand.Value < 0.6f) { squadMember = PawnGenerator.GeneratePawn(PawnKindDef.Named("Scyther"), faction); squadPoint -= PawnKindDef.Named("Scyther").combatPower; } else { squadMember = PawnGenerator.GeneratePawn(PawnKindDef.Named("Centipede"), faction); squadPoint -= (int)PawnKindDef.Named("Centipede").combatPower; } mechanoidsList.Add(squadMember); DropPodUtility.MakeDropPodAt(dropPodSpawningPosition, new DropPodInfo { SingleContainedThing = squadMember, openDelay = 800, leaveSlag = true }); } } StateGraph stateGraph = GraphMaker.AssaultColonyGraph(Faction.OfMechanoids, false, false); BrainMaker.MakeNewBrain(Faction.OfMechanoids, stateGraph, mechanoidsList); } } Find.LetterStack.ReceiveLetter(eventTitle, eventText, letterType, this.Position); }
/// <summary> /// Take the data and create the piechart. /// </summary> private void CreatePieChart(string[] Data, int[] DataCount, string[] Colors) { PlotViewModel.Model = GraphMaker.Piechartmaker(Data, DataCount, Colors); }