mirror of
http://47.107.252.169:3000/Roguelite-Game-Developing-Team/Gen_Hack-and-Slash-Roguelite.git
synced 2025-11-20 06:57:12 +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,14 +1,18 @@
|
||||
using Managers;
|
||||
using Prefab;
|
||||
using System.Collections.Generic;
|
||||
using Base;
|
||||
using Managers;
|
||||
using Prefab;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Events;
|
||||
using Utils;
|
||||
|
||||
namespace Entity
|
||||
{
|
||||
public class Outline : MonoBehaviour
|
||||
{
|
||||
// 边界的最小尺寸
|
||||
public static readonly Vector2 MinimumBoundsSize = new(0.5f, 0.5f);
|
||||
|
||||
// 实体身体的游戏对象
|
||||
public GameObject body;
|
||||
|
||||
@@ -24,9 +28,6 @@ namespace Entity
|
||||
// 关联的实体
|
||||
public Entity entity;
|
||||
|
||||
// 边界的最小尺寸
|
||||
public static readonly Vector2 MinimumBoundsSize = new(0.5f, 0.5f);
|
||||
|
||||
// 缓存身体纹理大小
|
||||
private Vector2 _cachedBodyTextureSize;
|
||||
|
||||
@@ -44,8 +45,37 @@ namespace Entity
|
||||
!UIInputControl.Instance.HasWindowOpen;
|
||||
|
||||
/// <summary>
|
||||
/// 确保描边尺寸相关数据缓存已初始化。如果未初始化,则会计算并缓存。
|
||||
/// 此方法保证内部的尺寸计算只执行一次。
|
||||
/// 当鼠标进入描边区域时调用。
|
||||
/// </summary>
|
||||
protected virtual void OnMouseEnter()
|
||||
{
|
||||
if (!CanShow)
|
||||
return;
|
||||
Show();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 当鼠标离开描边区域时调用。
|
||||
/// </summary>
|
||||
protected virtual void OnMouseExit()
|
||||
{
|
||||
Hide();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 当鼠标停留在描边区域时每帧调用。
|
||||
/// </summary>
|
||||
protected virtual void OnMouseOver()
|
||||
{
|
||||
if (!Program.Instance.CanOpenRightMenu || !CanShow)
|
||||
return;
|
||||
// 检测是否按下的是鼠标右键
|
||||
if (Input.GetMouseButtonDown(1)) RightMenuManager.GenerateRightMenu(GetMenu(), Input.mousePosition);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 确保描边尺寸相关数据缓存已初始化。如果未初始化,则会计算并缓存。
|
||||
/// 此方法保证内部的尺寸计算只执行一次。
|
||||
/// </summary>
|
||||
private void EnsureDataCacheInitialized() // 修改部分2:新增私有方法
|
||||
{
|
||||
@@ -58,8 +88,8 @@ namespace Entity
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 初始化描边,将计算出的尺寸应用于描边渲染器、碰撞体和进度条。
|
||||
/// 此方法确保数据缓存已初始化,并可以被重复调用以重新应用设置。
|
||||
/// 初始化描边,将计算出的尺寸应用于描边渲染器、碰撞体和进度条。
|
||||
/// 此方法确保数据缓存已初始化,并可以被重复调用以重新应用设置。
|
||||
/// </summary>
|
||||
public virtual void Init() // 修改部分4:修改 Init 方法
|
||||
{
|
||||
@@ -85,7 +115,7 @@ namespace Entity
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 显示描边。
|
||||
/// 显示描边。
|
||||
/// </summary>
|
||||
public void Show()
|
||||
{
|
||||
@@ -94,7 +124,7 @@ namespace Entity
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 隐藏描边。
|
||||
/// 隐藏描边。
|
||||
/// </summary>
|
||||
public void Hide()
|
||||
{
|
||||
@@ -102,7 +132,7 @@ namespace Entity
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取当前实体的碰撞体大小。在首次调用时自动计算并缓存。
|
||||
/// 获取当前实体的碰撞体大小。在首次调用时自动计算并缓存。
|
||||
/// </summary>
|
||||
/// <returns>碰撞体大小的Vector2。</returns>
|
||||
public Vector2 GetColliderSize() // 修改部分3:修改 GetColliderSize 方法
|
||||
@@ -112,7 +142,7 @@ namespace Entity
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取身体的纹理总大小。在首次调用时自动计算并缓存。
|
||||
/// 获取身体的纹理总大小。在首次调用时自动计算并缓存。
|
||||
/// </summary>
|
||||
/// <returns>身体纹理大小的Vector2。</returns>
|
||||
public Vector2 GetBodyTextureSize() // 修改部分3:修改 GetBodyTextureSize 方法
|
||||
@@ -122,7 +152,7 @@ namespace Entity
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取当前实体的碰撞体偏移。在首次调用时自动计算并缓存。
|
||||
/// 获取当前实体的碰撞体偏移。在首次调用时自动计算并缓存。
|
||||
/// </summary>
|
||||
/// <returns>碰撞体偏移的Vector2。</returns>
|
||||
public Vector2 GetOffset() // 修改部分3:修改 GetOffset 方法
|
||||
@@ -132,18 +162,18 @@ namespace Entity
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 计算并返回碰撞体大小。此方法是内部实现细节。
|
||||
/// 计算并返回碰撞体大小。此方法是内部实现细节。
|
||||
/// </summary>
|
||||
/// <returns>碰撞体大小的Vector2。</returns>
|
||||
private Vector2 CalculateColliderSize()
|
||||
{
|
||||
return !string.IsNullOrEmpty(entity.entityDef?.colliderSize)
|
||||
? Utils.StringUtils.StringToVector2(entity.entityDef.colliderSize)
|
||||
? StringUtils.StringToVector2(entity.entityDef.colliderSize)
|
||||
: CalculateBodyTextureSize();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 计算并返回身体纹理的总大小。此方法是内部实现细节。
|
||||
/// 计算并返回身体纹理的总大小。此方法是内部实现细节。
|
||||
/// </summary>
|
||||
/// <returns>身体纹理总大小的Vector2。</returns>
|
||||
private Vector2 CalculateBodyTextureSize()
|
||||
@@ -151,18 +181,12 @@ namespace Entity
|
||||
// 获取所有子对象的 Renderer 组件
|
||||
var renderers = body.GetComponentsInChildren<Renderer>(true);
|
||||
// 如果没有找到任何 Renderer,返回一个默认值
|
||||
if (renderers.Length == 0)
|
||||
{
|
||||
return MinimumBoundsSize;
|
||||
}
|
||||
if (renderers.Length == 0) return MinimumBoundsSize;
|
||||
|
||||
// 初始化 totalBounds 为第一个 Renderer 的 bounds
|
||||
var totalBounds = renderers[0].bounds;
|
||||
// 遍历剩余的 Renderer,将它们的 bounds 合并到 totalBounds 中
|
||||
for (var i = 1; i < renderers.Length; i++)
|
||||
{
|
||||
totalBounds.Encapsulate(renderers[i].bounds);
|
||||
}
|
||||
for (var i = 1; i < renderers.Length; i++) totalBounds.Encapsulate(renderers[i].bounds);
|
||||
|
||||
// 获取合并后的包围盒的XY大小
|
||||
var size = new Vector2(totalBounds.size.x, totalBounds.size.y);
|
||||
@@ -173,50 +197,18 @@ namespace Entity
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 计算并返回碰撞体偏移。此方法是内部实现细节。
|
||||
/// 计算并返回碰撞体偏移。此方法是内部实现细节。
|
||||
/// </summary>
|
||||
/// <returns>碰撞体偏移的Vector2。</returns>
|
||||
private Vector2 CalculateOffset()
|
||||
{
|
||||
return string.IsNullOrEmpty(entity.entityDef?.colliderPosition)
|
||||
? Vector2.zero
|
||||
: Utils.StringUtils.StringToVector2(entity.entityDef.colliderPosition);
|
||||
: StringUtils.StringToVector2(entity.entityDef.colliderPosition);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 当鼠标进入描边区域时调用。
|
||||
/// </summary>
|
||||
protected virtual void OnMouseEnter()
|
||||
{
|
||||
if (!CanShow)
|
||||
return;
|
||||
Show();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 当鼠标离开描边区域时调用。
|
||||
/// </summary>
|
||||
protected virtual void OnMouseExit()
|
||||
{
|
||||
Hide();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 当鼠标停留在描边区域时每帧调用。
|
||||
/// </summary>
|
||||
protected virtual void OnMouseOver()
|
||||
{
|
||||
if (!Program.Instance.CanOpenRightMenu || !CanShow)
|
||||
return;
|
||||
// 检测是否按下的是鼠标右键
|
||||
if (Input.GetMouseButtonDown(1))
|
||||
{
|
||||
RightMenuManager.GenerateRightMenu(GetMenu(), Input.mousePosition);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取右键菜单项列表。
|
||||
/// 获取右键菜单项列表。
|
||||
/// </summary>
|
||||
/// <returns>包含菜单项名称和对应回调函数的列表。</returns>
|
||||
protected virtual List<(string name, UnityAction callback)> GetMenu()
|
||||
@@ -232,17 +224,17 @@ namespace Entity
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将当前实体变为默认实体。
|
||||
/// 将当前实体变为默认实体。
|
||||
/// </summary>
|
||||
protected void BecomeDefault()
|
||||
{
|
||||
entity?.Kill();
|
||||
if (entity != null)
|
||||
if (entity)
|
||||
EntityManager.Instance.GenerateDefaultEntity(Program.Instance.FocusedDimensionId, entity.Position);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 开始玩家对实体的操控。
|
||||
/// 开始玩家对实体的操控。
|
||||
/// </summary>
|
||||
protected void StartControl()
|
||||
{
|
||||
@@ -250,12 +242,11 @@ namespace Entity
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 结束玩家对实体的操控。
|
||||
/// 结束玩家对实体的操控。
|
||||
/// </summary>
|
||||
protected void EndControl()
|
||||
{
|
||||
entity.PlayerControlled = false;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user