Files
godot-------/Script/Generate/PlayerGenerate.cs
m0_75251201 7700703099 初次提交
2025-07-12 11:30:22 +08:00

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;
}
}
}