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>(); }
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 })); }
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(); }
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(); }
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 })); }
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 }); } }
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); } }
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"); }
// // // // // // // // // // // // // // // // // // // // // // // // // // // // // 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); }
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); }
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)); }
// 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++; } } }
public string DigExample() => GraphContainer.DigExample();
// 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]++; } }
//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(); }
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()); }
// 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))
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); }
public string GenerateXML(GenerateParameters parameters) { return(GraphContainer.GenerateXML(parameters)); }
private void SaveExposedProperties(GraphContainer dialogueContainer) { dialogueContainer.ExposedProperties.Clear(); dialogueContainer.ExposedProperties.AddRange(_graphView.ExposedProperties); }