mirror of
http://47.107.252.169:3000/Roguelite-Game-Developing-Team/Gen_Hack-and-Slash-Roguelite.git
synced 2025-11-20 06:47:14 +08:00
(client) feat:健康给予,路径优化,结算界面,商店界面 (#60)
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/60
This commit is contained in:
@@ -1,24 +1,22 @@
|
||||
using System.Collections.Generic;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace UI
|
||||
{
|
||||
/// <summary>
|
||||
/// 技能节点入口连接线UI管理器。
|
||||
/// 负责生成、管理和清除技能节点进入线的UI表示。
|
||||
/// 这些线通常连接技能树中的多个起始点到一个公共的出口区域。
|
||||
/// 技能节点入口连接线UI管理器。
|
||||
/// 负责生成、管理和清除技能节点进入线的UI表示。
|
||||
/// 这些线通常连接技能树中的多个起始点到一个公共的出口区域。
|
||||
/// </summary>
|
||||
public class SkillNodeEnterLineUI : MonoBehaviour
|
||||
{
|
||||
private const float MIN_VERTICAL_SPACING = 12.9447f; // 两条连接线结束点之间的最小垂直间距
|
||||
private const float FIRST_POINT_Y_OFFSET = 39.0122f; // 第一个(最低的)结束点相对于RectTransform底部的Y轴偏移量
|
||||
[SerializeField] private SkillNodeLinkLineUI skillNodeLinkLineUIPrefab;
|
||||
[SerializeField] private RectTransform rectTransform;
|
||||
|
||||
private const float MIN_VERTICAL_SPACING = 12.9447f; // 两条连接线结束点之间的最小垂直间距
|
||||
private const float FIRST_POINT_Y_OFFSET = 39.0122f; // 第一个(最低的)结束点相对于RectTransform底部的Y轴偏移量
|
||||
|
||||
/// <summary>
|
||||
/// 初始化连接线并根据起始点数组绘制连接路径。
|
||||
/// 初始化连接线并根据起始点数组绘制连接路径。
|
||||
/// </summary>
|
||||
/// <param name="startPoints">连接线的起始点数组,通常按从高到低排列。</param>
|
||||
/// <returns>所有连接线结束点所占据的最小总垂直高度,如果无连接线则返回0。</returns>
|
||||
@@ -42,10 +40,8 @@ namespace UI
|
||||
// 获取起始点的数量。
|
||||
var numLines = startPoints.Length;
|
||||
if (numLines == 0)
|
||||
{
|
||||
// 没有起始点,无需绘制,返回0高度。
|
||||
return GetRequiredHeight(0); // 使用统一的获取高度方法
|
||||
}
|
||||
|
||||
// 计算所有连接线共享的基准结束点X坐标。
|
||||
var commonEndPointX = transform.position.x - 6f;
|
||||
@@ -76,7 +72,7 @@ namespace UI
|
||||
// 仅有两个点时,它们占据“1号位”和“3号位”(即间隔是2倍的最小间距)。
|
||||
// startPoints[0](最高的起始点)连接到最上面的结束点。
|
||||
// startPoints[1](最低的起始点)连接到最下面的结束点。
|
||||
var endPointY_for_startPoints0 = lowestEndPointBaseY + (2 * MIN_VERTICAL_SPACING); // 上方的结束点
|
||||
var endPointY_for_startPoints0 = lowestEndPointBaseY + 2 * MIN_VERTICAL_SPACING; // 上方的结束点
|
||||
var endPointY_for_startPoints1 = lowestEndPointBaseY; // 下方的结束点
|
||||
|
||||
var line0 = Instantiate(skillNodeLinkLineUIPrefab, transform);
|
||||
@@ -84,7 +80,7 @@ namespace UI
|
||||
|
||||
var line1 = Instantiate(skillNodeLinkLineUIPrefab, transform);
|
||||
line1.SetConnectionPoints(startPoints[1], new Vector2(commonEndPointX, endPointY_for_startPoints1));
|
||||
|
||||
|
||||
// 两个点的高度跨度为它们之间的垂直距离。
|
||||
requiredHeight = GetRequiredHeight(2);
|
||||
}
|
||||
@@ -114,56 +110,41 @@ namespace UI
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 根据预期的连接线数量,预先计算所有连接线结束点将占据的最小总垂直高度。
|
||||
/// 这个方法不会实际创建任何连接线,仅用于高度预估。
|
||||
/// 根据预期的连接线数量,预先计算所有连接线结束点将占据的最小总垂直高度。
|
||||
/// 这个方法不会实际创建任何连接线,仅用于高度预估。
|
||||
/// </summary>
|
||||
/// <param name="numNodes">预期的连接线数量。</param>
|
||||
/// <returns>所有连接线结束点所占据的最小总垂直高度,如果无连接线则返回0。</returns>
|
||||
public float GetRequiredHeight(int numNodes)
|
||||
{
|
||||
float requiredHeight = 0f;
|
||||
var requiredHeight = 0f;
|
||||
|
||||
if (numNodes <= 0)
|
||||
{
|
||||
requiredHeight = 0f;
|
||||
}
|
||||
else if (numNodes == 1)
|
||||
{
|
||||
// 与Init方法中只有一个起始点时的逻辑保持一致
|
||||
requiredHeight = 0f;
|
||||
}
|
||||
else if (numNodes == 2)
|
||||
{
|
||||
// 与Init方法中只有两个起始点时的特殊逻辑保持一致
|
||||
// 两个点的高度跨度为2倍的最小垂直间距
|
||||
requiredHeight = 2 * MIN_VERTICAL_SPACING;
|
||||
}
|
||||
else // numNodes > 2 (通用情况逻辑)
|
||||
{
|
||||
// 与Init方法中多于两个起始点时的通用逻辑保持一致
|
||||
// n个点占据 (n-1) * 最小垂直间距
|
||||
requiredHeight = (numNodes - 1) * MIN_VERTICAL_SPACING;
|
||||
}
|
||||
|
||||
return requiredHeight;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 清除所有当前作为该GameObject子对象的连接线。
|
||||
/// 在播放模式下使用 Destroy,在编辑器模式下使用 DestroyImmediate。
|
||||
/// 清除所有当前作为该GameObject子对象的连接线。
|
||||
/// 在播放模式下使用 Destroy,在编辑器模式下使用 DestroyImmediate。
|
||||
/// </summary>
|
||||
private void ClearExistingLines()
|
||||
{
|
||||
var childrenToDestroy = new List<GameObject>();
|
||||
for (var i = transform.childCount - 1; i >= 0; i--)
|
||||
{
|
||||
childrenToDestroy.Add(transform.GetChild(i).gameObject);
|
||||
}
|
||||
foreach (var child in childrenToDestroy)
|
||||
{
|
||||
Destroy(child);
|
||||
}
|
||||
for (var i = transform.childCount - 1; i >= 0; i--) childrenToDestroy.Add(transform.GetChild(i).gameObject);
|
||||
foreach (var child in childrenToDestroy) Destroy(child);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user