73 lines
2.0 KiB
C#
73 lines
2.0 KiB
C#
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;
|
|
}
|
|
}
|
|
|
|
} |