/
Lexan97
/
Cowbeat
Обзор
Документация
Войти
/
Lexan97
/
Cowbeat
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Assets/Scripts/Managers/ShopManager.cs
176 строк
5 KB
Lexa97
Final Commit gor present
26 май 2026, 23:40
26 май 2026, 23:40
70e9bdb
Код
Авторство
О чём код?
using UnityEngine; using UnityEngine.UI; using TMPro; public class ShopManager : MonoBehaviour { public static bool IsShopOpen { get; private set; } = false; [Header("UI Panels")] [SerializeField] private GameObject shopPanel; [SerializeField] private TextMeshProUGUI hudGoldText; [SerializeField] private TextMeshProUGUI shopGoldText; [Header("Dependencies")] [SerializeField] private PlayerStats playerStats; [SerializeField] private RevolverController revolverController; [Header("Shop Prices")] public int revolverPrice = 150; public int healthPrice = 50; public int strengthPrice = 75; public int ammoPrice = 100; [Header("Ammo Settings")] [SerializeField] private int ammoAmountPerPurchase = 6; [SerializeField] private int maxAmmoLimit = 50; [Header("Shop Buttons")] [SerializeField] private Button buyRevolverButton; [SerializeField] private Button buyTequilaHealthButton; [SerializeField] private Button buyTequilaStrengthButton; [SerializeField] private Button buyAmmoButton; private static int healthUpgradesCount = 0; private static int strengthUpgradesCount = 0; private const int MaxUpgrades = 10; private void Start() { shopPanel.SetActive(false); IsShopOpen = false; if (hudGoldText != null) hudGoldText.gameObject.SetActive(false); if (PlayerInventory.Instance != null) { PlayerInventory.Instance.OnGoldChanged += UpdateGoldUI; } UpdateGoldUI(); UpdateShopButtonsState(); } private void OnDestroy() { if (PlayerInventory.Instance != null) { PlayerInventory.Instance.OnGoldChanged -= UpdateGoldUI; } } private void Update() { if (Input.GetKeyDown(KeyCode.Tab)) { ToggleShop(); } } public void ToggleShop() { if (playerStats != null && playerStats.isDead) return; IsShopOpen = !IsShopOpen; shopPanel.SetActive(IsShopOpen); if (hudGoldText != null) { hudGoldText.gameObject.SetActive(IsShopOpen); } if (IsShopOpen) { Time.timeScale = 0f; Cursor.lockState = CursorLockMode.None; Cursor.visible = true; UpdateShopButtonsState(); } else { Time.timeScale = 1f; Cursor.lockState = CursorLockMode.Locked; Cursor.visible = false; } } private void UpdateGoldUI() { if (PlayerInventory.Instance == null) return; string goldString = $"Gold: {PlayerInventory.Instance.gold}"; if (hudGoldText != null) hudGoldText.text = goldString; if (shopGoldText != null) shopGoldText.text = goldString; } public void UpdateShopButtonsState() { if (PlayerInventory.Instance == null) return; int currentGold = PlayerInventory.Instance.gold; if (buyRevolverButton != null) buyRevolverButton.interactable = !PlayerInventory.Instance.hasRevolver && currentGold >= revolverPrice; if (buyTequilaHealthButton != null) buyTequilaHealthButton.interactable = healthUpgradesCount < MaxUpgrades && currentGold >= healthPrice; if (buyTequilaStrengthButton != null) buyTequilaStrengthButton.interactable = strengthUpgradesCount < MaxUpgrades && currentGold >= strengthPrice; if (buyAmmoButton != null && revolverController != null) { bool hasSpaceForAmmo = revolverController.totalInventoryAmmo < maxAmmoLimit; buyAmmoButton.interactable = PlayerInventory.Instance.hasRevolver && currentGold >= ammoPrice && hasSpaceForAmmo; } } public void OnBuyRevolverClicked() { if (PlayerInventory.Instance.SpendGold(revolverPrice)) { PlayerInventory.Instance.hasRevolver = true; UpdateShopButtonsState(); } } public void OnBuyHealthClicked() { if (playerStats == null) return; if (healthUpgradesCount < MaxUpgrades && PlayerInventory.Instance.SpendGold(healthPrice)) { PersistentData.AdditionalMaxHealth += 10f; playerStats.UpgradeMaxHealth(10); healthUpgradesCount++; UpdateShopButtonsState(); } } public void OnBuyStrengthClicked() { if (strengthUpgradesCount < MaxUpgrades && PlayerInventory.Instance.SpendGold(strengthPrice)) { PersistentData.AdditionalDamage += 5f; PlayerCombat.AddDamage(5f); strengthUpgradesCount++; UpdateShopButtonsState(); } } public void OnBuyAmmoClicked() { if (revolverController == null) return; if (PlayerInventory.Instance.SpendGold(ammoPrice)) { revolverController.totalInventoryAmmo += ammoAmountPerPurchase; UpdateShopButtonsState(); } } public static void ResetShopProgress() { healthUpgradesCount = 0; strengthUpgradesCount = 0; } }