using UnityEngine; using System.Collections.Generic; using System.Linq; using System; using UnityEngine.Rendering; public class CardManager : MonoBehaviour { public static CardManager Instance; [SerializeField] private List cardPrefabs; [SerializeField] private Transform cardsParent; private PlayerSkillTree playerSkillTree; private GameObject cards; private void Awake() { if (Instance == null) { Instance = this; } else { Destroy(gameObject); } } private void Start() { playerSkillTree = PlayerSkillTree.Instance; cards = GameObject.Find("Cards"); cards.SetActive(false); } public void Update() { if (Input.GetKeyDown(KeyCode.V)) { cards.SetActive(true); ShowRandomCards(3); } } public void ShowRandomCards(int count) { var unlockedSkills = playerSkillTree.GetPlayerSkills(); var availableCards = cardPrefabs .Select(x => x.GetComponent()) .Where(x => x != null && !unlockedSkills.Contains(x.Skill)) .ToList(); foreach (Transform child in cardsParent) { Destroy(child.gameObject); } var shuffled = availableCards.OrderBy(x => UnityEngine.Random.value).Take(count).ToList(); Debug.Log($"Showing cards: {string.Join(", ", shuffled.Select(x => x.Skill))}"); Debug.Log($"Available cards: {string.Join(", ", availableCards.Select(x => x.Skill))}"); Debug.Log($"Unlocked skills: {string.Join(", ", unlockedSkills)}"); float step = Screen.width / shuffled.Count; float pos = step - Screen.width / (2*shuffled.Count); foreach (var cardUI in shuffled) { var newCard = Instantiate(cardUI.gameObject, new Vector3(pos, Screen.height/2, 0), Quaternion.identity, cardsParent); pos += step; } } public void SelectCard(PlayerSkillTree.Skills skill) { playerSkillTree.UnlockSkill(skill); foreach (Transform child in cardsParent) { var cardUI = child.GetComponent(); if (cardUI.Skill == skill) { Destroy(child.gameObject); } } cards.SetActive(false); } }