124 lines
3.3 KiB
C#
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();
|
|
}
|
|
}
|
|
} |