(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:
2025-09-28 15:02:57 +08:00
parent 87a8abe86c
commit aff747be17
232 changed files with 39203 additions and 4161 deletions

View File

@@ -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);