using System; using System.Collections.Generic; using System.Linq; using System.Xml.Linq; namespace Data { public class PawnDef : Define { public AttributesDef attributes; public string aiController; public string texturePath = null; public DrawingOrderDef drawingOrder_down, drawingOrder_up, drawingOrder_left, drawingOrder_right; public BehaviorTreeDef behaviorTree; public AffiliationDef affiliation; public DrawingOrderDef GetDrawingOrder(Orientation orientation) { // 定义一个临时变量用于存储结果 DrawingOrderDef result = null; // 根据传入的 Orientation 获取对应的 DrawingOrderDef switch (orientation) { case Orientation.Down: result = drawingOrder_down; break; case Orientation.Up: result = drawingOrder_up; break; case Orientation.Left: result = drawingOrder_left; break; case Orientation.Right: result = drawingOrder_right; break; default: throw new ArgumentException("Invalid orientation value."); } // 如果当前方向的结果为空,则尝试用 drawingOrder_down 填充 if (result == null) result = drawingOrder_down; // 如果 drawingOrder_down 仍然为空,则尝试用其他非空方向填充 if (result == null) result = drawingOrder_up ?? drawingOrder_left ?? drawingOrder_right; return result; } } public class MonsterDef:PawnDef { } public class BehaviorTreeDef : Define { public BehaviorTreeDef[] childTree; public string className="Selector"; public string condition; public override bool Init(XElement xmlDef) { base.Init(xmlDef); // 从当前节点获取className和condition属性 className = xmlDef.Attribute("className")?.Value ?? className; condition = xmlDef.Attribute("condition")?.Value; var nodes = xmlDef.Elements("Node"); if (!nodes.Any()) return true; // 没有子节点也是有效的 List children = new(); foreach (var node in nodes) { var childNode = new BehaviorTreeDef(); if (!childNode.Init(node)) return false; children.Add(childNode); } childTree = children.ToArray(); return true; } } public class AffiliationDef : Define { } }