using Cosmobox.Def; using Godot; using System; using System.Linq; namespace Cosmobox { public partial class PlayerGenerate : Node2D { public override void _Ready() { InitResource.instance.defines.TryGetValue("DrawingOrder", out var defines); if (defines != null) { GenerateNode(defines.First().Value as DrawingOrder,this); } } public bool GenerateNode(DrawingOrder drawingOrder, Node parentNode) { if (drawingOrder == null) { GD.PrintErr("DrawingOrder is null"); return false; } if (parentNode == null) { GD.PrintErr("Parent node is null"); return false; } // 遍历 DrawingOrder 的 DrawNodes 列表 foreach (var drawNode in drawingOrder.DrawNodes) { if (!CreateNode(drawNode, parentNode)) { GD.PrintErr($"Failed to create node: {drawNode.NodeName}"); return false; } } return true; } private bool CreateNode(DrawNode drawNode, Node parentNode) { if (string.IsNullOrEmpty(drawNode.NodeName)) { GD.PrintErr("NodeName is null or empty"); return false; } // 创建新节点并添加到父节点 var newNode = new ColorRect(); newNode.Name = drawNode.NodeName; parentNode.AddChild(newNode); // 如果存在子节点,递归创建 foreach (var child in drawNode.Children) { if (!CreateNode(child, newNode)) { GD.PrintErr($"Failed to create child node: {child.NodeName}"); return false; } } return true; } } }