架构大更
This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using Continentis.MainGame.Character;
|
||||
using Continentis.MainGame.Combat;
|
||||
@@ -6,72 +5,71 @@ using DG.Tweening;
|
||||
using Lean.Pool;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Serialization;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace Continentis.MainGame.UI
|
||||
{
|
||||
public partial class ActionOrderDisplayer : MonoBehaviour
|
||||
{
|
||||
[Header("UI References")]
|
||||
[SerializeField] private GameObject portraitPrefab;
|
||||
[Header("UI References")] [SerializeField]
|
||||
private GameObject portraitPrefab;
|
||||
|
||||
[SerializeField] private RectTransform currentTurnPointer;
|
||||
[FormerlySerializedAs("portraitsContainer")] public Transform avatarContainer;
|
||||
|
||||
[Header("Animation Settings")]
|
||||
[SerializeField] private float rearrangeAnimDuration = 0.4f; // 头像重新排列的动画时长
|
||||
|
||||
[FormerlySerializedAs("portraitWidth")]
|
||||
[Header("Layout Settings")]
|
||||
[SerializeField] private float avatarWidth = 133f; // 单个头像的宽度
|
||||
[FormerlySerializedAs("portraitSpacing")] [SerializeField] private float avatarSpacing = 0f; // 头像之间的间距
|
||||
|
||||
[FormerlySerializedAs("portraitsContainer")]
|
||||
public Transform avatarContainer;
|
||||
|
||||
[Header("Animation Settings")] [SerializeField]
|
||||
private float rearrangeAnimDuration = 0.4f; // 头像重新排列的动画时长
|
||||
|
||||
[FormerlySerializedAs("portraitWidth")] [Header("Layout Settings")] [SerializeField]
|
||||
private float avatarWidth = 133f; // 单个头像的宽度
|
||||
|
||||
[FormerlySerializedAs("portraitSpacing")] [SerializeField]
|
||||
private float avatarSpacing; // 头像之间的间距
|
||||
|
||||
public List<CharacterAvatar> avatars = new();
|
||||
|
||||
private List<CharacterBase> actionOrder => CombatMainManager.Instance.characterController.actionOrderList;
|
||||
public List<CharacterAvatar> avatars = new List<CharacterAvatar>();
|
||||
|
||||
|
||||
public void InitializeTurnOrder()
|
||||
{
|
||||
// 清理
|
||||
foreach (CharacterAvatar ui in avatars)
|
||||
{
|
||||
if (ui != null) Destroy(ui.gameObject);
|
||||
}
|
||||
|
||||
foreach (var ui in avatars)
|
||||
if (ui != null)
|
||||
Destroy(ui.gameObject);
|
||||
|
||||
avatars.Clear();
|
||||
|
||||
// 生成UI
|
||||
foreach (var character in actionOrder)
|
||||
{
|
||||
CreatePortraitUI(character, -1); // -1 表示添加到末尾
|
||||
}
|
||||
foreach (var character in actionOrder) CreatePortraitUI(character, -1); // -1 表示添加到末尾
|
||||
|
||||
// 排列到正确的位置
|
||||
RearrangePortraitsWithAnimation();
|
||||
RearrangePortraitsWithAnimation();
|
||||
}
|
||||
|
||||
|
||||
public void EndAction()
|
||||
{
|
||||
// 将当前行动的角色和UI移动到队尾
|
||||
CharacterAvatar currentAvatar = avatars[0];
|
||||
|
||||
var currentAvatar = avatars[0];
|
||||
|
||||
avatars.RemoveAt(0);
|
||||
|
||||
currentAvatar.GetComponent<RectTransform>().DOAnchorPosX(-200, 0.2f).OnComplete(() =>
|
||||
{
|
||||
LeanPool.Despawn(currentAvatar.gameObject);
|
||||
}).Play();
|
||||
|
||||
|
||||
// 播放重新排列动画
|
||||
RearrangePortraitsWithAnimation();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
public partial class ActionOrderDisplayer
|
||||
{
|
||||
// 核心函数:创建单个头像UI
|
||||
private CharacterAvatar CreatePortraitUI(CharacterBase character, int index)
|
||||
{
|
||||
CharacterAvatar avatar = LeanPool.Spawn(portraitPrefab, avatarContainer).GetComponent<CharacterAvatar>();
|
||||
var avatar = LeanPool.Spawn(portraitPrefab, avatarContainer).GetComponent<CharacterAvatar>();
|
||||
avatar.Initialize(character);
|
||||
avatar.GetComponent<RectTransform>().anchoredPosition = new Vector2(-900, 0);
|
||||
if (index >= 0 && index < avatars.Count)
|
||||
@@ -83,35 +81,35 @@ namespace Continentis.MainGame.UI
|
||||
{
|
||||
avatars.Add(avatar);
|
||||
}
|
||||
|
||||
|
||||
return avatar;
|
||||
}
|
||||
|
||||
|
||||
// 无动画的瞬间排列
|
||||
private void RearrangePortraits()
|
||||
{
|
||||
for (int i = 0; i < avatars.Count; i++)
|
||||
for (var i = 0; i < avatars.Count; i++)
|
||||
{
|
||||
float targetX = -110 - i * (avatarWidth + avatarSpacing);
|
||||
var targetX = -110 - i * (avatarWidth + avatarSpacing);
|
||||
avatars[i].GetComponent<RectTransform>().anchoredPosition = new Vector2(targetX, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 核心函数:带动画的重新排列
|
||||
public void RearrangePortraitsWithAnimation()
|
||||
{
|
||||
Sequence sequence = DOTween.Sequence();
|
||||
|
||||
for (int i = 0; i < avatars.Count; i++)
|
||||
var sequence = DOTween.Sequence();
|
||||
|
||||
for (var i = 0; i < avatars.Count; i++)
|
||||
{
|
||||
// 计算每个头像的目标X坐标
|
||||
float targetX = -110 - i * (avatarWidth + avatarSpacing);
|
||||
RectTransform rt = avatars[i].GetComponent<RectTransform>();
|
||||
|
||||
var targetX = -110 - i * (avatarWidth + avatarSpacing);
|
||||
var rt = avatars[i].GetComponent<RectTransform>();
|
||||
|
||||
// 将移动动画加入到序列中
|
||||
sequence.Join(rt.DOAnchorPosX(targetX, rearrangeAnimDuration).SetEase(Ease.OutQuad));
|
||||
}
|
||||
|
||||
|
||||
sequence.Play();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ namespace Continentis.MainGame.UI
|
||||
base.Awake();
|
||||
endActionButton.onClick.AddListener(CombatMainManager.Instance.EndAction);
|
||||
}
|
||||
|
||||
|
||||
public void ClearAllCardViews()
|
||||
{
|
||||
drawPile.cardViews.ForEach(c => LeanPool.Despawn(c.gameObject));
|
||||
@@ -35,13 +35,13 @@ namespace Continentis.MainGame.UI
|
||||
discardPile.cardViews.ForEach(c => LeanPool.Despawn(c.gameObject));
|
||||
exhaustPile.cardViews.ForEach(c => LeanPool.Despawn(c.gameObject));
|
||||
gravePile.cardViews.ForEach(c => LeanPool.Despawn(c.gameObject));
|
||||
|
||||
|
||||
drawPile.cardViews.Clear();
|
||||
handPile.cardViews.Clear();
|
||||
discardPile.cardViews.Clear();
|
||||
exhaustPile.cardViews.Clear();
|
||||
gravePile.cardViews.Clear();
|
||||
|
||||
|
||||
drawPile.UpdateCountText();
|
||||
handPile.UpdateCountText();
|
||||
discardPile.UpdateCountText();
|
||||
|
||||
@@ -7,10 +7,10 @@ namespace Continentis.MainGame.UI
|
||||
{
|
||||
public void OnPointerEnter(PointerEventData eventData)
|
||||
{
|
||||
string title = "Exhaust Pile";
|
||||
string description = $"When you exhaust cards, they go here. Currently, it has {cardViews.Count} cards.\n" +
|
||||
$"Exhausted cards are usually removed from play for the rest of the combat.";
|
||||
RectTransform canvasTransform = CombatUIManager.Instance.combatMainPage.rectTransform;
|
||||
var title = "Exhaust Pile";
|
||||
var description = $"When you exhaust cards, they go here. Currently, it has {cardViews.Count} cards.\n" +
|
||||
"Exhausted cards are usually removed from play for the rest of the combat.";
|
||||
var canvasTransform = CombatUIManager.Instance.combatMainPage.rectTransform;
|
||||
Vector2 basePosition = canvasTransform.InverseTransformPoint(rectTransform.position);
|
||||
InformationBox.Create(canvasTransform, ref infoBox).Initialize(title, description, basePosition);
|
||||
}
|
||||
@@ -20,4 +20,4 @@ namespace Continentis.MainGame.UI
|
||||
InformationBox.Despawn(ref infoBox);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user