mirror of
http://47.107.252.169:3000/Roguelite-Game-Developing-Team/Gen_Hack-and-Slash-Roguelite.git
synced 2025-11-20 05:17:13 +08:00
(client) feat:支持定义实体的碰撞体大小和偏移;建筑支持定义实体建筑和瓦片建筑,建筑支持指定按钮回调;添加存档管理器;Dev支持设置是否暂停;实体允许定义事件组;添加基地界面 (#57)
Co-authored-by: m0_75251201 <m0_75251201@noreply.gitcode.com> Reviewed-on: http://47.107.252.169:3000/Roguelite-Game-Developing-Team/Gen_Hack-and-Slash-Roguelite/pulls/57
This commit is contained in:
@@ -355,8 +355,7 @@ namespace UI
|
||||
|
||||
var nodeUI = Instantiate(skillTreeNodeUIPrefab, rectTransform);
|
||||
nodeUI.name = $"SkillNode_{skillDef.defName}";
|
||||
nodeUI.skillTreeDef = skillDef;
|
||||
// 暂时不设置位置,稍后统一布局
|
||||
nodeUI.Init(skillDef);
|
||||
layerNodesUI.Add(nodeUI);
|
||||
}
|
||||
|
||||
@@ -383,7 +382,7 @@ namespace UI
|
||||
|
||||
foreach (var nodeUI in layerNodes)
|
||||
{
|
||||
if (nodeUI.skillTreeDef == null)
|
||||
if (nodeUI.SkillTreeDefine == null)
|
||||
{
|
||||
Debug.LogWarning($"[技能树] 技能树节点UI '{nodeUI.name}' 没有关联的技能定义。跳过此节点的尺寸计算。");
|
||||
continue; // 无法计算,跳过此节点
|
||||
@@ -391,7 +390,7 @@ namespace UI
|
||||
|
||||
// 精确计算连接线数量:获取所有父节点,并筛选出属于当前tag的父节点
|
||||
var actualLinkLineCount = 0;
|
||||
var directParents = SkillTreeManager.Instance.GetAllDirectParents(nodeUI.skillTreeDef);
|
||||
var directParents = SkillTreeManager.Instance.GetAllDirectParents(nodeUI.SkillTreeDefine);
|
||||
if (directParents != null)
|
||||
{
|
||||
// 仅计算那些来自当前技能图谱内部的、具有指定tag的父节点作为连接线
|
||||
@@ -528,7 +527,7 @@ namespace UI
|
||||
Debug.Log($"{layerX},{nodeY}");
|
||||
nodeY += NODE_VERTICAL_SPACING +
|
||||
node.GetRequiredNodeHeight(Managers.SkillTreeManager.Instance
|
||||
.GetAllDirectParents(node.skillTreeDef).Count);
|
||||
.GetAllDirectParents(node.SkillTreeDefine).Count);
|
||||
}
|
||||
|
||||
layerX += NODE_HORIZONTAL_SPACING + layerSize.totalWidth;
|
||||
@@ -543,9 +542,9 @@ namespace UI
|
||||
{
|
||||
foreach (var nodeUI in j)
|
||||
{
|
||||
if(string.IsNullOrEmpty(nodeUI.skillTreeDef.position))
|
||||
if(string.IsNullOrEmpty(nodeUI.SkillTreeDefine.position))
|
||||
continue;
|
||||
var pos=Utils.StringUtils.StringToVector2(nodeUI.skillTreeDef.position);
|
||||
var pos=Utils.StringUtils.StringToVector2(nodeUI.SkillTreeDefine.position);
|
||||
nodeUI.rectTransform.anchoredPosition = pos;
|
||||
}
|
||||
}
|
||||
@@ -559,24 +558,24 @@ namespace UI
|
||||
var nodeDefToNodeUI = nodes
|
||||
.SelectMany(middle => middle)
|
||||
.SelectMany(inner => inner)
|
||||
.Where(node => node != null && node.skillTreeDef != null)
|
||||
.GroupBy(node => node.skillTreeDef)
|
||||
.Where(node => node != null && node.SkillTreeDefine != null)
|
||||
.GroupBy(node => node.SkillTreeDefine)
|
||||
.ToDictionary(g => g.Key, g => g.First());
|
||||
foreach (var node in sortedNodes)
|
||||
{
|
||||
var parentOutputPoint = new List<Vector2>();
|
||||
var parentNodes=SkillTreeManager.Instance.GetAllDirectParents(node.skillTreeDef);
|
||||
var parentNodes=SkillTreeManager.Instance.GetAllDirectParents(node.SkillTreeDefine);
|
||||
ReorderParentNodesBySortedNodesAlternative(sortedNodes,parentNodes);
|
||||
foreach (var parentNodeDef in parentNodes)
|
||||
{
|
||||
var index = GetChildOrderUnderParent(sortedNodes, node.skillTreeDef, parentNodeDef, nodeDefToNodeUI);
|
||||
var index = GetChildOrderUnderParent(sortedNodes, node.SkillTreeDefine, parentNodeDef, nodeDefToNodeUI);
|
||||
var parentNode=nodeDefToNodeUI[parentNodeDef];
|
||||
var outputCount = SkillTreeManager.Instance.GetAllDirectChildren(parentNodeDef).Count;
|
||||
var point= parentNode.GetOutputPosition(outputCount,index);
|
||||
parentOutputPoint.Add(point);
|
||||
}
|
||||
|
||||
node.Init(parentOutputPoint.ToArray(), node.skillTreeDef.label);
|
||||
node.LinkLine(parentOutputPoint.ToArray());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -624,16 +623,16 @@ namespace UI
|
||||
var orderedSiblingsUI = sortedNodes
|
||||
.Where(nodeUI =>
|
||||
nodeUI != null &&
|
||||
nodeUI.skillTreeDef != null &&
|
||||
allDirectChildrenDefs.Contains(nodeUI.skillTreeDef) &&
|
||||
nodeDefToNodeUI.ContainsKey(nodeUI.skillTreeDef) // 确保有UI对象映射
|
||||
nodeUI.SkillTreeDefine != null &&
|
||||
allDirectChildrenDefs.Contains(nodeUI.SkillTreeDefine) &&
|
||||
nodeDefToNodeUI.ContainsKey(nodeUI.SkillTreeDefine) // 确保有UI对象映射
|
||||
)
|
||||
.ToList();
|
||||
// 4. 查找 childDef 在 orderedSiblingsUI 中的索引
|
||||
// 遍历找到 childDef 对应的 UI 节点
|
||||
for (var i = 0; i < orderedSiblingsUI.Count; i++)
|
||||
{
|
||||
if (orderedSiblingsUI[i].skillTreeDef == childDef)
|
||||
if (orderedSiblingsUI[i].SkillTreeDefine == childDef)
|
||||
{
|
||||
return i; // 返回 0-based 索引
|
||||
}
|
||||
@@ -653,7 +652,7 @@ namespace UI
|
||||
|
||||
foreach (var node in sortedNodes)
|
||||
{
|
||||
var def = node.skillTreeDef;
|
||||
var def = node.SkillTreeDefine;
|
||||
if (def != null && set.Remove(def)) // 存在则添加并从集合中移除,避免重复
|
||||
{
|
||||
result.Add(def);
|
||||
|
||||
Reference in New Issue
Block a user