Advertisement
Guest User

Untitled

a guest
Oct 10th, 2024
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.59 KB | Source Code | 0 0
  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12. */
  13. using System;
  14. using System.Collections.Generic;
  15. using Godot;
  16. using levels;
  17.  
  18. namespace Graph
  19. {
  20.     public partial class TheGraphSimply : Node2D
  21.     {
  22.         string abs_name = "graph_node";
  23.         Node2D abs_rootNode;
  24.         public string name;
  25.         public static List<TheGraphSimply> graph;
  26.         public static TheGraphSimply headNode;
  27.  
  28.         public Node2D[] arrRef;
  29.  
  30.         public Node2D levelNode;
  31.  
  32.         string[] verties = { "balcony", "entrance", "kitchen", "mainroom", "room_1" };
  33.  
  34.         Dictionary<string, int> myDictionary;
  35.  
  36.         PackedScene scene;
  37.  
  38.         public string[] Con = new string[4]; // Ensure that this array has enough elements
  39.  
  40.         [Export] string[] arr;
  41.  
  42.         public override void _Ready()
  43.         {
  44.             GD.Print("LOLLL");
  45.             Console.WriteLine("LOL");
  46.  
  47.             abs_rootNode = this;
  48.             headNode = null;
  49.  
  50.             graph = new List<TheGraphSimply>(verties.Length); // Initialize graph with capacity for all nodes
  51.  
  52.             // Initialize the dictionary with indices for vertices
  53.             myDictionary = new Dictionary<string, int>
  54.             {
  55.                 { "balcony", 0 },
  56.                 { "entrance", 1 },
  57.                 { "kitchen", 2 },
  58.                 { "mainroom", 3 },
  59.                 { "room_1", 4 }
  60.             };
  61.  
  62.             // Initialize graph with null elements
  63.             for (int i = 0; i < verties.Length; i++)
  64.             {
  65.                 graph.Add(null); // Add null initially
  66.             }
  67.  
  68.             // Now for vertices initialization in the graph
  69.             createGraph();
  70.  
  71.             // Print all children for debugging
  72.             PrintAllChildren();
  73.         }
  74.  
  75.         public void createGraph()
  76.         {
  77.             for (int i = 0; i < verties.Length; i++)
  78.             {
  79.                 int index = myDictionary[verties[i]];
  80.                 GD.Print("Index: " + index);
  81.  
  82.                 TheGraphSimply node = graph[index];
  83.                 if (node == null)
  84.                 {
  85.                     createLevel(verties[i]); // Create level if the node is not yet initialized
  86.                 }
  87.  
  88.                 // Ensure Con array has proper length, and process each connected node
  89.                 if (graph[i] != null && graph[i].Con != null)
  90.                 {
  91.                     for (int j = 0; j < graph[i].Con.Length; j++)
  92.                     {
  93.                         GD.Print("Processing connection: " + graph[i].Con[j]);
  94.  
  95.                         if (!string.IsNullOrEmpty(graph[i].Con[j]))
  96.                         {
  97.                             string connectedVertex = graph[i].Con[j];
  98.                             int connectedIndex = myDictionary[connectedVertex];
  99.                             TheGraphSimply node2 = graph[connectedIndex];
  100.  
  101.                             if (node2 == null)
  102.                             {
  103.                                 createLevel(connectedVertex);
  104.                             }
  105.  
  106.                             if (arrRef != null && arrRef.Length > j)
  107.                             {
  108.                                 arrRef[j] = node2; // Ensure arrRef is not null and has enough space
  109.                             }
  110.                         }
  111.                         else
  112.                         {
  113.                             GD.Print("Empty or null string in Con array");
  114.                         }
  115.                     }
  116.                 }
  117.             }
  118.         }
  119.  
  120.         void createLevel(string input)
  121.         {
  122.             string name = input.ToLower();
  123.  
  124.             switch (name)
  125.             {
  126.                 case "kitchen":
  127.                     createAndInstantiateLevel<Kitchen>(name);
  128.                     break;
  129.  
  130.                 case "mainroom":
  131.                     createAndInstantiateLevel<Mainroom>(name);
  132.                     break;
  133.  
  134.                 case "balcony":
  135.                     createAndInstantiateLevel<Balcony>(name);
  136.                     break;
  137.  
  138.                 case "entrance":
  139.                     createAndInstantiateLevel<Entrance>(name);
  140.                     break;
  141.  
  142.                 case "room_1":
  143.                     createAndInstantiateLevel<Room1>(name);
  144.                     break;
  145.  
  146.                 default:
  147.                     GD.Print("Invalid input for level creation: " + name);
  148.                     break;
  149.             }
  150.         }
  151.  
  152.         private void createAndInstantiateLevel<T>(string name) where T : TheGraphSimply, new()
  153.         {
  154.             GD.Print("Creating level: " + name);
  155.  
  156.             // Load the scene for the level
  157.             string scenePath = "res://" + name + ".tscn";
  158.             scene = (PackedScene)GD.Load(scenePath);
  159.             if (scene != null)
  160.             {
  161.                 Node2D node = (Node2D)scene.Instantiate();
  162.                 AddChild(node); // Add scene to the graph
  163.  
  164.                 int index = myDictionary[name];
  165.                 graph[index] = new T(); // Assign a new level instance to the graph
  166.  
  167.                 // Update arr and set levelNode
  168.                 arr[index] = graph[index].name;
  169.                 if (node is Node2D)
  170.                 {
  171.                     graph[index].levelNode = GetLastChild();
  172.                 }
  173.                 else
  174.                 {
  175.                     GD.Print("Error: Child is not of proper file format");
  176.                 }
  177.             }
  178.             else
  179.             {
  180.                 GD.Print("Error: Scene " + scenePath + " is null");
  181.             }
  182.         }
  183.  
  184.         public Node2D GetLastChild()
  185.         {
  186.             int childCount = GetChildCount();
  187.             if (childCount > 0)
  188.             {
  189.                 return (Node2D)GetChild(childCount - 1); // Get the last child
  190.             }
  191.             return null; // Return null if there are no children
  192.         }
  193.  
  194.         public void PrintAllChildren()
  195.         {
  196.             int childCount = GetChildCount();
  197.             GD.Print($"Node {Name} has {childCount} children:");
  198.  
  199.             for (int i = 0; i < childCount; i++)
  200.             {
  201.                 Node child = GetChild(i);
  202.                 GD.Print("Child name: " + child.Name);
  203.             }
  204.         }
  205.  
  206.         public override void _Process(double delta)
  207.         {
  208.             // Traversal or other logic can go here
  209.         }
  210.     }
  211. }
  212.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement