using System; using System.Collections.Generic; using Steamworks; using UnityEngine; using UnityEngine.UI; public class SkillManager : MonoBehaviour { [Serializable] public class Tree { public Image[] skillSprites; public SkillSlot[] skillSlot; } [SerializeField] private Image mainContentMaskImage; [SerializeField] private Camera mCamera; [SerializeField] private PlayerHeader playerHeader; public Tree[] tree; public Text SkillPointsText; public GameObject skillInfoHandler; public Text skillTitleText; public Text skillDescText; public Text skilLCostText; public Text infoText; public Button buyButton; private int currentSelectedtree; private int currentSelectedskill; public Color priceColor; [Header("Restetowanie Umiejek")] [SerializeField] private float resetSkillPrice; [SerializeField] private GameObject ResetSkillPopUp; private CosmeticPopUpItem slillresetpoup; [SerializeField] private Transform SkillResetTransform; [SerializeField] private Animator SkillResetAnimator; [SerializeField] private Text skillsResetCostText; public void ResetSkills() { _ = GameManager.Instance._playerData.Player[GameManager.Instance._playerData.currentPlayerProfileIndex]; int points_to_give = 0; for (int i = 0; i < Singleton.Instance.GetCurrentPlayerData().PlayerSkills.Count; i++) { points_to_give++; } if (Singleton.Instance.GetCurrentPlayerData().PlayerCash >= resetSkillPrice || Singleton.Instance.IsCurrentlySandbox()) { CreateSkillResetPopUp(LanguageManager.Instance.GetText("SKILL_RESET_TITLE"), LanguageManager.Instance.GetText("SKILL_RESET"), delegate { Singleton.Instance.GetCurrentPlayerData().PlayerSkills = new List(); Singleton.Instance.GetCurrentPlayerData().PlayerSkillsPoint += points_to_give; if (!Singleton.Instance.IsCurrentlySandbox()) { Singleton.Instance.GetCurrentPlayerData().PlayerCash -= resetSkillPrice; } SkillHover[] array = UnityEngine.Object.FindObjectsOfType(); for (int j = 0; j < array.Length; j++) { array[j].gameObject.GetComponent().color = Color.white; } skillInfoHandler.gameObject.SetActive(value: false); UpdateSkillPointsText(); LoadSkillIcons(); }); } else { SkillResetAnimator.SetTrigger("NoBuy"); } } public void LoadSkillIcons() { if (Singleton.Instance.GetCurrentPlayerData().GameMode != GameManager.PlayerData.CPlayer.GameMode.Realistic) { for (int i = 0; i < tree.Length; i++) { for (int j = 0; j < tree[i].skillSprites.Length; j++) { tree[i].skillSprites[j].sprite = GameManager.Instance.gameSkills[i].skill[j].icon; tree[i].skillSlot[j].treeId = i; } } return; } for (int k = 0; k < tree.Length; k++) { for (int l = 0; l < tree[k].skillSprites.Length; l++) { tree[k].skillSprites[l].sprite = GameManager.Instance.gameSkills[k + 2].skill[l].icon; tree[k].skillSlot[l].treeId = k + 2; } } } public void BuySkill() { Singleton.Instance.GetCurrentPlayerData().PlayerSelectedTree = currentSelectedtree; Singleton.Instance.GetCurrentPlayerData().PlayerSkillsPoint -= GameManager.Instance.gameSkills[currentSelectedtree].skill[currentSelectedskill].costSkillPoints; UpdateSkillPointsText(); GameManager.PlayerData.CSkills cSkills = new GameManager.PlayerData.CSkills(); cSkills.skill = GameManager.Instance.gameSkills[currentSelectedtree].skill[currentSelectedskill].skillenum; cSkills.isBuyed = true; Singleton.Instance.GetCurrentPlayerData().PlayerSkills.Add(cSkills); SelectSkill(currentSelectedskill, currentSelectedtree); if (GameManager.Instance.gameSkills[currentSelectedtree].skill.Length - 1 == currentSelectedskill) { Singleton.Instance.GetCurrentPlayerData().PlayerSelectedTree = -1; } if (Singleton.Instance.HasCurrentPlayerSkill(GameManager.Skills.scrooge)) { Singleton.Instance.GetCurrentPlayerData().AmountOfQuestChangesAvailable++; } if (Singleton.Instance.GetCurrentPlayerData().PlayerSkills.Count == 1 && !Singleton.Instance.IsCurrentlySandbox() && SteamUserStats.GetAchievement("FIRST_SKILL_ACHIEVEMENT", out var pbAchieved) && !pbAchieved && SteamUserStats.SetAchievement("FIRST_SKILL_ACHIEVEMENT")) { SteamUserStats.StoreStats(); } if (Singleton.Instance.GetCurrentPlayerData().PlayerSkills.Count == 10 && !Singleton.Instance.IsCurrentlySandbox() && SteamUserStats.GetAchievement("TEN_SKILL_ACHIEVEMENT", out var pbAchieved2) && !pbAchieved2 && SteamUserStats.SetAchievement("TEN_SKILL_ACHIEVEMENT")) { SteamUserStats.StoreStats(); } if (Singleton.Instance.GetCurrentPlayerData().PlayerSkills.Count == 20 && !Singleton.Instance.IsCurrentlySandbox() && SteamUserStats.GetAchievement("ALL_SKILL_ACHIEVEMENT", out var pbAchieved3) && !pbAchieved3 && SteamUserStats.SetAchievement("ALL_SKILL_ACHIEVEMENT")) { SteamUserStats.StoreStats(); } } public bool BuyCheck(int index, int treeid) { int[] requireSkillsId = GameManager.Instance.gameSkills[treeid].skill[index].requireSkillsId; for (int i = 0; i < requireSkillsId.Length; i++) { if (!Singleton.Instance.HasCurrentPlayerSkill(GameManager.Instance.gameSkills[treeid].skill[requireSkillsId[i]].skillenum)) { return false; } } return true; } public void SelectSkill(int index, int treeid) { skillInfoHandler.gameObject.SetActive(value: true); skillTitleText.text = LanguageManager.Instance.GetText(GameManager.Instance.gameSkills[treeid].skill[index].titleSkillLangKey); skilLCostText.text = LanguageManager.Instance.GetText("PRICE_POINTS_TEXT") + $" {GameManager.Instance.gameSkills[treeid].skill[index].costSkillPoints} "; skillDescText.text = LanguageManager.Instance.GetText(GameManager.Instance.gameSkills[treeid].skill[index].descSkillLangKey); currentSelectedtree = treeid; currentSelectedskill = index; if (Singleton.Instance.HasCurrentPlayerSkill(GameManager.Instance.gameSkills[treeid].skill[index].skillenum)) { buyButton.gameObject.SetActive(value: false); infoText.gameObject.SetActive(value: true); infoText.text = LanguageManager.Instance.GetText("BUYED_SKILL"); } else if (BuyCheck(index, treeid)) { if (Singleton.Instance.GetCurrentPlayerData().PlayerSkillsPoint >= GameManager.Instance.gameSkills[treeid].skill[index].costSkillPoints) { buyButton.gameObject.SetActive(value: true); buyButton.interactable = true; infoText.gameObject.SetActive(value: false); } else { buyButton.gameObject.SetActive(value: true); buyButton.interactable = false; infoText.gameObject.SetActive(value: false); } } else { buyButton.gameObject.SetActive(value: false); infoText.gameObject.SetActive(value: true); infoText.text = LanguageManager.Instance.GetText("CANT_BUY_SKILL"); } } private void Start() { if ((bool)FScriptsHandler.Instance) { playerHeader.gameObject.SetActive(value: true); mainContentMaskImage.enabled = true; FScriptsHandler.Instance.m_Canvas.gameObject.SetActive(value: false); } else if (UnityEngine.Object.FindObjectOfType() != null) { playerHeader.gameObject.SetActive(value: true); mainContentMaskImage.enabled = true; } else { playerHeader.gameObject.SetActive(value: false); mainContentMaskImage.enabled = false; } } private void OnDestroy() { if (FScriptsHandler.Instance != null) { FScriptsHandler.Instance.m_Canvas.gameObject.SetActive(value: true); } } private void OnEnable() { if (GameManager.Instance._playerData.currentPlayerProfileIndex != -1) { skillInfoHandler.gameObject.SetActive(value: false); UpdateSkillPointsText(); skillsResetCostText.text = resetSkillPrice.ToString("f0") + "$"; LoadSkillIcons(); } } public void CreateSkillResetPopUp(string title, string content, Action action) { slillresetpoup = UnityEngine.Object.Instantiate(ResetSkillPopUp, SkillResetTransform).GetComponent(); slillresetpoup.title = title; slillresetpoup.content = content; slillresetpoup.action = action; } private void UpdateSkillPointsText() { if (Singleton.Instance.IsCurrentlySandbox()) { SkillPointsText.text = "∞"; } else { SkillPointsText.text = Singleton.Instance.GetCurrentPlayerData().PlayerSkillsPoint.ToString(); } } }