97 lines
2.5 KiB
C#
97 lines
2.5 KiB
C#
|
|
using UnityEngine;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using System.Linq;
|
|||
|
|
using System;
|
|||
|
|
|
|||
|
|
public class CardManager : MonoBehaviour
|
|||
|
|
{
|
|||
|
|
public static CardManager Instance;
|
|||
|
|
|
|||
|
|
[SerializeField] private List<GameObject> 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();
|
|||
|
|
|
|||
|
|
// Projdeme všechny prefaby a zkontrolujeme jejich skill
|
|||
|
|
var availableCards = cardPrefabs
|
|||
|
|
.Select(x => x.GetComponent<CardUI>())
|
|||
|
|
.Where(x => x != null && !unlockedSkills.Contains(x.Skill))
|
|||
|
|
.ToList();
|
|||
|
|
|
|||
|
|
|
|||
|
|
// Vyčistíme staré karty
|
|||
|
|
foreach (Transform child in cardsParent)
|
|||
|
|
{
|
|||
|
|
Destroy(child.gameObject);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Vybereme náhodné karty
|
|||
|
|
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)}");
|
|||
|
|
|
|||
|
|
int xOffset = -800;
|
|||
|
|
if (availableCards.Count < 3)
|
|||
|
|
{
|
|||
|
|
xOffset = -400;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
foreach (var cardUI in shuffled)
|
|||
|
|
{
|
|||
|
|
var newCard = Instantiate(cardUI.gameObject, cardsParent.position + new Vector3(xOffset, 0, 0), Quaternion.identity, cardsParent);
|
|||
|
|
xOffset += 800;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void SelectCard(PlayerSkillTree.Skills skill)
|
|||
|
|
{
|
|||
|
|
playerSkillTree.UnlockSkill(skill);
|
|||
|
|
|
|||
|
|
foreach (Transform child in cardsParent)
|
|||
|
|
{
|
|||
|
|
var cardUI = child.GetComponent<CardUI>();
|
|||
|
|
if (cardUI.Skill == skill)
|
|||
|
|
{
|
|||
|
|
Destroy(child.gameObject);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
cards.SetActive(false);
|
|||
|
|
}
|
|||
|
|
}
|