(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:
2025-10-10 14:08:23 +08:00
parent 9a797479ff
commit 16b49f3d3a
1900 changed files with 114053 additions and 34157 deletions

View File

@@ -1,59 +1,63 @@
using System.Collections.Generic;
using Base;
using Data;
using Managers;
using UnityEngine;
using UnityEditor;
using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
namespace UI
{
/// <summary>
/// 技能树节点组件。
/// 技能树节点组件。
/// </summary>
public class SkillTreeNodeUI : MonoBehaviour,IPointerClickHandler
public class SkillTreeNodeUI : MonoBehaviour, IPointerClickHandler
{
/// <summary>
/// 节点的RectTransform组件。
/// 节点的RectTransform组件。
/// </summary>
public RectTransform rectTransform;
/// <summary>
/// 节点的最小高度。
/// 节点的最小高度。
/// </summary>
[SerializeField] private float NODE_MIN_HEIGHT = 39.0122f * 2;
/// <summary>
/// 两条连接线结束点之间的最小垂直间距。
/// 两条连接线结束点之间的最小垂直间距。
/// </summary>
[SerializeField] private float MIN_VERTICAL_SPACING = 12.9447f;
/// <summary>
/// 技能节点入口线UI组件。
/// 技能节点入口线UI组件。
/// </summary>
public SkillNodeEnterLineUI skillNodeEnterLineUI;
/// <summary>
/// 输出线连接点的参考或容器。
/// 输出线连接点的参考或容器。
/// </summary>
public RectTransform outputHead;
/// <summary>
/// 文本显示组件。
/// 文本显示组件。
/// </summary>
public TMP_Text text;
public SkillTreeDef SkillTreeDefine { get; private set; }
public SkillTreeUI skillTreeUI;
public Image lockedNodeImage;
[SerializeField] private Sprite unlockedSprite;
[SerializeField] private Sprite lockedSprite;
[SerializeField] private Color unlockedColor;
[SerializeField] private Color lockedColor;
[SerializeField] private GameObject shader;
public SkillTreeDef SkillTreeDefine { get; private set; }
public void OnPointerClick(PointerEventData eventData)
{
if (eventData.button != PointerEventData.InputButton.Left) return;
skillTreeUI.OnShowNodeInformation(this);
}
public void Init(SkillTreeDef skillTreeDef)
{
@@ -72,7 +76,7 @@ namespace UI
}
/// <summary>
/// 初始化技能树节点UI。
/// 初始化技能树节点UI。
/// </summary>
/// <param name="linkLinePoints">连接线的点数组。</param>
public void LinkLine(Vector2[] linkLinePoints)
@@ -84,22 +88,18 @@ namespace UI
rectTransform.sizeDelta = new Vector2(rectTransform.sizeDelta.x, height);
skillNodeEnterLineUI.Init(linkLinePoints);
}
}
/// <summary>
/// 预先计算技能树节点在初始化后所需的最小高度。
/// 此方法可以在调用 Init 之前用于布局计算。
/// 预先计算技能树节点在初始化后所需的最小高度。
/// 此方法可以在调用 Init 之前用于布局计算。
/// </summary>
/// <param name="linkLineCount">连接线(入口线)的数量。</param>
/// <returns>节点所需的最小高度。</returns>
public float GetRequiredNodeHeight(int linkLineCount)
{
// 如果没有连接线或 skillNodeEnterLineUI 组件为空,则高度为最小高度
if (linkLineCount <= 0 || skillNodeEnterLineUI == null)
{
return NODE_MIN_HEIGHT;
}
if (linkLineCount <= 0 || skillNodeEnterLineUI == null) return NODE_MIN_HEIGHT;
// 获取 SkillNodeEnterLineUI 根据连接线数量计算出的所需高度
var calculatedLineHeight = skillNodeEnterLineUI.GetRequiredHeight(linkLineCount);
@@ -111,7 +111,7 @@ namespace UI
}
/// <summary>
/// 查询出口位置。
/// 查询出口位置。
/// </summary>
/// <param name="totalCount">总数量。</param>
/// <param name="index">位置从上往下0-based。</param>
@@ -139,13 +139,9 @@ namespace UI
{
// 特殊情况当输出点为2个时点1为(x,y+d)点2为(x,y-d)d为MIN_VERTICAL_SPACING
if (index == 0) // 第一个点 (最上面的点)
{
worldY += MIN_VERTICAL_SPACING;
}
else // 第二个点 (最下面的点)
{
worldY -= MIN_VERTICAL_SPACING;
}
}
else
{
@@ -161,17 +157,5 @@ namespace UI
return new Vector2(worldX, worldY);
}
public void OnPointerClick(PointerEventData eventData)
{
if (eventData.button != PointerEventData.InputButton.Left) return;
var window = UIInputControl.Instance.GetWindow("SkillTreeNodeInformation") as SkillTreeNodeInformationUI;
if (!window)
{
return;
}
UIInputControl.Instance.Show(window);
window.Init(this);
}
}
}
}