265 lines
8.6 KiB
C#
265 lines
8.6 KiB
C#
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<SaveDataManager>.Instance.GetCurrentPlayerData().PlayerSkills.Count; i++)
|
|
{
|
|
points_to_give++;
|
|
}
|
|
if (Singleton<SaveDataManager>.Instance.GetCurrentPlayerData().PlayerCash >= resetSkillPrice || Singleton<SaveDataManager>.Instance.IsCurrentlySandbox())
|
|
{
|
|
CreateSkillResetPopUp(LanguageManager.Instance.GetText("SKILL_RESET_TITLE"), LanguageManager.Instance.GetText("SKILL_RESET"), delegate
|
|
{
|
|
Singleton<SaveDataManager>.Instance.GetCurrentPlayerData().PlayerSkills = new List<GameManager.PlayerData.CSkills>();
|
|
Singleton<SaveDataManager>.Instance.GetCurrentPlayerData().PlayerSkillsPoint += points_to_give;
|
|
if (!Singleton<SaveDataManager>.Instance.IsCurrentlySandbox())
|
|
{
|
|
Singleton<SaveDataManager>.Instance.GetCurrentPlayerData().PlayerCash -= resetSkillPrice;
|
|
}
|
|
SkillHover[] array = UnityEngine.Object.FindObjectsOfType<SkillHover>();
|
|
for (int j = 0; j < array.Length; j++)
|
|
{
|
|
array[j].gameObject.GetComponent<Image>().color = Color.white;
|
|
}
|
|
skillInfoHandler.gameObject.SetActive(value: false);
|
|
UpdateSkillPointsText();
|
|
LoadSkillIcons();
|
|
});
|
|
}
|
|
else
|
|
{
|
|
SkillResetAnimator.SetTrigger("NoBuy");
|
|
}
|
|
}
|
|
|
|
public void LoadSkillIcons()
|
|
{
|
|
if (Singleton<SaveDataManager>.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<SaveDataManager>.Instance.GetCurrentPlayerData().PlayerSelectedTree = currentSelectedtree;
|
|
Singleton<SaveDataManager>.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<SaveDataManager>.Instance.GetCurrentPlayerData().PlayerSkills.Add(cSkills);
|
|
SelectSkill(currentSelectedskill, currentSelectedtree);
|
|
if (GameManager.Instance.gameSkills[currentSelectedtree].skill.Length - 1 == currentSelectedskill)
|
|
{
|
|
Singleton<SaveDataManager>.Instance.GetCurrentPlayerData().PlayerSelectedTree = -1;
|
|
}
|
|
if (Singleton<SaveDataManager>.Instance.HasCurrentPlayerSkill(GameManager.Skills.scrooge))
|
|
{
|
|
Singleton<SaveDataManager>.Instance.GetCurrentPlayerData().AmountOfQuestChangesAvailable++;
|
|
}
|
|
if (Singleton<SaveDataManager>.Instance.GetCurrentPlayerData().PlayerSkills.Count == 1 && !Singleton<SaveDataManager>.Instance.IsCurrentlySandbox() && SteamUserStats.GetAchievement("FIRST_SKILL_ACHIEVEMENT", out var pbAchieved) && !pbAchieved && SteamUserStats.SetAchievement("FIRST_SKILL_ACHIEVEMENT"))
|
|
{
|
|
SteamUserStats.StoreStats();
|
|
}
|
|
if (Singleton<SaveDataManager>.Instance.GetCurrentPlayerData().PlayerSkills.Count == 10 && !Singleton<SaveDataManager>.Instance.IsCurrentlySandbox() && SteamUserStats.GetAchievement("TEN_SKILL_ACHIEVEMENT", out var pbAchieved2) && !pbAchieved2 && SteamUserStats.SetAchievement("TEN_SKILL_ACHIEVEMENT"))
|
|
{
|
|
SteamUserStats.StoreStats();
|
|
}
|
|
if (Singleton<SaveDataManager>.Instance.GetCurrentPlayerData().PlayerSkills.Count == 20 && !Singleton<SaveDataManager>.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<SaveDataManager>.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") + $" <color=#{ColorUtility.ToHtmlStringRGB(priceColor)}> {GameManager.Instance.gameSkills[treeid].skill[index].costSkillPoints} </color>";
|
|
skillDescText.text = LanguageManager.Instance.GetText(GameManager.Instance.gameSkills[treeid].skill[index].descSkillLangKey);
|
|
currentSelectedtree = treeid;
|
|
currentSelectedskill = index;
|
|
if (Singleton<SaveDataManager>.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<SaveDataManager>.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<Residence>() != 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<CosmeticPopUpItem>();
|
|
slillresetpoup.title = title;
|
|
slillresetpoup.content = content;
|
|
slillresetpoup.action = action;
|
|
}
|
|
|
|
private void UpdateSkillPointsText()
|
|
{
|
|
if (Singleton<SaveDataManager>.Instance.IsCurrentlySandbox())
|
|
{
|
|
SkillPointsText.text = "∞";
|
|
}
|
|
else
|
|
{
|
|
SkillPointsText.text = Singleton<SaveDataManager>.Instance.GetCurrentPlayerData().PlayerSkillsPoint.ToString();
|
|
}
|
|
}
|
|
}
|