Beispiel #1
0
 public void LoadGraph()
 {
     LoadXML("GraphData.xml", _gData);
     if (_gData.ToString() != "")
     {
         //use a referenced GraphData here, deserialize from saved string
         graphContainerData = (GraphContainer)DeserializeObject(_gData, "GraphData.xml");
     }
 }
        private void Awake()
        {
            GraphContainer = transform.Find("GraphContainer").GetComponent <RectTransform>();

            _labelTemplateX = GraphContainer.Find("LabelTemplateX").GetComponent <RectTransform>();
            _labelTemplateY = GraphContainer.Find("LabelTemplateY").GetComponent <RectTransform>();
            _dashTemplateX  = GraphContainer.Find("DashTemplateX").GetComponent <RectTransform>();
            _dashTemplateY  = GraphContainer.Find("DashTemplateY").GetComponent <RectTransform>();
        }
Beispiel #3
0
 public GraphContainer Generate(int seed = -1, int maxDepth = 4, int maxBranches = 3, int maxIterations = 3, int skipOdds = 5)
 {
     return(GraphContainer.Generate(new GenerateParameters
     {
         Seed = seed,
         MaxDepth = maxDepth,
         MaxBranches = maxBranches,
         MaxIterations = maxIterations,
         SkipOdds = skipOdds
     }));
 }
Beispiel #4
0
        private static IList <INode> ExtractSingleGraphNodeChains(
            GraphContainer container,
            IDictionary <string, INode> linkedNodeMap)
        {
            var unlinkedNodes = container.Nodes
                                .Where(x => !linkedNodeMap.ContainsKey(x.Guid))
                                .Select(x => x.Node)
                                .ToList();

            return(unlinkedNodes);
        }
        public void SetContainer(GraphContainer containerData, INode[] nodesData)
        {
            this._graph.Update();

            var container = this._graph.FindProperty("_graphContainer");

            container.SetValue(containerData);

            var nodes = this._graph.FindProperty("_nodes");

            nodes.SetValue(nodesData);

            this._graph.ApplyModifiedProperties();
        }
Beispiel #6
0
        public void LoadNarrative(string path)
        {
            _dialogueContainer = AssetDatabase.LoadAssetAtPath <GraphContainer>(path);
            if (_dialogueContainer == null)
            {
                EditorUtility.DisplayDialog($"File Not Found: {path}", "Target Narrative Data does not exist!", "OK");
                return;
            }

            ClearGraph();
            GenerateDialogueNodes();
            ConnectDialogueNodes();
            AddExposedProperties();
            GenerateCommentBlocks();
        }
Beispiel #7
0
 public string GenerateXML(int seed    = 50, int maxDepth  = 2, int maxBranches     = 4, int maxIterations   = 10, int skipOdds = 8,
                           bool doSort = true, bool doSwap = true, bool doCompressX = true, bool doCompressY = true)
 {
     return(GraphContainer.GenerateXML(new GenerateParameters {
         Seed = seed,
         MaxDepth = maxDepth,
         MaxBranches = maxBranches,
         MaxIterations = maxIterations,
         SkipOdds = skipOdds,
         DoSort = doSort,
         DoSwap = doSwap,
         DoCompressX = doCompressX,
         DoCompressY = doCompressY
     }));
 }
Beispiel #8
0
        private void SaveCommentBlocks(GraphContainer dialogueContainer)
        {
            foreach (var block in CommentBlocks)
            {
                var nodes = block.containedElements.Where(x => x is ContentNode).Cast <ContentNode>().Select(x => x.GUID)
                            .ToList();

                dialogueContainer.CommentBlockData.Add(new CommentBlockData
                {
                    ChildNodes = nodes,
                    Title      = block.title,
                    Position   = block.GetPosition().position
                });
            }
        }
Beispiel #9
0
 public override void MouseMove(object sender, MouseEventArgs e)
 {
     if (UseErasePart && SelectLine != null && e.LeftButton == System.Windows.Input.MouseButtonState.Pressed)
     {
         Topology editor = new Topology(Graph);
         Point    pos    = e.GetPosition(GraphContainer);
         Point    np     = editor.LinNearestPoint(SelectLine, pos);
         TrackPoints.Add(np);
         np = GraphContainer.TranslatePoint(np, this.AssociatedObject);
         TrackAdorner.Track.Points.Add(np);
     }
     else
     {
         base.MouseMove(sender, e);
     }
 }
Beispiel #10
0
        static void Main()
        {
            var graph      = GraphContainer.CreateDigGraph();
            var serializer = new XmlSerializer(typeof(GraphContainer));

            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

            var writer = new NoTypeXmlWriter("./output.xgml", CodePagesEncodingProvider.Instance.GetEncoding(1252))
            {
                Formatting  = Formatting.Indented,
                Indentation = 4,
                IndentChar  = ' '
            };

            serializer.Serialize(writer, graph);
            writer.Close();

            Console.WriteLine("Generated Successfully");
        }
Beispiel #11
0
    // // // // // // // // // // // // // // // // // // // // // // // // // // // //
    // MAIN CONSTRUCTOR																 //
    // // // // // // // // // // // // // // // // // // // // // // // // // // // //
    public MainWindow() : base(Gtk.WindowType.Toplevel)
    {
        // Build window
        Build();

        // Start internet connectivity periodic check
        Connection.StartCheck();

        // drawing framework setup
        // Input 1: Coloumns
        // Input 2: Rows
        // Input 3: Swipe Times
        DrawAssembly.Setup(4, 3, 1);

        // Create space for max widgets
        WidgetContainer.AssignWidgetSpace(MAX_WIDGETS);

        // Instantiate widgets from widget construct
        WidgetConstruct.ConstructWidgets();


        // initiate user settings
        UserSettings.Initiate();

        // starts data gathering
        CurrentData.StartDataGathering();


        GraphContainer.CreateGraphs();

        // Setup main update timer
        MainUpdate           = new Timer(10);
        MainUpdate.Elapsed  += new ElapsedEventHandler(OnUpdate);
        MainUpdate.Enabled   = true;
        MainUpdate.AutoReset = true;

        // Setup events
        mainDrawingArea.ButtonPressEvent += new ButtonPressEventHandler(HandlePress);
        mainDrawingArea.AddEvents((int)EventMask.AllEventsMask);
    }
Beispiel #12
0
        public override void MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            if (UseErasePart)
            {
                gTopology.Graph graph = Graph;
                if (graph == null)
                {
                    return;
                }

                Topology       editor = new Topology(graph);
                Point          pos    = e.GetPosition(GraphContainer);
                gTopology.Line line   = editor.LinHit(pos, Tolerance);
                if (line != null)
                {
                    SelectLine = line;
                    this.TrackAdorner.ClearPoint();
                    Point np = editor.LinNearestPoint(line, pos);
                    TrackPoints.Add(np);
                    np = GraphContainer.TranslatePoint(np, this.AssociatedObject);
                    TrackAdorner.Track.Points.Add(np);
                    OldTrackStyle = TrackAdorner.Track.Style;
                    Style newstyle = new Style();
                    newstyle.Setters.Add(new Setter()
                    {
                        Property = Polyline.StrokeProperty, Value = new SolidColorBrush()
                        {
                            Color = Colors.LightBlue
                        }
                    });
                    newstyle.Setters.Add(new Setter()
                    {
                        Property = Polyline.StrokeThicknessProperty, Value = 3.0
                    });
                    TrackAdorner.Track.Style = newstyle;
                    return;
                }
            }
            base.MouseLeftButtonDown(sender, e);
        }
Beispiel #13
0
        public GetPathsResult <TNodeId, TNodeData, TEdgeId, TEdgeData> GetPaths(TNodeId sourceNodeId, TNodeId targetNodeId, string[] nodeFilter, string[] edgeFilter, Pagination nodePagination, Pagination edgePagination, int maxLength)
        {
            var pathsList = new Analyser <TNodeId, TNodeData, TEdgeId, TEdgeData>(
                GetGraphByFilter(nodeFilter, edgeFilter, nodePagination, edgePagination))
                            .GetPaths(sourceNodeId, targetNodeId, maxLength);
            var nodesIds = new HashSet <TNodeId>();
            var edgesIds = new HashSet <TEdgeId>();

            pathsList.ForEach(first => first.ForEach(second => second.ForEach(third => edgesIds.Add(third))));
            var edges = _edgeService.GetEdgesById(edgesIds.ToArray()).ToList();

            edges.ForEach((e) =>
            {
                nodesIds.Add(e.Source);
                nodesIds.Add(e.Target);
            });
            var graphContainer = new GraphContainer <TNodeId, TNodeData, TEdgeId, TEdgeData>(
                _nodeService.GetNodesById(nodesIds.ToArray()).ToList(),
                edges
                );

            return(new GetPathsResult <TNodeId, TNodeData, TEdgeId, TEdgeData>(pathsList, graphContainer));
        }
Beispiel #14
0
    // Ustawienie początkowych pozycji dla graczy, jako wartość wejściową potrzebuje Pojemnika na graf, Wywoływana z klasy MASTER
    public void SetStartPositions(GraphContainer graph)
    {
        if (mapMode == MapMode.normal || mapMode == MapMode.shared)
        {
            int i = 0;
            foreach (var player in PlayerList)
            {
                // utwórz pionek dla gracza
                player.GetComponent <Player>().Init();
                player.GetComponent <Player>().CreatePawn(graph.GetPlanet(i).transform.position);
                player.GetComponent <Player>().PlanetList.Add(graph.GetPlanet(i));
                //player.GetComponent<Player>().MotherPlanetList.Add(graph.GetPlanet(i).GetComponent<MotherPlanet>());
                player.GetComponent <Player>().SystemList.Add(graph.GetPlanet(i).GetComponentInParent <SpaceSystem>());
                // ---------------------------------- ustaw pionek na odpowiedniej planecie
                player.GetComponent <Player>().SetStartPlanet(graph.GetPlanet(i));

                i++;
            }
        }
        else if (mapMode == MapMode.separate)
        {
            int i = 0;
            foreach (var player in PlayerList)
            {
                // utwórz pionek dla gracza
                player.GetComponent <Player>().Init();
                player.GetComponent <Player>().CreatePawn(graph.StartSectors[i].GetComponent <SpaceSystem>().PlanetsList[0].transform.position);
                player.GetComponent <Player>().PlanetList.Add(graph.StartSectors[i].GetComponent <SpaceSystem>().PlanetsList[0]);
                //player.GetComponent<Player>().MotherPlanetList.Add(graph.GetPlanet(i).GetComponent<MotherPlanet>());
                player.GetComponent <Player>().SystemList.Add(graph.StartSectors[i].GetComponent <SpaceSystem>());
                // ---------------------------------- ustaw pionek na odpowiedniej planecie
                player.GetComponent <Player>().SetStartPlanet(graph.StartSectors[i].GetComponent <SpaceSystem>().PlanetsList[0]);

                i++;
            }
        }
    }
Beispiel #15
0
 public string DigExample() => GraphContainer.DigExample();
Beispiel #16
0
        // Populate attributes
        void RegisterAttributes()
        {
            MonoBehaviour[]         sceneObjects = FindObjectsOfType <MonoBehaviour>();
            HashSet <MonoBehaviour> uniqueAttributeContainers = new HashSet <MonoBehaviour>();

            foreach (MonoBehaviour mb in sceneObjects)
            {
                Type monoType = mb.GetType();

                // Fields
                {
                    // Retreive the fields from the mono instance
                    FieldInfo[] objectFields = monoType.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);

                    // search all fields/properties for the [DebugGUIVar] attribute
                    for (int i = 0; i < objectFields.Length; i++)
                    {
                        DebugGUIPrintAttribute printAttribute = Attribute.GetCustomAttribute(objectFields[i], typeof(DebugGUIPrintAttribute)) as DebugGUIPrintAttribute;

                        if (printAttribute != null)
                        {
                            uniqueAttributeContainers.Add(mb);
                            if (!debugGUIPrintFields.ContainsKey(monoType))
                            {
                                debugGUIPrintFields.Add(monoType, new HashSet <FieldInfo>());
                            }
                            if (!debugGUIPrintProperties.ContainsKey(monoType))
                            {
                                debugGUIPrintProperties.Add(monoType, new HashSet <PropertyInfo>());
                            }

                            debugGUIPrintFields[monoType].Add(objectFields[i]);
                        }

                        DebugGUIGraphAttribute graphAttribute = Attribute.GetCustomAttribute(objectFields[i], typeof(DebugGUIGraphAttribute)) as DebugGUIGraphAttribute;

                        if (graphAttribute != null)
                        {
                            // Can't cast to float so we don't bother registering it
                            if (objectFields[i].GetValue(mb) as float? == null)
                            {
                                UnityEngine.Debug.LogError(string.Format("Cannot cast {0}.{1} to float. This member will be ignored.", monoType.Name, objectFields[i].Name));
                                continue;
                            }

                            uniqueAttributeContainers.Add(mb);
                            if (!debugGUIGraphFields.ContainsKey(monoType))
                            {
                                debugGUIGraphFields.Add(monoType, new HashSet <FieldInfo>());
                            }
                            if (!debugGUIGraphProperties.ContainsKey(monoType))
                            {
                                debugGUIGraphProperties.Add(monoType, new HashSet <PropertyInfo>());
                            }


                            debugGUIGraphFields[monoType].Add(objectFields[i]);
                            GraphContainer graph =
                                new GraphContainer(graphWidth, graphHeight)
                            {
                                name      = objectFields[i].Name,
                                max       = graphAttribute.max,
                                min       = graphAttribute.min,
                                group     = graphAttribute.group,
                                autoScale = graphAttribute.autoScale
                            };
                            if (!graphAttribute.color.Equals(default(Color)))
                            {
                                graph.color = graphAttribute.color;
                            }

                            var key = new AttributeKey(objectFields[i]);
                            if (!attributeKeys.ContainsKey(mb))
                            {
                                attributeKeys.Add(mb, new List <AttributeKey>());
                            }
                            attributeKeys[mb].Add(key);

                            graphDictionary.Add(key, graph);
                            graphs.Add(graph);
                        }
                    }
                }

                // Properties
                {
                    PropertyInfo[] objectProperties = monoType.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);

                    for (int i = 0; i < objectProperties.Length; i++)
                    {
                        DebugGUIPrintAttribute printAttribute = Attribute.GetCustomAttribute(objectProperties[i], typeof(DebugGUIPrintAttribute)) as DebugGUIPrintAttribute;

                        if (printAttribute != null)
                        {
                            uniqueAttributeContainers.Add(mb);

                            if (!debugGUIPrintFields.ContainsKey(monoType))
                            {
                                debugGUIPrintFields.Add(monoType, new HashSet <FieldInfo>());
                            }
                            if (!debugGUIPrintProperties.ContainsKey(monoType))
                            {
                                debugGUIPrintProperties.Add(monoType, new HashSet <PropertyInfo>());
                            }

                            debugGUIPrintProperties[monoType].Add(objectProperties[i]);
                        }

                        DebugGUIGraphAttribute graphAttribute = Attribute.GetCustomAttribute(objectProperties[i], typeof(DebugGUIGraphAttribute)) as DebugGUIGraphAttribute;

                        if (graphAttribute != null)
                        {
                            // Can't cast to float so we don't bother registering it
                            if (objectProperties[i].GetValue(mb, null) as float? == null)
                            {
                                UnityEngine.Debug.LogError("Cannot cast " + objectProperties[i].Name + " to float. This member will be ignored.");
                                continue;
                            }

                            uniqueAttributeContainers.Add(mb);

                            if (!debugGUIGraphFields.ContainsKey(monoType))
                            {
                                debugGUIGraphFields.Add(monoType, new HashSet <FieldInfo>());
                            }
                            if (!debugGUIGraphProperties.ContainsKey(monoType))
                            {
                                debugGUIGraphProperties.Add(monoType, new HashSet <PropertyInfo>());
                            }

                            debugGUIGraphProperties[monoType].Add(objectProperties[i]);
                            GraphContainer graph =
                                new GraphContainer(graphWidth, graphHeight)
                            {
                                name      = objectProperties[i].Name,
                                max       = graphAttribute.max,
                                min       = graphAttribute.min,
                                group     = graphAttribute.group,
                                autoScale = graphAttribute.autoScale
                            };
                            if (!graphAttribute.color.Equals(default(Color)))
                            {
                                graph.color = graphAttribute.color;
                            }

                            var key = new AttributeKey(objectProperties[i]);
                            if (!attributeKeys.ContainsKey(mb))
                            {
                                attributeKeys.Add(mb, new List <AttributeKey>());
                            }
                            attributeKeys[mb].Add(key);

                            graphDictionary.Add(key, graph);
                            graphs.Add(graph);
                        }
                    }
                }
            }

            foreach (var mb in uniqueAttributeContainers)
            {
                attributeContainers.Add(mb);
                Type type = mb.GetType();
                if (!typeInstanceCounts.ContainsKey(type))
                {
                    typeInstanceCounts.Add(type, 0);
                }
                typeInstanceCounts[type]++;
            }
        }
Beispiel #17
0
        //private static GraphContainer CreateSimpleGraph()
        //{
        //    var container = GraphContainer.Create();
        //    var graph = container.AddGraph();

        //    const int x = 100;
        //    const int max_nodes = 5;
        //    var starty = -100;
        //    var stepy = 80;

        //    for (int i = 0; i < max_nodes; i++)
        //    {
        //        var label = (i == max_nodes - 1) ? "Finish" : (i == 0) ? "Start" : $"Node {i}";
        //        var y = starty + (stepy * i);
        //        graph.AddNode(i, label).AddGraphics(x, y).AddLabelGraphics(label);
        //    }

        //    for (int i = 0; i < max_nodes - 1; i++)
        //    {
        //        graph.AddEdge(i, i + 1).AddEdgeGraphics();
        //    }

        //    return container;
        //}

        //private static GraphContainer Create2PathGraph()
        //{
        //    var container = GraphContainer.Create();
        //    var graph = container.AddGraph();

        //    const int max_nodes = 3;
        //    const int offsetx = 100;
        //    const int stepy = 80;
        //    const int chara = 65;
        //    var starty = -220;

        //    graph.AddNode(0, "Start").AddGraphics(0, starty).AddLabelGraphics("Start");
        //    graph.AddNode(1, "Puzzle 1").AddGraphics(0, starty + stepy).AddLabelGraphics("Puzzle 1");

        //    graph.AddEdge(0, 1).AddEdgeGraphics();

        //    var label = string.Empty;
        //    var id = 2;
        //    var previd = 1;
        //    var joinids = new int[2];

        //    for (int i = -1; i <= 1; i+=2)
        //    {
        //        previd = 1;

        //        for (int j = 2; j < 2 + max_nodes; j++)
        //        {
        //            var prefix = (char)(chara + ((i + 1) / 2));
        //            var y = starty + (stepy * j);
        //            label = $"Puzzle {prefix}{j}";

        //            graph.AddNode(id, label).AddGraphics(i * offsetx, y).AddLabelGraphics(label);
        //            graph.AddEdge(previd, id).AddEdgeGraphics();
        //            previd = id;
        //            id++;
        //        }

        //        joinids[(i + 1) / 2] = previd;
        //    }

        //    label = $"Puzzle {max_nodes + 2}";
        //    graph.AddNode(id, label).AddGraphics(0, starty + (stepy * (max_nodes + 2))).AddLabelGraphics(label);
        //    graph.AddEdge(joinids[0], id).AddEdgeGraphics();
        //    graph.AddEdge(joinids[1], id).AddEdgeGraphics();
        //    previd = id++;

        //    graph.AddNode(id, "Finish").AddGraphics(0, starty + (stepy * (max_nodes + 3))).AddLabelGraphics("Finish");
        //    graph.AddEdge(previd, id).AddEdgeGraphics();

        //    return container;
        //}

        //private static GraphContainer Create3PathGraph()
        //{
        //    var container = GraphContainer.Create();
        //    var graph = container.AddGraph();

        //    const int max_nodes = 3;
        //    const int offsetx = 150;
        //    const int stepy = 80;
        //    const int chara = 65;
        //    var starty = -220;

        //    graph.AddNode(0, "Start").AddGraphics(0, starty).AddLabelGraphics("Start");
        //    graph.AddNode(1, "Puzzle 1").AddGraphics(0, starty + stepy).AddLabelGraphics("Puzzle 1");

        //    graph.AddEdge(0, 1).AddEdgeGraphics();

        //    var label = string.Empty;
        //    var id = 2;
        //    var previd = 1;
        //    var joinids = new int[3];

        //    for (int i = -1; i <= 1; i++)
        //    {
        //        previd = 1;

        //        for (int j = 2; j < 2 + max_nodes; j++)
        //        {
        //            var prefix = (char)(chara + (i + 1));
        //            var y = starty + (stepy * j);
        //            label = $"Puzzle {prefix}{j}";

        //            graph.AddNode(id, label).AddGraphics(i * offsetx, y).AddLabelGraphics(label);
        //            graph.AddEdge(previd, id).AddEdgeGraphics();
        //            previd = id;
        //            id++;
        //        }

        //        joinids[(i + 1)] = previd;
        //    }

        //    label = $"Puzzle {max_nodes + 2}";
        //    graph.AddNode(id, label).AddGraphics(0, starty + (stepy * (max_nodes + 2))).AddLabelGraphics(label);
        //    graph.AddEdge(joinids[0], id).AddEdgeGraphics();
        //    graph.AddEdge(joinids[1], id).AddEdgeGraphics();
        //    graph.AddEdge(joinids[2], id).AddEdgeGraphics();
        //    previd = id++;

        //    graph.AddNode(id, "Finish").AddGraphics(0, starty + (stepy * (max_nodes + 3))).AddLabelGraphics("Finish");
        //    graph.AddEdge(previd, id).AddEdgeGraphics();

        //    return container;
        //}

        #endregion

        #region dott

        //private static GraphContainer CreateDOTTGraph()
        //{
        //    // work backwards from last puzzle to first
        //    var final = new PuzzleGoal("Get the Super Battery");

        //    // layer 4
        //    var gold = new PuzzleGoal("Get the gold", "Gold", final);
        //    var vinegar = new PuzzleGoal("Get Vinegar", "Vinegar", final);

        //    // layer 3
        //    var fire = new PuzzleGoal("Build a fire in the fireplace", "The Blanket", gold);
        //    var denture = new PuzzleGoal("Dentures to Laverne", "Access to History Room", vinegar);

        //    // layer 2
        //    var cigar = new PuzzleGoal("Get exploding cigar", "Exploding cigar lighter gun", fire);
        //    var laverne = new PuzzleGoal("Laverne access outside", "Access Laverne's chron-o-john", denture);

        //    // Start layer
        //    var dwayne = new PuzzleGoal("Get into Dwayne's room", "Flag Gun", cigar);
        //    var tree = new PuzzleGoal("Get Laverne down from tree", "Laverne", laverne);
        //    var getdenture = new PuzzleGoal("Get Dentures", "Dentures", denture);
        //    var makevinegar = new PuzzleGoal("Make Vinegar", "Vinegar in Time Capsule", vinegar);
        //    var redEd = new PuzzleGoal("Give plans to Red Edison", "Red Edison can build Battery", final);

        //    var start = new PuzzleStart(new List<PuzzleGoal>() { dwayne, tree, getdenture, makevinegar, redEd });

        //    var container = GraphContainer.Create();
        //    var graph = container.CreateGraph(start);

        //    graph.Plot();

        //    return container;
        //}

        //private static GraphContainer CreateMidDOTTGraph()
        //{
        //    var win = new PuzzleGoal("Win the Game");

        //    var tentacleBoss = new PuzzleGoal("Knock out ten Tentacles", "TentacleBoss", win);
        //    var bowlingBall = new PuzzleGoal("Get Bowling Ball", "Bowling Ball", tentacleBoss);
        //    var shrunkenKids = new PuzzleGoal("Back to the Present", "Shrunken Kids", bowlingBall);

        //    var poweredJohn = new PuzzleGoal("Power Hoagie's Chron-o-John", "Hoagie's Chron-o-John Powered", shrunkenKids);
        //    var chargedBattery = new PuzzleGoal("Charge Battery", "Charged Super Battery", poweredJohn);

        //    var kite = new PuzzleGoal("Get Kite", "Kite", chargedBattery);

        //    var labCoat = new PuzzleGoal("Get Lab Coat", "Lab Coat", kite);
        //    var franklinRoom = new PuzzleGoal("Start Storm", "Franklin in his Room", kite);

        //    var soap = new PuzzleGoal("Get Soap", "Soap", franklinRoom);

        //    var superBattery = new PuzzleGoal("Get the Super Battery", "Super Battery", chargedBattery);

        //    var gold = new PuzzleGoal("Get the Gold", "Gold", superBattery);
        //    var buildBattery = new PuzzleGoal("Give plans to Red Edison", "Red Edison can Build Battery", superBattery);
        //    var vinegar = new PuzzleGoal("Get Vinegar", "Vinegar", superBattery);

        //    var blanket = new PuzzleGoal("Build a fire in the fireplace", "The Blanket", gold);
        //    var cigar = new PuzzleGoal("Get exploding cigar", "Exploding Cigar Lighter Gun", blanket);
        //    var flagGun = new PuzzleGoal("Get into Dwayne's room", "Flag Gun", cigar);

        //    var secretLab1 = new PuzzleGoal("Secret Lab 1", "Help Wanted Sign", labCoat);
        //    var hoagie1 = new PuzzleGoal("Battery Plans 1", "Hoagie", labCoat);

        //    var bucketWaterBrush = new PuzzleGoal("Battery Plans 2", "Bucket, Water, Brush", franklinRoom);

        //    var hoagie2 = new PuzzleGoal("Battery Plans 3", "Hoagie", soap);

        //    var chatteringTeeth = new PuzzleGoal("Get Chattering Teeth", "Chattering Teeth", blanket);
        //    var patentLetter = new PuzzleGoal("Battery Plans 4", "Hoagie Patent Letter", flagGun);

        //    var oil = new PuzzleGoal("Battery Plans 5", "Oil", superBattery);

        //    var plans = new PuzzleGoal("Battery Plans 6", "The Super Battery Plans", buildBattery);

        //    var wine = new PuzzleGoal("Battery Plans 7", "Wine", vinegar);

        //    var plansParent = new PuzzleGoal("Find Super Battery Plans", string.Empty,
        //        new List<PuzzleGoal> { hoagie1, bucketWaterBrush, hoagie2, patentLetter, oil, plans, wine });

        //    var secretLab2 = new PuzzleGoal("Secret Lab 2", "Access to Living Room", chatteringTeeth);
        //    var secretLab3 = new PuzzleGoal("Secret Lab 3", "Access to Secret Lab", plansParent);

        //    var labParent = new PuzzleGoal("Find Dr. Fred's Secret Lab", string.Empty,
        //        new List<PuzzleGoal> { secretLab1, secretLab2, secretLab3 });

        //    var begin = new PuzzleGoal("Begin Game", string.Empty, labParent);

        //    var start = new PuzzleStart(begin);

        //    var container = GraphContainer.Create();
        //    var graph = container.CreateGraph(start);

        //    graph.Plot();

        //    return container;
        //}

        #endregion

        #region dig

        private static GraphContainer CreateFullDigGraph()
        {
            var end = new PuzzleGoal("End Game");

            var killGuard = new PuzzleGoal("Kill guard", "Save everyone", end);

            var openEye = new PuzzleGoal("Open eye", "Guard", killGuard);

            var completeStrangeDevice = new PuzzleGoal("Complete strange device", "Powered eye", openEye);

            var crystal = new PuzzleGoal("Crystal", "Crystal", completeStrangeDevice, hidden: true);
            var eyePart = new PuzzleGoal("Eye part", "Eye part", completeStrangeDevice, hidden: true);

            var fixCrystalMachine = new PuzzleGoal("Fix crystal machine", "", new List <PuzzleGoal> {
                crystal, eyePart
            });

            var useMapPanel = new PuzzleGoal("Use map panel", "Eye part", fixCrystalMachine);

            var persuadeCreature = new PuzzleGoal("Persuade creature", "Creator's engraving", useMapPanel);

            var reviveCreature = new PuzzleGoal("Revive creature", "", persuadeCreature);

            var completeEnergyLines = new PuzzleGoal("Complete energy lines", "Completed eye", openEye);

            var activateLightBridge = new PuzzleGoal("Activate light bridge", "Light bridge", completeEnergyLines);

            var accessCathedralSpire1 = new PuzzleGoal("Access cathedral spire", "Access cathedral spire", persuadeCreature, hidden: true);
            var accessCathedralSpire2 = new PuzzleGoal("Access cathedral spire", "Access cathedral spire", activateLightBridge, hidden: true);

            var completeAlcove = new PuzzleGoal("Complete alcove", "", new List <PuzzleGoal> {
                accessCathedralSpire1, accessCathedralSpire2
            });

            var freeBrink = new PuzzleGoal("Free brink", "Brink freed", completeAlcove);

            var fourPlates   = new PuzzleGoal("Four plates", "Four plates", completeAlcove, hidden: true);
            var brinkTrapped = new PuzzleGoal("Brink trapped", "Brink trapped", freeBrink, hidden: true);

            var collectFourPlates = new PuzzleGoal("Collect four plates", "", new List <PuzzleGoal> {
                fourPlates, brinkTrapped
            });

            var accessHiddenIsland = new PuzzleGoal("Access hidden island", "Plate", collectFourPlates);

            var crystals = new PuzzleGoal("", "Crystals", reviveCreature, hidden: true);
            var tablet   = new PuzzleGoal("", "Tablet", accessHiddenIsland, hidden: true);

            var saveRobbins = new PuzzleGoal("Save robbins", "", new List <PuzzleGoal> {
                crystals, tablet
            });

            var distractMonster = new PuzzleGoal("Distract monster", "Rock by waterfall", saveRobbins);

            var recruitBrink = new PuzzleGoal("Recruit brink", "Brink in position", distractMonster);

            var distractBrink = new PuzzleGoal("Distract brink", "Stolen crystals", recruitBrink);

            var reviveCreature2 = new PuzzleGoal("Revive creature", "Flashlight", distractBrink);

            var openPyramid = new PuzzleGoal("Open pyramid", "Crystal", reviveCreature2);

            var openDoor = new PuzzleGoal("Open door", "Access door", openPyramid);

            var killGuard2 = new PuzzleGoal("Kill guard", "Access door", openDoor);

            var moveSlab = new PuzzleGoal("Move slab", "Crystal", killGuard2);

            var revealPassage = new PuzzleGoal("Reveal passage", "", moveSlab);

            var mapPanel = new PuzzleGoal("Map panel", "Discover secret under tomb", moveSlab);

            var activateLightBridge2 = new PuzzleGoal("Activate light bridge", "Light bridge", completeEnergyLines);

            var turnOnLights = new PuzzleGoal("Turn on lights", "Light source under earth", revealPassage);

            var openShutter = new PuzzleGoal("Open shutter", "Let light through", revealPassage);

            var alignMoons = new PuzzleGoal("Align moons", "Light slab", moveSlab);

            var accessMapSpire1 = new PuzzleGoal("", "Access map spire", mapPanel, hidden: true);
            var accessMapSpire2 = new PuzzleGoal("", "Access map spire", activateLightBridge2, hidden: true);

            var openMishapedDoor = new PuzzleGoal("Open mishaped door", "", new List <PuzzleGoal> {
                accessMapSpire1, accessMapSpire2
            });

            var fixOpenDoor1 = new PuzzleGoal("", "Sceptres", alignMoons, hidden: true);
            var fixOpenDoor2 = new PuzzleGoal("", "Plate", collectFourPlates, hidden: true);
            var fixOpenDoor3 = new PuzzleGoal("", "Green rod", openMishapedDoor, hidden: true);

            var fixOpenDoor = new PuzzleGoal("Fix/Open door", "", new List <PuzzleGoal> {
                fixOpenDoor1, fixOpenDoor2, fixOpenDoor3
            });

            var findRatsLair = new PuzzleGoal("Find rat's lair", "Door piece", fixOpenDoor);

            var bugRat = new PuzzleGoal("Bug rat", "Alien device", findRatsLair);

            var fashionTrap = new PuzzleGoal("Fashion trap", "Rat", bugRat);

            var activateLightBridge3 = new PuzzleGoal("Activate light bridge", "Light bridge", completeEnergyLines);

            var discoverChamber = new PuzzleGoal("Discover chamber", "", new List <PuzzleGoal> {
                turnOnLights, openShutter
            });

            var digOutPlate = new PuzzleGoal("Dig out plate", "", discoverChamber);

            var shovel            = new PuzzleGoal("Shovel", "Shovel", digOutPlate, hidden: true);
            var accessLightBridge = new PuzzleGoal("Access light bridge", "Access light bridge", activateLightBridge2, hidden: true);

            var accessTombSpire = new PuzzleGoal("Access tomb spire", "", new List <PuzzleGoal> {
                shovel, accessLightBridge
            });

            var openStarDoor = new PuzzleGoal("Open Star door", "Access tram", accessTombSpire);

            var energiseCrystals = new PuzzleGoal("Energise crystals", "Power tram", accessTombSpire);

            var passAirlock = new PuzzleGoal("Pass airlock", "Access command centre", energiseCrystals);

            var openReturnPath = new PuzzleGoal("Open return path");

            var jumpGap1 = new PuzzleGoal("", "Blue rod", energiseCrystals, hidden: true);
            var jumpGap2 = new PuzzleGoal("", "Rod", openShutter, hidden: true);
            var jumpGap3 = new PuzzleGoal("", "Shovel", openReturnPath, hidden: true);
            var jumpGap4 = new PuzzleGoal("", "Panel cover", fixOpenDoor, hidden: true);
            var jumpGap5 = new PuzzleGoal("", "Access cave", findRatsLair, hidden: true);
            var jumpGap6 = new PuzzleGoal("", "Trap parts", fashionTrap, hidden: true);
            var jumpGap7 = new PuzzleGoal("", "Access lightbridge", activateLightBridge3, hidden: true);

            var jumpGap = new PuzzleGoal("Jump gap", "", new List <PuzzleGoal> {
                jumpGap1, jumpGap2, jumpGap3, jumpGap4, jumpGap5, jumpGap6, jumpGap7
            });

            var openDiamondDoor = new PuzzleGoal("Open diamond door", "Access planetarium spire", jumpGap);

            var orangeRod = new PuzzleGoal("", "Orange rod", openDiamondDoor, hidden: true);
            var plate2    = new PuzzleGoal("", "Plate", collectFourPlates, hidden: true);

            var killMonsterToAccessWater = new PuzzleGoal("Kill monster to access water", "", new List <PuzzleGoal> {
                orangeRod, plate2
            });

            var reviveBoobyTrapTurtle = new PuzzleGoal("Revive/boobytrap turtle", "Boobytrapped turtle", killMonsterToAccessWater);

            var openWeakenedDoor = new PuzzleGoal("Open weakened door", "Canister", reviveBoobyTrapTurtle);

            var reviveBrink = new PuzzleGoal("Revive Brink", "", openWeakenedDoor);

            var activateLightBridge4 = new PuzzleGoal("Activate light bridge", "Light bridge", completeEnergyLines);

            var openTriangleDoor1 = new PuzzleGoal("", "Red rod", openStarDoor, hidden: true);
            var openTriangleDoor2 = new PuzzleGoal("", "Red rod", mapPanel, hidden: true);
            var openTriangleDoor3 = new PuzzleGoal("", "Glowing crystals", reviveBrink, hidden: true);
            var openTriangleDoor4 = new PuzzleGoal("", "Fossil", reviveBoobyTrapTurtle, hidden: true);
            var openTriangleDoor5 = new PuzzleGoal("", "Access museum spire", activateLightBridge4, hidden: true);

            var openTriangleDoor = new PuzzleGoal("Jump gap", "Panel cover", new List <PuzzleGoal> {
                openTriangleDoor1, openTriangleDoor2, openTriangleDoor3, openTriangleDoor4, openTriangleDoor5
            });

            var powerMishapedDoorPanel = new PuzzleGoal("Power mishaped door panel", "Powered door", openMishapedDoor);

            var restorePower1 = new PuzzleGoal("", "Power doors", openTriangleDoor, hidden: true);
            var restorePower2 = new PuzzleGoal("", "Revealed power line", powerMishapedDoorPanel, hidden: true);

            var restorePower = new PuzzleGoal("Restore Power", "", new List <PuzzleGoal> {
                restorePower1, restorePower2
            });

            var removeDoorPanel = new PuzzleGoal("Remove door panel", "Broken controls", powerMishapedDoorPanel);

            var plate1            = new PuzzleGoal("Plate", "Plate", collectFourPlates, hidden: true);
            var blueCrystal       = new PuzzleGoal("Blue crystal", "Blue crystal", turnOnLights, hidden: true);
            var accessTunnel      = new PuzzleGoal("Access tunnel", "Access tunnel", passAirlock, hidden: true);
            var purpleRod         = new PuzzleGoal("Purple rod", "Purple rod", openTriangleDoor, hidden: true);
            var accessPowerSource = new PuzzleGoal("Access power source", "Access power source", restorePower, hidden: true);
            var accessNexus       = new PuzzleGoal("Access nexus", "Access nexus", removeDoorPanel, hidden: true);

            var findNexus = new PuzzleGoal("Find Nexus", "", new List <PuzzleGoal> {
                plate1, blueCrystal, accessTunnel, purpleRod, accessPowerSource, accessNexus
            });

            var goldRod         = new PuzzleGoal("Gold rod", "Gold rod", openPyramid, hidden: true);
            var goldEngravedRod = new PuzzleGoal("Gold engraved rod", "Gold engraved rod", openDoor, hidden: true);
            var hole            = new PuzzleGoal("Hole", "Hole", findNexus, hidden: true);
            var wire            = new PuzzleGoal("Wire", "Wire", powerMishapedDoorPanel, hidden: true);

            var pullWire = new PuzzleGoal("Pull wire", "", new List <PuzzleGoal> {
                goldRod, goldEngravedRod, hole, wire
            });

            var findSmallMound = new PuzzleGoal("Find small mound", "Bracelet", bugRat);

            var tusk    = new PuzzleGoal("Tusk", "Tusk", removeDoorPanel, hidden: true);
            var jawBone = new PuzzleGoal("Jawbone", "Jawbone", freeBrink, hidden: true);

            var digGrave = new PuzzleGoal("Dig grave", "", new List <PuzzleGoal> {
                tusk, jawBone
            });

            var accessWreck = new PuzzleGoal("Access wreck", "Access wreck", pullWire, hidden: true);
            var alienDevice = new PuzzleGoal("Alien device", "Alien device", findSmallMound, hidden: true);
            var shovel2     = new PuzzleGoal("Shovel", "Shovel", digGrave, hidden: true);

            var travelToAlienPlanet = new PuzzleGoal("Travel to alien planet", "", new List <PuzzleGoal> {
                accessWreck, alienDevice, shovel2
            });

            var accessAsteroidInterior = new PuzzleGoal("Access asteroid interior", "Metal plates", travelToAlienPlanet);

            var plantBombAlpha = new PuzzleGoal("Plant bomb alpha", "", accessAsteroidInterior);
            var plantBombBeta  = new PuzzleGoal("Plant bomb beta", "", accessAsteroidInterior);

            var releasePigA1 = new PuzzleGoal("", "Bomb", plantBombAlpha, hidden: true);
            var releasePigA2 = new PuzzleGoal("", "Digger", plantBombAlpha, hidden: true);
            var releasePigA3 = new PuzzleGoal("", "Arming key", plantBombAlpha, hidden: true);

            var releasePigB1 = new PuzzleGoal("", "Bomb", plantBombBeta, hidden: true);
            var releasePigB2 = new PuzzleGoal("", "Shovel", plantBombBeta, hidden: true);
            var releasePigB3 = new PuzzleGoal("", "Arming key", plantBombBeta, hidden: true);

            var releasePig = new PuzzleGoal("Release pig", "", new List <PuzzleGoal> {
                releasePigA1, releasePigA2, releasePigA3, releasePigB1, releasePigB2, releasePigB3
            });


            var theDigBegins = new PuzzleGoal("The Dig begins", "", releasePig);

            var start = new PuzzleStart(theDigBegins);

            var container = GraphContainer.Create();
            var graph     = container.CreateGraph(start);

            graph.Plot();

            return(container);
        }
 public Analyser(GraphContainer <TNodeId, TNodeData, TEdgeId, TEdgeData> graphContainer)
 {
     this.graphContainer = graphContainer;
     graph = new Graph <TNodeId, TNodeData, TEdgeId, TEdgeData>(graphContainer);
 }
 /// <summary>
 /// Allows the game component to perform any initialization it needs to before starting
 /// to run.  This is where it can query for any required services and load content.
 /// </summary>
 public override void Initialize()
 {
     this.Content = Game.Content;
     this.outputPreview = new OutputPreview(new Vector2(700f, 200f));
     this.AddChild(outputPreview);
     this.NodeGraph = new GraphContainer(new Rectangle(0, 0, 600, 600));
     this.AddChild(NodeGraph);
     base.Initialize();
 }
Beispiel #20
0
        public static INode[][] ExtractGraphNodeChains(GraphContainer container)
        {
            var links = container.Links
                        .Where(x => x.TargetNodeGuid != null && x.SourceNodeGuid != null)
                        .ToArray();
            var target2SourceDictionary = new Dictionary <string, string>();
            var source2TargetDictionary = new Dictionary <string, string>();
            var nodeDictionary          = new Dictionary <string, INode>();

            foreach (var link in links)
            {
                // edge represents node1:output -> node2:input
                target2SourceDictionary[link.TargetNodeGuid] = link.SourceNodeGuid;
                source2TargetDictionary[link.SourceNodeGuid] = link.TargetNodeGuid;
            }

            foreach (var node in container.Nodes)
            {
                nodeDictionary[node.Guid] = node.Node;
            }

            var roots = new List <string>();

            foreach (var entry in target2SourceDictionary)
            {
                var input = entry.Value;
                if (!target2SourceDictionary.ContainsKey(input))
                {
                    roots.Add(entry.Value);
                }
            }

            var results = new List <INode[]>();

            for (var i = 0; i < roots.Count; i++)
            {
                var cursorGuid = roots[i];
                var result     = new List <INode>();

                result.Add(nodeDictionary[cursorGuid]);
                for (var x = 0; x < nodeDictionary.Count; x++)
                {
                    if (!source2TargetDictionary.ContainsKey(cursorGuid))
                    {
                        break;
                    }
                    cursorGuid = source2TargetDictionary[cursorGuid];
                    result.Add(nodeDictionary[cursorGuid]);
                }

                results.Add(result.ToArray());
            }

            var singleNodes = ExtractSingleGraphNodeChains(container, nodeDictionary);

            foreach (var node in singleNodes)
            {
                results.Add(new INode[] { node });
            }

            return(results.ToArray());
        }
Beispiel #21
0
    // Populate attributes
    private void RegisterAttributes()
    {
        MonoBehaviour[]         sceneObjects = FindObjectsOfType <MonoBehaviour>();
        HashSet <MonoBehaviour> uniqueAttributeContainers = new HashSet <MonoBehaviour>();

        foreach (MonoBehaviour mb in sceneObjects)
        {
            Type monoType = mb.GetType();

            // Fields
            {
                // Retreive the fields from the mono instance
                FieldInfo[] objectFields = monoType.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);

                // search all fields/properties for the [DebugGUIVar] attribute
                for (int i = 0; i < objectFields.Length; i++)
                {
                    if (Attribute.GetCustomAttribute(objectFields[i], typeof(DebugGUIPrintAttribute)) is DebugGUIPrintAttribute)
                    {
                        uniqueAttributeContainers.Add(mb);
                        if (!debugGUIPrintFields.ContainsKey(monoType))
                        {
                            debugGUIPrintFields.Add(monoType, new HashSet <FieldInfo>());
                        }
                        if (!debugGUIPrintProperties.ContainsKey(monoType))
                        {
                            debugGUIPrintProperties.Add(monoType, new HashSet <PropertyInfo>());
                        }

                        debugGUIPrintFields[monoType].Add(objectFields[i]);
                    }

                    if (Attribute.GetCustomAttribute(objectFields[i], typeof(DebugGUIGraphAttribute)) is DebugGUIGraphAttribute graphAttribute)
                    {
                        // Can't cast to float so we don't bother registering it
                        if (objectFields[i].GetValue(mb) as float? == null)
                        {
                            Debug.LogError(string.Format("Cannot cast {0}.{1} to float. This member will be ignored.", monoType.Name, objectFields[i].Name));
                            continue;
                        }

                        uniqueAttributeContainers.Add(mb);
                        if (!debugGUIGraphFields.ContainsKey(monoType))
                        {
                            debugGUIGraphFields.Add(monoType, new HashSet <FieldInfo>());
                        }
                        if (!debugGUIGraphProperties.ContainsKey(monoType))
                        {
                            debugGUIGraphProperties.Add(monoType, new HashSet <PropertyInfo>());
                        }

                        debugGUIGraphFields[monoType].Add(objectFields[i]);
                        GraphContainer graph =
                            new GraphContainer(graphWidth, graphHeight)
                        {
                            name      = objectFields[i].Name,
                            max       = graphAttribute.Max,
                            min       = graphAttribute.Min,
                            group     = graphAttribute.Group,
                            autoScale = graphAttribute.AutoScale
                        };
                        if (!graphAttribute.Color.Equals(default))
Beispiel #22
0
        private bool SaveNodes(GraphContainer dialogueContainerObject)
        {
            if (!Edges.Any())
            {
                return(false);
            }
            var connectedSockets = Edges;

            /*
             * for (var i = 0; i < connectedSockets.Count(); i++)  //Links
             * {
             *  var outputNode = (connectedSockets[i].output.node as ContentNode);
             *  var inputNode = (connectedSockets[i].input.node as ContentNode);
             *
             *  ScriptableObject content = null;
             *
             *  if (outputNode.LinksContent.Count > 0)
             *  {
             *      var pair = outputNode.LinksContent.First(x => x.OwnerGUID == outputNode.GUID);
             *      outputNode.LinksContent.Remove(pair);
             *      content = UnityEngine.Object.Instantiate(pair.Content);
             *      content.name = i.ToString();
             *      AssetDatabase.AddObjectToAsset(content, dialogueContainerObject);
             *      dialogueContainerObject.LinksContent.Add(new ContentPair(outputNode.GUID, content));
             *  }
             *  dialogueContainerObject.NodeLinks.Add(new ContentLinkData
             *  {
             *      BaseNodeGUID = outputNode.GUID,
             *      PortName = connectedSockets[i].output.portName,
             *      TargetNodeGUID = inputNode.GUID,
             *      Content = content
             *  });
             * }*/

            foreach (var node in Nodes)  //Nodos
            {
                if (!node.EntryPoint)
                {
                    var nodeContent = UnityEngine.Object.Instantiate(node.Content);
                    nodeContent.name = node.title;
                    AssetDatabase.AddObjectToAsset(nodeContent, dialogueContainerObject);
                    dialogueContainerObject.NodesContent.Add(new ContentPair(node.GUID, nodeContent));

                    dialogueContainerObject.DialogueNodeData.Add(new ContentNodeData
                    {
                        GUID     = node.GUID,
                        Position = node.GetPosition().position,
                        Content  = nodeContent
                    });
                }

                var edges = connectedSockets.Where(x => x.output.node == node).ToList();
                for (int i = 0; i < edges.Count; i++)
                {
                    ScriptableObject linkContent = null;
                    if (node.LinksContent.Count > 0)
                    {
                        var pair = node.LinksContent[i];
                        linkContent      = UnityEngine.Object.Instantiate(pair.Content);
                        linkContent.name = i.ToString();
                        AssetDatabase.AddObjectToAsset(linkContent, dialogueContainerObject);
                        dialogueContainerObject.LinksContent.Add(new ContentPair(node.GUID, linkContent));
                    }

                    var inputNode = (edges[i].input.node as ContentNode);
                    Debug.Log(edges[i].output.portName);
                    dialogueContainerObject.NodeLinks.Add(new ContentLinkData
                    {
                        BaseNodeGUID   = node.GUID,
                        PortName       = edges[i].output.portName,
                        TargetNodeGUID = inputNode.GUID,
                        Content        = linkContent
                    });
                }
            }



            return(true);



            foreach (var node in Nodes.Where(node => !node.EntryPoint))  //Nodos
            {
                var content = UnityEngine.Object.Instantiate(node.Content);
                content.name = node.title;
                AssetDatabase.AddObjectToAsset(content, dialogueContainerObject);
                dialogueContainerObject.NodesContent.Add(new ContentPair(node.GUID, content));

                dialogueContainerObject.DialogueNodeData.Add(new ContentNodeData
                {
                    GUID     = node.GUID,
                    Position = node.GetPosition().position,
                    Content  = content
                });
            }
            return(true);
        }
Beispiel #23
0
 public string GenerateXML(GenerateParameters parameters)
 {
     return(GraphContainer.GenerateXML(parameters));
 }
Beispiel #24
0
 private void SaveExposedProperties(GraphContainer dialogueContainer)
 {
     dialogueContainer.ExposedProperties.Clear();
     dialogueContainer.ExposedProperties.AddRange(_graphView.ExposedProperties);
 }