Exemplo n.º 1
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);
                }
            }
        }
Exemplo n.º 2
0
        // 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);
        }
Exemplo n.º 3
0
        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));
            }
        }
Exemplo n.º 4
0
        //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);
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 8
0
        public static void OnEnable(Object target)
        {
            graphMaker = target as GraphMaker;

            dimensions = graphMaker.dimensions;
            if (graphMaker.graphMode == GRAPH_MODE.TILE)
            {
                AdjustDimensions(new Vector2Int(-1, -1));
            }
        }
Exemplo n.º 9
0
        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);
        }
Exemplo n.º 10
0
    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();
    }
Exemplo n.º 11
0
        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));
            }
        }
Exemplo n.º 12
0
        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]);
        }
Exemplo n.º 13
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]);
        }
Exemplo n.º 14
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);
        }
Exemplo n.º 15
0
        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)
                );
        }
Exemplo n.º 16
0
        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));
            }
        }
Exemplo n.º 17
0
        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();
        }
Exemplo n.º 18
0
        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());
            }
        }
Exemplo n.º 20
0
        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));
        }
Exemplo n.º 21
0
 private List <Vector2> MakeGraph(Vector2 start)
 {
     return(GraphMaker.GetGraph());
 }
Exemplo n.º 22
0
        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);
        }
Exemplo n.º 23
0
 /// <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);
 }