Advertisement
StreetKatya

task

May 27th, 2023
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.75 KB | None | 0 0
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using TMPro;
  5. using UnityEngine.UI;
  6.  
  7. public class Tasks : MonoBehaviour, IInteractable
  8. {
  9.  
  10. public Camera mainCam;
  11. public GameObject UIpanel;
  12. #region FieldsOfTask
  13. [SerializeField] TextMeshProUGUI task1; // Текстовое поле для первого задания
  14. [SerializeField] TextMeshProUGUI task2; // Текстовое поле для второго задания
  15. [SerializeField] TextMeshProUGUI task3; // Текстовое поле для третьего задания
  16. [SerializeField] TextMeshProUGUI task4; // Текстовое поле для четвертого задания
  17. [SerializeField] TextMeshProUGUI TaskAward1;
  18. [SerializeField] TextMeshProUGUI TaskAward2;
  19. [SerializeField] TextMeshProUGUI TaskAward3;
  20. [SerializeField] TextMeshProUGUI TaskAward4;
  21. [SerializeField] TextMeshProUGUI TaskAccept1;
  22. [SerializeField] TextMeshProUGUI TaskAccept2;
  23. [SerializeField] TextMeshProUGUI TaskAccept3;
  24. [SerializeField] TextMeshProUGUI TaskAccept4;
  25. [SerializeField] TextMeshProUGUI TaskPress1;
  26. [SerializeField] TextMeshProUGUI TaskPress2;
  27. [SerializeField] TextMeshProUGUI TaskPress3;
  28. [SerializeField] TextMeshProUGUI TaskPress4;
  29. #endregion
  30. TextMeshProUGUI[] TaskAccept;
  31. TextMeshProUGUI[] TaskPress;
  32. //[SerializeField] string[] rewards = new string[4];
  33. int[] award = new int[4];
  34. Interface player;
  35. public bool isOpen;
  36. List<(string,int)>[] taskManager = new List<(string, int)>[]
  37. {
  38. new List<(string,int)>(),
  39. new List<(string,int)>(),
  40. new List<(string,int)>(),
  41. new List<(string,int)>()
  42. };
  43. // Словарь для хранения количества каждого типа ресурсов
  44. Dictionary<string, int> resources = new Dictionary<string, int>()
  45. {
  46. {"Морковь", 0},
  47. {"Баклажан", 0},
  48. {"Репа", 0},
  49. {"Кукуруза", 0},
  50. {"Тыква", 0},
  51. {"Томат", 0}
  52. };
  53.  
  54. int maxQuantity = 50; // Максимальное количество ресурсов для каждого типа
  55. int minQuantity = 1; // Минимальное количество ресурсов для каждого типа
  56. int maxTypes = 4; // Максимальное количество типов ресурсов для заданий
  57. int minTypes = 2; // Минимальное количество типов ресурсов для заданий
  58.  
  59. void Start()
  60. {
  61. TaskAccept = new TextMeshProUGUI[] { TaskAccept1, TaskAccept2, TaskAccept3, TaskAccept4 };
  62. TaskPress = new TextMeshProUGUI[] {TaskPress1, TaskPress2, TaskPress3, TaskPress4 };
  63. task1.text = ""; task2.text = ""; task3.text = ""; task4.text = "";
  64. for (int i = 0; i < 4; i++) //Выключаем кнопки выполненных заданий
  65. {
  66. TaskAccept[i].enabled = false;
  67. TaskPress[i].enabled = false;
  68. }
  69. GenerateAllTasks(); // Генерируем первые задания при запуске игры
  70.  
  71. for (int i = 1; i <= 4; i++)// Вызываем метод для обновления награды для i-го задания
  72. {
  73. SubmitResources(i);
  74. }
  75. player = (Interface)GameObject.Find("Player").GetComponent(typeof(Interface));
  76.  
  77. }
  78. void FixedUpdate()
  79. {
  80. if (isOpen)
  81. {
  82. UIpanel.SetActive(true);
  83. }
  84. else
  85. {
  86. UIpanel.SetActive(false);
  87. }
  88. CheckAllTasksToCompleted();
  89. TakeTask();
  90. }
  91. public string GetDescription()
  92. {
  93. if (isOpen)
  94. return "";
  95. else
  96. return "Заказы";
  97. }
  98.  
  99. public void Interact()
  100. {
  101.  
  102. isOpen = !isOpen;
  103.  
  104. }
  105.  
  106. void TakeTask()
  107. {
  108. Input.GetKeyDown(KeyCode.Keypad5);
  109. if(TaskAccept1.enabled == true && Input.GetKeyDown(KeyCode.Q))
  110. {
  111. ReleazeTakeTaskNumberOf(0);
  112. }
  113. else if(TaskAccept2.enabled == true && Input.GetKeyDown(KeyCode.W))
  114. {
  115. ReleazeTakeTaskNumberOf(1);
  116. }
  117. else if(TaskAccept3.enabled == true && Input.GetKeyDown(KeyCode.E))
  118. {
  119. ReleazeTakeTaskNumberOf(2);
  120. }
  121. else if(TaskAccept4.enabled == true && Input.GetKeyDown(KeyCode.R))
  122. {
  123. ReleazeTakeTaskNumberOf(3);
  124. }
  125. }
  126. void ReleazeTakeTaskNumberOf(int numberOfTask)
  127. {
  128. player.moneys += award[numberOfTask];
  129. foreach (var element in taskManager[numberOfTask])
  130. {
  131. switch (element.Item1)
  132. {
  133. case "Морковь":
  134. player.carrots -= element.Item2;
  135. break;
  136. case "Баклажан":
  137. player.eggplants -= element.Item2;
  138. break;
  139. case "Репа":
  140. player.turnips -= element.Item2;
  141. break;
  142. case "Кукуруза":
  143. player.corns -= element.Item2;
  144. break;
  145. case "Тыква":
  146. player.pumpkins -= element.Item2;
  147. break;
  148. case "Томат":
  149. player.tomatos -= element.Item2;
  150. break;
  151. }
  152. }
  153. TaskAccept[numberOfTask].enabled = false; TaskPress[numberOfTask].enabled = false;
  154. GenerateTask(numberOfTask + 1);
  155. SubmitResources(numberOfTask + 1);
  156. }
  157. void CheckAllTasksToCompleted()
  158. {
  159. for (int i = 1; i <= 4; i++)
  160. {
  161. if (CheckTaskToCompleted(i))
  162. {
  163. if (i == 1)
  164. {
  165. TaskAccept1.enabled = true;
  166. TaskPress1.enabled = true;
  167. }
  168. else if (i == 2)
  169. {
  170. TaskAccept2.enabled = true;
  171. TaskPress2.enabled = true;
  172. }
  173. else if (i == 3)
  174. {
  175. TaskAccept3.enabled = true;
  176. TaskPress3.enabled = true;
  177. }
  178. else
  179. {
  180. TaskAccept4.enabled = true;
  181. TaskPress4.enabled = true;
  182. }
  183. }
  184. }
  185. }
  186. bool CheckTaskToCompleted(int numberOfTask)
  187. {
  188. bool check = true;
  189. foreach (var element in taskManager[numberOfTask - 1])
  190. {
  191. switch (element.Item1)
  192. {
  193. case "Морковь":
  194. if (player.carrots < element.Item2) check = false;
  195. break;
  196. case "Баклажан":
  197. if (player.eggplants < element.Item2) check = false;
  198. break;
  199. case "Репа":
  200. if (player.turnips < element.Item2) check = false;
  201. break;
  202. case "Кукуруза":
  203. if (player.corns < element.Item2) check = false;
  204. break;
  205. case "Тыква":
  206. if (player.pumpkins < element.Item2) check = false;
  207. break;
  208. case "Томат":
  209. if (player.tomatos < element.Item2) check = false;
  210. break;
  211. }
  212. }
  213. return check;
  214. }
  215. void GenerateTask(int numberOfTask)
  216. {
  217. int typesCount = Random.Range(minTypes, maxTypes + 1);
  218. List<string> types = new List<string>(resources.Keys);
  219. types.Shuffle();
  220. types = types.GetRange(0, typesCount);
  221.  
  222. string taskText = "";
  223. List<(string, int)> taskResources = new List<(string, int)>();
  224.  
  225. for (int j = 0; j < types.Count; j++)
  226. {
  227. int quantity = Random.Range(minQuantity + j * 5, maxQuantity + j * 5 + 1);
  228. taskResources.Add((types[j], quantity));
  229. taskText += $"{quantity} {types[j]}\n";
  230. }
  231. taskManager[numberOfTask-1] = taskResources;
  232. switch (numberOfTask)
  233. {
  234. case 1:
  235. task1.text = taskText;
  236. //TaskAward1.text = rewards[0];
  237. break;
  238. case 2:
  239. task2.text = taskText;
  240. //TaskAward2.text = rewards[1];
  241. break;
  242. case 3:
  243. task3.text = taskText;
  244. //TaskAward3.text = rewards[2];
  245. break;
  246. case 4:
  247. task4.text = taskText;
  248. //TaskAward4.text = rewards[3];
  249. break;
  250. }
  251. }
  252. void GenerateAllTasks()
  253. {
  254. for (int i = 1; i <= 4; i++)
  255. {
  256. GenerateTask(i);
  257. }
  258. }
  259.  
  260. public void SubmitResources(int numberOfTask)
  261. {
  262. // Считает награду
  263. float taward = 0;
  264.  
  265. for (int i = 0; i < taskManager[numberOfTask-1].Count; i++)
  266. {
  267. switch(taskManager[numberOfTask - 1][i].Item1)
  268. {
  269. case "Морковь":
  270. //Debug.Log("Морковь " + taskManager[numberOfTask - 1][i].Item2);
  271. taward += taskManager[numberOfTask - 1][i].Item2;
  272. break;
  273. case "Баклажан":
  274. //Debug.Log("Баклажан " + taskManager[numberOfTask - 1][i].Item2);
  275. taward += taskManager[numberOfTask - 1][i].Item2 * 2;
  276. break;
  277. case "Репа":
  278. //Debug.Log("Репа " + taskManager[numberOfTask - 1][i].Item2);
  279. taward += taskManager[numberOfTask - 1][i].Item2 * 3;
  280. break;
  281. case "Кукуруза":
  282. //Debug.Log("Кукуруза " + taskManager[numberOfTask - 1][i].Item2);
  283. taward += taskManager[numberOfTask - 1][i].Item2 * 4;
  284. break;
  285. case "Тыква":
  286. //Debug.Log("Тыква " + taskManager[numberOfTask - 1][i].Item2);
  287. taward += taskManager[numberOfTask - 1][i].Item2 * 5;
  288. break;
  289. case "Томат":
  290. //Debug.Log("Томат " + taskManager[numberOfTask - 1][i].Item2);
  291. taward += taskManager[numberOfTask - 1][i].Item2 * 6;
  292. break;
  293. }
  294. }
  295.  
  296. Debug.Log(numberOfTask + " taward = " + taward);
  297. // Вычисляем награду на основе количества ресурсов и общего количества заработанных денег
  298. float taskAward = taward;
  299. // Выводим сумму награды для данного задания
  300. switch (numberOfTask)
  301. {
  302. case 1:
  303. TaskAward1.text = $"Награда {taskAward}";
  304. award[0] = (int)taskAward;
  305. break;
  306. case 2:
  307. TaskAward2.text = $"Награда {taskAward}";
  308. award[1] = (int)taskAward;
  309. break;
  310. case 3:
  311. TaskAward3.text = $"Награда {taskAward}";
  312. award[2] = (int)taskAward;
  313. break;
  314. case 4:
  315. TaskAward4.text = $"Награда {taskAward}";
  316. award[3] = (int)taskAward;
  317. break;
  318. default:
  319. Debug.LogError("invalid task number!");
  320. break;
  321. }
  322. }
  323. }
  324.  
  325.  
  326.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement