Files
FueraDeEscala/Assets/Game Kit Controller/Scripts/Inventory/currencySystem.cs
Robii Aragon fd87a6ffd5 add ckg
plantilla base para movimiento básico
2026-02-05 05:07:55 -08:00

233 lines
5.9 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
public class currencySystem : MonoBehaviour
{
[Header ("Main Settings")]
[Space]
public int currentMoneyAmount;
public string statName = "Money";
public string extraStringContent = "$";
public bool showTotalMoneyAmountOnChange;
public bool increaseMoneyTextSmoothly;
public float increaseMoneyTextRate = 0.01f;
public float delayToStartIncreasMoneyText = 0.5f;
[Space]
public float timeToShowTotalMoneyAmount;
public bool hideTotalAmountMoneyPAnelAfterDelay = true;
[Space]
[Header ("Events Settings")]
[Space]
public UnityEvent eventOnReceiveMoney;
public eventParameters.eventToCallWithString eventOnReceiveMoneyWithString;
[Space]
[Header ("Components")]
[Space]
public GameObject totalMoneyAmountPanel;
public Text totalMoneyAmountText;
public playerStatsSystem playerStatsManager;
int moneyToAdd;
int previousMoneyAmount;
bool firstAmountAssigned;
bool previousMoneyToAddChecked = true;
Coroutine showTotalMoneyCoroutine;
bool lastAmountAddedIsPositive = true;
float customMoneyChangeSpeed;
public void increaseTotalMoneyAmount (float extraValue, float customMoneyChangeSpeedValue)
{
customMoneyChangeSpeed = customMoneyChangeSpeedValue;
increaseTotalMoneyAmount (extraValue);
}
public void increaseTotalMoneyAmount (float extraValue)
{
if (increaseMoneyTextSmoothly) {
if (moneyToAdd == 0) {
previousMoneyAmount = currentMoneyAmount;
previousMoneyToAddChecked = false;
}
}
if (extraValue > 0) {
lastAmountAddedIsPositive = true;
} else {
lastAmountAddedIsPositive = false;
}
currentMoneyAmount += (int)extraValue;
eventOnReceiveMoney.Invoke ();
string newString = "";
if (extraValue > 0) {
newString = "+";
} else {
newString = "-";
}
newString += extraValue + extraStringContent;
eventOnReceiveMoneyWithString.Invoke (newString);
playerStatsManager.updateStatValue (statName, currentMoneyAmount);
if (showTotalMoneyAmountOnChange) {
if (increaseMoneyTextSmoothly) {
moneyToAdd += (int)extraValue;
}
showTotalMoneyAmountPanel ();
}
}
public void initializeMoneyAmount (float newValue)
{
currentMoneyAmount = (int)newValue;
updateTotayMoneyAmountText (currentMoneyAmount.ToString ());
}
public void updateMoneyAmountWithoutUpdatingStatManager (int statId, float amount)
{
currentMoneyAmount = (int)amount;
updateTotayMoneyAmountText (currentMoneyAmount.ToString ());
}
public bool useMoney (float amountToUse)
{
if (currentMoneyAmount >= (int)amountToUse) {
currentMoneyAmount -= (int)amountToUse;
playerStatsManager.updateStatValue (statName, currentMoneyAmount);
return true;
} else {
return false;
}
}
public float getCurrentMoneyAmount ()
{
// print (currentMoneyAmount);
return (float)currentMoneyAmount;
}
public bool canSpendMoneyAmount (float amountToSpend)
{
return currentMoneyAmount >= (int)amountToSpend;
}
public void showTotalMoneyAmountPanel ()
{
stopShowTotalMoneyAmountPanelCoroutine ();
showTotalMoneyCoroutine = StartCoroutine (showTotalMoneyAmountPanelCoroutine ());
}
public void stopShowTotalMoneyAmountPanelCoroutine ()
{
if (showTotalMoneyCoroutine != null) {
StopCoroutine (showTotalMoneyCoroutine);
}
}
IEnumerator showTotalMoneyAmountPanelCoroutine ()
{
if (totalMoneyAmountPanel.activeSelf == false) {
totalMoneyAmountPanel.SetActive (true);
}
if (!firstAmountAssigned) {
updateTotayMoneyAmountText (previousMoneyAmount.ToString ());
firstAmountAssigned = true;
}
if (increaseMoneyTextSmoothly) {
if (!previousMoneyToAddChecked) {
yield return new WaitForSeconds (delayToStartIncreasMoneyText);
previousMoneyToAddChecked = true;
}
int moneyIncreaseAmount = 1;
if (!lastAmountAddedIsPositive) {
moneyToAdd = Mathf.Abs (moneyToAdd);
}
if (moneyToAdd > 900) {
int extraIncreaseAmount = moneyToAdd / 900;
if (customMoneyChangeSpeed != 0) {
moneyIncreaseAmount += extraIncreaseAmount + (int)customMoneyChangeSpeed;
} else {
moneyIncreaseAmount += extraIncreaseAmount + 12;
}
}
while (moneyToAdd > 0) {
if (lastAmountAddedIsPositive) {
previousMoneyAmount += moneyIncreaseAmount;
} else {
previousMoneyAmount -= moneyIncreaseAmount;
}
updateTotayMoneyAmountText (previousMoneyAmount.ToString ());
moneyToAdd -= moneyIncreaseAmount;
yield return new WaitForSeconds (increaseMoneyTextRate);
}
updateTotayMoneyAmountText (currentMoneyAmount.ToString ());
} else {
updateTotayMoneyAmountText (currentMoneyAmount.ToString ());
}
lastAmountAddedIsPositive = true;
customMoneyChangeSpeed = 0;
yield return new WaitForSeconds (timeToShowTotalMoneyAmount);
if (hideTotalAmountMoneyPAnelAfterDelay) {
totalMoneyAmountPanel.SetActive (false);
}
}
void updateTotayMoneyAmountText (string newText)
{
totalMoneyAmountText.text = newText + " " + extraStringContent;
}
}