Files
tcg-client/Assets/TcgEngine/Scripts/GameLogic/CardCarousel.cs
2025-08-29 14:00:42 +08:00

124 lines
3.3 KiB
C#

using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace TcgEngine.UI
{
public class CardCarousel : UIPanel
{
// 技能名称
public Text skillName_text;
// 技能描述
public Text description_text;
public List<SkillData> skills = new List<SkillData>();
public Transform SkillDisplayPanel;
public GameObject cardPrefab;
public List<GameObject> cards;
public float centerScale = 1.2f;
public float sideScale = 0.8f;
public float sideOffset = 200f;
private int currentIndex = 0;
[Header("初始化图层顺序")] [SerializeField] private int baseOrder = 25;
[SerializeField] private Button nextButton;
[SerializeField] private Button prevButton;
[SerializeField] private Button choice_Button;
void Start()
{
nextButton.onClick.AddListener(NextCard);
prevButton.onClick.AddListener(PrevCard);
choice_Button.onClick.AddListener(OnChoice);
InitCard();
}
public void InitCard()
{
// 清空现有列表
skills.Clear();
cards.Clear();
// 后续改成数据传入
SkillData[] loadedSkills = Resources.LoadAll<SkillData>("Skill测试用的/Data");
skills.AddRange(loadedSkills);
foreach (var skill in skills)
{
GameObject objec = Instantiate(cardPrefab, SkillDisplayPanel);
objec.name = skill.name;
var card = objec.GetComponent<SkillCard>();
card.skillName = skill.skillName;
card.description = skill.description;
card.skill_Icon.sprite = skill.icon;
card.InitManaConsume(skill.manaCost);
cards.Add(objec);
}
UpdateCards();
}
private void NextCard()
{
if (currentIndex < cards.Count - 1)
{
currentIndex++;
UpdateCards();
}
}
private void PrevCard()
{
if (currentIndex > 0)
{
currentIndex--;
UpdateCards();
}
}
private void UpdateCards()
{
for (int i = 0; i < cards.Count; i++)
{
GameObject card = cards[i];
Canvas can = card.GetComponent<Canvas>();
int distance = Mathf.Abs(i - currentIndex);
float scale = (i == currentIndex) ? centerScale : sideScale;
card.transform.localScale = Vector3.one * scale;
float x = (i - currentIndex) * sideOffset;
card.transform.localPosition = new Vector3(x, 0, 0);
can.overrideSorting = true;
can.sortingOrder = baseOrder + (cards.Count - distance);
if (i == currentIndex)
{
var data = cards[i].GetComponent<SkillCard>();
skillName_text.text = data.skillName;
description_text.text = data.description;
}
}
}
private void OnChoice()
{
Hide();
}
}
}