Files
UltimateFishing2020/Assets/Scripts/Assembly-CSharp/SkillManager.cs
2026-03-04 10:03:45 +08:00

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();
}
}
}