CoinManager.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366
  1. //================================================================================
  2. //
  3. //================================================================================
  4. using System.CodeDom.Compiler;
  5. using UnityEngine;
  6. using System.Collections;
  7. using System.Collections.Generic;
  8. using System;
  9. //================================================================================
  10. //
  11. //================================================================================
  12. namespace ReaderRabbit
  13. {
  14. //================================================================================
  15. //
  16. //================================================================================
  17. public class CoinManager : MonoBehaviour
  18. {
  19. //================================================================================
  20. //
  21. //================================================================================
  22. public List<Coin> m_TwentyFiveCentsCoins;
  23. public List<Coin> m_TenCentsCoins;
  24. public List<Coin> m_FiveCentsCoins;
  25. public List<Coin> m_OneCentCoins;
  26. [SerializeField] private PolygonCollider2D m_PaymentAreaCollider;
  27. public List<Coin> m_TwentyFiveCentsUsedCoins;
  28. public List<Coin> m_TenCentsUsedCoins;
  29. public List<Coin> m_FiveCentsUsedCoins;
  30. public List<Coin> m_OneCentUsedCoins;
  31. [SerializeField] private TextMesh m_TotalPriceLabel;
  32. private Coin m_DraggedCoin;
  33. private SceneSillySandwichShop m_Scene;
  34. private int _lang;
  35. //================================================================================
  36. //
  37. //================================================================================
  38. void FillCoinType(){ //mycode --rafael
  39. foreach (Coin coin in m_TwentyFiveCentsCoins){
  40. coin.m_CoinType = coin.coinType["TWENTY_FIVE_CENTS"];
  41. }
  42. foreach (Coin coin in m_TenCentsCoins){
  43. coin.m_CoinType = coin.coinType["TEN_CENTS"];
  44. }
  45. foreach (Coin coin in m_FiveCentsCoins){
  46. coin.m_CoinType = coin.coinType["FIVE_CENTS"];
  47. }
  48. foreach (Coin coin in m_OneCentCoins){
  49. coin.m_CoinType = coin.coinType["ONE_CENT"];
  50. }
  51. foreach (Coin coin in m_TwentyFiveCentsUsedCoins){
  52. coin.m_CoinType = coin.coinType["TWENTY_FIVE_CENTS"];
  53. }
  54. foreach (Coin coin in m_TenCentsUsedCoins){
  55. coin.m_CoinType = coin.coinType["TEN_CENTS"];
  56. }
  57. foreach (Coin coin in m_FiveCentsUsedCoins){
  58. coin.m_CoinType = coin.coinType["FIVE_CENTS"];
  59. }
  60. foreach (Coin coin in m_OneCentUsedCoins){
  61. coin.m_CoinType = coin.coinType["ONE_CENT"];
  62. }
  63. }
  64. void Start()
  65. {
  66. _lang = PlayerPrefs.GetInt("language");
  67. FillCoinType ();
  68. DisableAllCoins();
  69. this.m_Scene = GameObject.Find("SceneCode").GetComponent<SceneSillySandwichShop>();
  70. }
  71. //================================================================================
  72. //
  73. //================================================================================
  74. public void Setup(int numberOf25Coins, int numberOf10Coins, int numberOf5Coins, int numberOf1Coins)
  75. {
  76. SetupCoinStack(m_TwentyFiveCentsCoins, numberOf25Coins);
  77. SetupCoinStack(m_TenCentsCoins, numberOf10Coins);
  78. SetupCoinStack(m_FiveCentsCoins, numberOf5Coins);
  79. SetupCoinStack(m_OneCentCoins, numberOf1Coins);
  80. SetupCoinStack(m_TwentyFiveCentsUsedCoins, 0);
  81. SetupCoinStack(m_TenCentsUsedCoins, 0);
  82. SetupCoinStack(m_FiveCentsUsedCoins, 0);
  83. SetupCoinStack(m_OneCentUsedCoins, 0);
  84. EnableTopmostCoinsDrag();
  85. }
  86. //================================================================================
  87. //
  88. //================================================================================
  89. private void SetupCoinStack(List<Coin> stack, int activeCoins)
  90. {
  91. for (int i = 0; i < stack.Count; ++i)
  92. {
  93. Coin coin = stack[i];
  94. if (i < activeCoins)
  95. {
  96. coin.gameObject.SetActive(true);
  97. coin.DisableDrag();
  98. }
  99. else
  100. {
  101. coin.gameObject.SetActive(false);
  102. }
  103. }
  104. if (activeCoins > 0)
  105. {
  106. stack[activeCoins-1].EnableDrag();
  107. }
  108. }
  109. //================================================================================
  110. //
  111. //================================================================================
  112. public void DisableAllCoins(bool clearPriceLabel = true)
  113. {
  114. SetupCoinStack(m_TwentyFiveCentsCoins, 0);
  115. SetupCoinStack(m_TenCentsCoins, 0);
  116. SetupCoinStack(m_FiveCentsCoins, 0);
  117. SetupCoinStack(m_OneCentCoins, 0);
  118. SetupCoinStack(m_TwentyFiveCentsUsedCoins, 0);
  119. SetupCoinStack(m_TenCentsUsedCoins, 0);
  120. SetupCoinStack(m_FiveCentsUsedCoins, 0);
  121. SetupCoinStack(m_OneCentUsedCoins, 0);
  122. if (clearPriceLabel)
  123. {
  124. m_TotalPriceLabel.text = "";
  125. }
  126. }
  127. //================================================================================
  128. //
  129. //================================================================================
  130. public Coin GetDraggedCoin()
  131. {
  132. return this.m_DraggedCoin;
  133. }
  134. //================================================================================
  135. //
  136. //================================================================================
  137. public void SetDraggedCoin(Coin coin)
  138. {
  139. this.m_DraggedCoin = coin;
  140. }
  141. //================================================================================
  142. //
  143. //================================================================================
  144. public bool IsCoinBeingDragged()
  145. {
  146. return (this.m_DraggedCoin != null);
  147. }
  148. //================================================================================
  149. //
  150. //================================================================================
  151. public void ReleaseCoin()
  152. {
  153. Vector2 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
  154. if (m_PaymentAreaCollider.OverlapPoint(mousePosition) && !m_DraggedCoin.Used)
  155. {
  156. m_DraggedCoin.ReturnToOriginalPosition(true);
  157. AddCoinToPaymentArea(m_DraggedCoin);
  158. }
  159. else if (m_PaymentAreaCollider.OverlapPoint(mousePosition) && m_DraggedCoin.Used)
  160. {
  161. m_DraggedCoin.ReturnToOriginalPosition(false);
  162. //AddCoinToPaymentArea(m_DraggedCoin);
  163. }
  164. else if (!m_PaymentAreaCollider.OverlapPoint(mousePosition) && m_DraggedCoin.Used)
  165. {
  166. m_DraggedCoin.ReturnToOriginalPosition(true);
  167. ReturnCoinToAvailableArea(m_DraggedCoin);
  168. }
  169. else
  170. {
  171. m_DraggedCoin.ReturnToOriginalPosition(false);
  172. }
  173. EnableTopmostCoinsDrag();
  174. UpdateTotalPrice();
  175. m_Scene.PlayReleaseCoinSpeech();
  176. this.m_DraggedCoin = null;
  177. }
  178. //================================================================================
  179. //
  180. //================================================================================
  181. public void UpdateTotalPrice()
  182. {
  183. int totalPrice = 0;
  184. totalPrice += GetNumberOfEnabledCoins(m_TwentyFiveCentsUsedCoins) * (m_TwentyFiveCentsCoins[0].m_CoinType);//((int)CoinType.TWENTY_FIVE_CENTS);
  185. totalPrice += GetNumberOfEnabledCoins(m_TenCentsUsedCoins) * m_TenCentsCoins[0].m_CoinType;//((int)CoinType.TEN_CENTS);
  186. totalPrice += GetNumberOfEnabledCoins (m_FiveCentsUsedCoins) * m_FiveCentsCoins[0].m_CoinType;//((int)CoinType.FIVE_CENTS);
  187. totalPrice += GetNumberOfEnabledCoins (m_OneCentUsedCoins) * m_OneCentCoins[0].m_CoinType;//((int)CoinType.ONE_CENT);
  188. TotalPrice = totalPrice;
  189. switch (_lang)
  190. {
  191. case 3:
  192. m_TotalPriceLabel.text = totalPrice + " €";
  193. break;
  194. case 1:
  195. m_TotalPriceLabel.text = totalPrice + " ¢";
  196. break;
  197. case 0:
  198. case 2:
  199. case 4:
  200. var kr = TotalPrice / 100f;
  201. m_TotalPriceLabel.text = kr.ToString("F2") + " kr";
  202. break;
  203. }
  204. }
  205. //================================================================================
  206. //
  207. //================================================================================
  208. private void AddCoinToPaymentArea(Coin coin)
  209. {
  210. if (m_DraggedCoin.m_CoinType == m_TwentyFiveCentsCoins[0].m_CoinType)
  211. {
  212. SetupCoinStack(m_TwentyFiveCentsUsedCoins, GetNumberOfEnabledCoins(m_TwentyFiveCentsUsedCoins) + 1);
  213. }
  214. else if (m_DraggedCoin.m_CoinType == m_TenCentsCoins[0].m_CoinType)
  215. {
  216. SetupCoinStack(m_TenCentsUsedCoins, GetNumberOfEnabledCoins(m_TenCentsUsedCoins) + 1);
  217. }
  218. else if (m_DraggedCoin.m_CoinType == m_FiveCentsCoins[0].m_CoinType)
  219. {
  220. SetupCoinStack(m_FiveCentsUsedCoins, GetNumberOfEnabledCoins(m_FiveCentsUsedCoins) + 1);
  221. }
  222. else if (m_DraggedCoin.m_CoinType == m_OneCentCoins[0].m_CoinType)
  223. {
  224. SetupCoinStack(m_OneCentUsedCoins, GetNumberOfEnabledCoins(m_OneCentUsedCoins) + 1);
  225. }
  226. }
  227. //================================================================================
  228. //
  229. //================================================================================
  230. private void ReturnCoinToAvailableArea(Coin coin)
  231. {
  232. if (m_DraggedCoin.m_CoinType == m_TwentyFiveCentsCoins[0].m_CoinType)
  233. {
  234. SetupCoinStack(m_TwentyFiveCentsCoins, GetNumberOfEnabledCoins(m_TwentyFiveCentsCoins) + 1);
  235. }
  236. else if (m_DraggedCoin.m_CoinType == m_TenCentsCoins[0].m_CoinType)
  237. {
  238. SetupCoinStack(m_TenCentsCoins, GetNumberOfEnabledCoins(m_TenCentsCoins) + 1);
  239. }
  240. else if (m_DraggedCoin.m_CoinType == m_FiveCentsCoins[0].m_CoinType)
  241. {
  242. SetupCoinStack(m_FiveCentsCoins, GetNumberOfEnabledCoins(m_FiveCentsCoins) + 1);
  243. }
  244. else if (m_DraggedCoin.m_CoinType == m_OneCentCoins[0].m_CoinType)
  245. {
  246. SetupCoinStack(m_OneCentCoins, GetNumberOfEnabledCoins(m_OneCentCoins) + 1);
  247. }
  248. }
  249. //================================================================================
  250. //
  251. //================================================================================
  252. private void EnableTopmostCoinsDrag()
  253. {
  254. EnableTopmostCoinDrag(m_TwentyFiveCentsCoins);
  255. EnableTopmostCoinDrag(m_TenCentsCoins);
  256. EnableTopmostCoinDrag(m_FiveCentsCoins);
  257. EnableTopmostCoinDrag(m_OneCentCoins);
  258. EnableTopmostCoinDrag(m_TwentyFiveCentsUsedCoins);
  259. EnableTopmostCoinDrag(m_TenCentsUsedCoins);
  260. EnableTopmostCoinDrag(m_FiveCentsUsedCoins);
  261. EnableTopmostCoinDrag(m_OneCentUsedCoins);
  262. }
  263. //================================================================================
  264. //
  265. //================================================================================
  266. private void EnableTopmostCoinDrag(List<Coin> coins)
  267. {
  268. for (int i = 1; i < coins.Count; ++i)
  269. {
  270. if (coins[i-1].gameObject.activeSelf)
  271. {
  272. if (!coins[i].gameObject.activeSelf)
  273. {
  274. coins[i-1].EnableDrag();
  275. break;
  276. }
  277. }
  278. else
  279. {
  280. break;
  281. }
  282. }
  283. }
  284. //================================================================================
  285. //
  286. //================================================================================
  287. private int GetNumberOfEnabledCoins(List<Coin> stack)
  288. {
  289. int count = 0;
  290. foreach (Coin coin in stack)
  291. {
  292. if (coin.gameObject.activeSelf)
  293. {
  294. count++;
  295. }
  296. else
  297. {
  298. break;
  299. }
  300. }
  301. return count;
  302. }
  303. //================================================================================
  304. //
  305. //================================================================================
  306. public void Reset()
  307. {
  308. m_TotalPriceLabel.text = "";
  309. DisableAllCoins();
  310. }
  311. //================================================================================
  312. //
  313. //================================================================================
  314. public int TotalPrice
  315. {
  316. get;
  317. private set;
  318. }
  319. } // public class CoinManager : MonoBehaviour
  320. } // namespace ReaderRabbit