//================================================================================ // //================================================================================ using System.CodeDom.Compiler; using UnityEngine; using System.Collections; using System.Collections.Generic; using System; //================================================================================ // //================================================================================ namespace ReaderRabbit { //================================================================================ // //================================================================================ public class CoinManager : MonoBehaviour { //================================================================================ // //================================================================================ public List m_TwentyFiveCentsCoins; public List m_TenCentsCoins; public List m_FiveCentsCoins; public List m_OneCentCoins; [SerializeField] private PolygonCollider2D m_PaymentAreaCollider; public List m_TwentyFiveCentsUsedCoins; public List m_TenCentsUsedCoins; public List m_FiveCentsUsedCoins; public List m_OneCentUsedCoins; [SerializeField] private TextMesh m_TotalPriceLabel; private Coin m_DraggedCoin; private SceneSillySandwichShop m_Scene; private int _lang; //================================================================================ // //================================================================================ void FillCoinType(){ //mycode --rafael foreach (Coin coin in m_TwentyFiveCentsCoins){ coin.m_CoinType = coin.coinType["TWENTY_FIVE_CENTS"]; } foreach (Coin coin in m_TenCentsCoins){ coin.m_CoinType = coin.coinType["TEN_CENTS"]; } foreach (Coin coin in m_FiveCentsCoins){ coin.m_CoinType = coin.coinType["FIVE_CENTS"]; } foreach (Coin coin in m_OneCentCoins){ coin.m_CoinType = coin.coinType["ONE_CENT"]; } foreach (Coin coin in m_TwentyFiveCentsUsedCoins){ coin.m_CoinType = coin.coinType["TWENTY_FIVE_CENTS"]; } foreach (Coin coin in m_TenCentsUsedCoins){ coin.m_CoinType = coin.coinType["TEN_CENTS"]; } foreach (Coin coin in m_FiveCentsUsedCoins){ coin.m_CoinType = coin.coinType["FIVE_CENTS"]; } foreach (Coin coin in m_OneCentUsedCoins){ coin.m_CoinType = coin.coinType["ONE_CENT"]; } } void Start() { _lang = PlayerPrefs.GetInt("language"); FillCoinType (); DisableAllCoins(); this.m_Scene = GameObject.Find("SceneCode").GetComponent(); } //================================================================================ // //================================================================================ public void Setup(int numberOf25Coins, int numberOf10Coins, int numberOf5Coins, int numberOf1Coins) { SetupCoinStack(m_TwentyFiveCentsCoins, numberOf25Coins); SetupCoinStack(m_TenCentsCoins, numberOf10Coins); SetupCoinStack(m_FiveCentsCoins, numberOf5Coins); SetupCoinStack(m_OneCentCoins, numberOf1Coins); SetupCoinStack(m_TwentyFiveCentsUsedCoins, 0); SetupCoinStack(m_TenCentsUsedCoins, 0); SetupCoinStack(m_FiveCentsUsedCoins, 0); SetupCoinStack(m_OneCentUsedCoins, 0); EnableTopmostCoinsDrag(); } //================================================================================ // //================================================================================ private void SetupCoinStack(List stack, int activeCoins) { for (int i = 0; i < stack.Count; ++i) { Coin coin = stack[i]; if (i < activeCoins) { coin.gameObject.SetActive(true); coin.DisableDrag(); } else { coin.gameObject.SetActive(false); } } if (activeCoins > 0) { stack[activeCoins-1].EnableDrag(); } } //================================================================================ // //================================================================================ public void DisableAllCoins(bool clearPriceLabel = true) { SetupCoinStack(m_TwentyFiveCentsCoins, 0); SetupCoinStack(m_TenCentsCoins, 0); SetupCoinStack(m_FiveCentsCoins, 0); SetupCoinStack(m_OneCentCoins, 0); SetupCoinStack(m_TwentyFiveCentsUsedCoins, 0); SetupCoinStack(m_TenCentsUsedCoins, 0); SetupCoinStack(m_FiveCentsUsedCoins, 0); SetupCoinStack(m_OneCentUsedCoins, 0); if (clearPriceLabel) { m_TotalPriceLabel.text = ""; } } //================================================================================ // //================================================================================ public Coin GetDraggedCoin() { return this.m_DraggedCoin; } //================================================================================ // //================================================================================ public void SetDraggedCoin(Coin coin) { this.m_DraggedCoin = coin; } //================================================================================ // //================================================================================ public bool IsCoinBeingDragged() { return (this.m_DraggedCoin != null); } //================================================================================ // //================================================================================ public void ReleaseCoin() { Vector2 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition); if (m_PaymentAreaCollider.OverlapPoint(mousePosition) && !m_DraggedCoin.Used) { m_DraggedCoin.ReturnToOriginalPosition(true); AddCoinToPaymentArea(m_DraggedCoin); } else if (m_PaymentAreaCollider.OverlapPoint(mousePosition) && m_DraggedCoin.Used) { m_DraggedCoin.ReturnToOriginalPosition(false); //AddCoinToPaymentArea(m_DraggedCoin); } else if (!m_PaymentAreaCollider.OverlapPoint(mousePosition) && m_DraggedCoin.Used) { m_DraggedCoin.ReturnToOriginalPosition(true); ReturnCoinToAvailableArea(m_DraggedCoin); } else { m_DraggedCoin.ReturnToOriginalPosition(false); } EnableTopmostCoinsDrag(); UpdateTotalPrice(); m_Scene.PlayReleaseCoinSpeech(); this.m_DraggedCoin = null; } //================================================================================ // //================================================================================ public void UpdateTotalPrice() { int totalPrice = 0; totalPrice += GetNumberOfEnabledCoins(m_TwentyFiveCentsUsedCoins) * (m_TwentyFiveCentsCoins[0].m_CoinType);//((int)CoinType.TWENTY_FIVE_CENTS); totalPrice += GetNumberOfEnabledCoins(m_TenCentsUsedCoins) * m_TenCentsCoins[0].m_CoinType;//((int)CoinType.TEN_CENTS); totalPrice += GetNumberOfEnabledCoins (m_FiveCentsUsedCoins) * m_FiveCentsCoins[0].m_CoinType;//((int)CoinType.FIVE_CENTS); totalPrice += GetNumberOfEnabledCoins (m_OneCentUsedCoins) * m_OneCentCoins[0].m_CoinType;//((int)CoinType.ONE_CENT); TotalPrice = totalPrice; switch (_lang) { case 3: m_TotalPriceLabel.text = totalPrice + " €"; break; case 1: m_TotalPriceLabel.text = totalPrice + " ¢"; break; case 0: case 2: case 4: var kr = TotalPrice / 100f; m_TotalPriceLabel.text = kr.ToString("F2") + " kr"; break; } } //================================================================================ // //================================================================================ private void AddCoinToPaymentArea(Coin coin) { if (m_DraggedCoin.m_CoinType == m_TwentyFiveCentsCoins[0].m_CoinType) { SetupCoinStack(m_TwentyFiveCentsUsedCoins, GetNumberOfEnabledCoins(m_TwentyFiveCentsUsedCoins) + 1); } else if (m_DraggedCoin.m_CoinType == m_TenCentsCoins[0].m_CoinType) { SetupCoinStack(m_TenCentsUsedCoins, GetNumberOfEnabledCoins(m_TenCentsUsedCoins) + 1); } else if (m_DraggedCoin.m_CoinType == m_FiveCentsCoins[0].m_CoinType) { SetupCoinStack(m_FiveCentsUsedCoins, GetNumberOfEnabledCoins(m_FiveCentsUsedCoins) + 1); } else if (m_DraggedCoin.m_CoinType == m_OneCentCoins[0].m_CoinType) { SetupCoinStack(m_OneCentUsedCoins, GetNumberOfEnabledCoins(m_OneCentUsedCoins) + 1); } } //================================================================================ // //================================================================================ private void ReturnCoinToAvailableArea(Coin coin) { if (m_DraggedCoin.m_CoinType == m_TwentyFiveCentsCoins[0].m_CoinType) { SetupCoinStack(m_TwentyFiveCentsCoins, GetNumberOfEnabledCoins(m_TwentyFiveCentsCoins) + 1); } else if (m_DraggedCoin.m_CoinType == m_TenCentsCoins[0].m_CoinType) { SetupCoinStack(m_TenCentsCoins, GetNumberOfEnabledCoins(m_TenCentsCoins) + 1); } else if (m_DraggedCoin.m_CoinType == m_FiveCentsCoins[0].m_CoinType) { SetupCoinStack(m_FiveCentsCoins, GetNumberOfEnabledCoins(m_FiveCentsCoins) + 1); } else if (m_DraggedCoin.m_CoinType == m_OneCentCoins[0].m_CoinType) { SetupCoinStack(m_OneCentCoins, GetNumberOfEnabledCoins(m_OneCentCoins) + 1); } } //================================================================================ // //================================================================================ private void EnableTopmostCoinsDrag() { EnableTopmostCoinDrag(m_TwentyFiveCentsCoins); EnableTopmostCoinDrag(m_TenCentsCoins); EnableTopmostCoinDrag(m_FiveCentsCoins); EnableTopmostCoinDrag(m_OneCentCoins); EnableTopmostCoinDrag(m_TwentyFiveCentsUsedCoins); EnableTopmostCoinDrag(m_TenCentsUsedCoins); EnableTopmostCoinDrag(m_FiveCentsUsedCoins); EnableTopmostCoinDrag(m_OneCentUsedCoins); } //================================================================================ // //================================================================================ private void EnableTopmostCoinDrag(List coins) { for (int i = 1; i < coins.Count; ++i) { if (coins[i-1].gameObject.activeSelf) { if (!coins[i].gameObject.activeSelf) { coins[i-1].EnableDrag(); break; } } else { break; } } } //================================================================================ // //================================================================================ private int GetNumberOfEnabledCoins(List stack) { int count = 0; foreach (Coin coin in stack) { if (coin.gameObject.activeSelf) { count++; } else { break; } } return count; } //================================================================================ // //================================================================================ public void Reset() { m_TotalPriceLabel.text = ""; DisableAllCoins(); } //================================================================================ // //================================================================================ public int TotalPrice { get; private set; } } // public class CoinManager : MonoBehaviour } // namespace ReaderRabbit