Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using TMPro;
- using UnityEngine.UI;
- public class Tasks : MonoBehaviour, IInteractable
- {
- public Camera mainCam;
- public GameObject UIpanel;
- #region FieldsOfTask
- [SerializeField] TextMeshProUGUI task1; // Текстовое поле для первого задания
- [SerializeField] TextMeshProUGUI task2; // Текстовое поле для второго задания
- [SerializeField] TextMeshProUGUI task3; // Текстовое поле для третьего задания
- [SerializeField] TextMeshProUGUI task4; // Текстовое поле для четвертого задания
- [SerializeField] TextMeshProUGUI TaskAward1;
- [SerializeField] TextMeshProUGUI TaskAward2;
- [SerializeField] TextMeshProUGUI TaskAward3;
- [SerializeField] TextMeshProUGUI TaskAward4;
- [SerializeField] TextMeshProUGUI TaskAccept1;
- [SerializeField] TextMeshProUGUI TaskAccept2;
- [SerializeField] TextMeshProUGUI TaskAccept3;
- [SerializeField] TextMeshProUGUI TaskAccept4;
- [SerializeField] TextMeshProUGUI TaskPress1;
- [SerializeField] TextMeshProUGUI TaskPress2;
- [SerializeField] TextMeshProUGUI TaskPress3;
- [SerializeField] TextMeshProUGUI TaskPress4;
- #endregion
- TextMeshProUGUI[] TaskAccept;
- TextMeshProUGUI[] TaskPress;
- //[SerializeField] string[] rewards = new string[4];
- int[] award = new int[4];
- Interface player;
- public bool isOpen;
- List<(string,int)>[] taskManager = new List<(string, int)>[]
- {
- new List<(string,int)>(),
- new List<(string,int)>(),
- new List<(string,int)>(),
- new List<(string,int)>()
- };
- // Словарь для хранения количества каждого типа ресурсов
- Dictionary<string, int> resources = new Dictionary<string, int>()
- {
- {"Морковь", 0},
- {"Баклажан", 0},
- {"Репа", 0},
- {"Кукуруза", 0},
- {"Тыква", 0},
- {"Томат", 0}
- };
- int maxQuantity = 50; // Максимальное количество ресурсов для каждого типа
- int minQuantity = 1; // Минимальное количество ресурсов для каждого типа
- int maxTypes = 4; // Максимальное количество типов ресурсов для заданий
- int minTypes = 2; // Минимальное количество типов ресурсов для заданий
- void Start()
- {
- TaskAccept = new TextMeshProUGUI[] { TaskAccept1, TaskAccept2, TaskAccept3, TaskAccept4 };
- TaskPress = new TextMeshProUGUI[] {TaskPress1, TaskPress2, TaskPress3, TaskPress4 };
- task1.text = ""; task2.text = ""; task3.text = ""; task4.text = "";
- for (int i = 0; i < 4; i++) //Выключаем кнопки выполненных заданий
- {
- TaskAccept[i].enabled = false;
- TaskPress[i].enabled = false;
- }
- GenerateAllTasks(); // Генерируем первые задания при запуске игры
- for (int i = 1; i <= 4; i++)// Вызываем метод для обновления награды для i-го задания
- {
- SubmitResources(i);
- }
- player = (Interface)GameObject.Find("Player").GetComponent(typeof(Interface));
- }
- void FixedUpdate()
- {
- if (isOpen)
- {
- UIpanel.SetActive(true);
- }
- else
- {
- UIpanel.SetActive(false);
- }
- CheckAllTasksToCompleted();
- TakeTask();
- }
- public string GetDescription()
- {
- if (isOpen)
- return "";
- else
- return "Заказы";
- }
- public void Interact()
- {
- isOpen = !isOpen;
- }
- void TakeTask()
- {
- Input.GetKeyDown(KeyCode.Keypad5);
- if(TaskAccept1.enabled == true && Input.GetKeyDown(KeyCode.Q))
- {
- ReleazeTakeTaskNumberOf(0);
- }
- else if(TaskAccept2.enabled == true && Input.GetKeyDown(KeyCode.W))
- {
- ReleazeTakeTaskNumberOf(1);
- }
- else if(TaskAccept3.enabled == true && Input.GetKeyDown(KeyCode.E))
- {
- ReleazeTakeTaskNumberOf(2);
- }
- else if(TaskAccept4.enabled == true && Input.GetKeyDown(KeyCode.R))
- {
- ReleazeTakeTaskNumberOf(3);
- }
- }
- void ReleazeTakeTaskNumberOf(int numberOfTask)
- {
- player.moneys += award[numberOfTask];
- foreach (var element in taskManager[numberOfTask])
- {
- switch (element.Item1)
- {
- case "Морковь":
- player.carrots -= element.Item2;
- break;
- case "Баклажан":
- player.eggplants -= element.Item2;
- break;
- case "Репа":
- player.turnips -= element.Item2;
- break;
- case "Кукуруза":
- player.corns -= element.Item2;
- break;
- case "Тыква":
- player.pumpkins -= element.Item2;
- break;
- case "Томат":
- player.tomatos -= element.Item2;
- break;
- }
- }
- TaskAccept[numberOfTask].enabled = false; TaskPress[numberOfTask].enabled = false;
- GenerateTask(numberOfTask + 1);
- SubmitResources(numberOfTask + 1);
- }
- void CheckAllTasksToCompleted()
- {
- for (int i = 1; i <= 4; i++)
- {
- if (CheckTaskToCompleted(i))
- {
- if (i == 1)
- {
- TaskAccept1.enabled = true;
- TaskPress1.enabled = true;
- }
- else if (i == 2)
- {
- TaskAccept2.enabled = true;
- TaskPress2.enabled = true;
- }
- else if (i == 3)
- {
- TaskAccept3.enabled = true;
- TaskPress3.enabled = true;
- }
- else
- {
- TaskAccept4.enabled = true;
- TaskPress4.enabled = true;
- }
- }
- }
- }
- bool CheckTaskToCompleted(int numberOfTask)
- {
- bool check = true;
- foreach (var element in taskManager[numberOfTask - 1])
- {
- switch (element.Item1)
- {
- case "Морковь":
- if (player.carrots < element.Item2) check = false;
- break;
- case "Баклажан":
- if (player.eggplants < element.Item2) check = false;
- break;
- case "Репа":
- if (player.turnips < element.Item2) check = false;
- break;
- case "Кукуруза":
- if (player.corns < element.Item2) check = false;
- break;
- case "Тыква":
- if (player.pumpkins < element.Item2) check = false;
- break;
- case "Томат":
- if (player.tomatos < element.Item2) check = false;
- break;
- }
- }
- return check;
- }
- void GenerateTask(int numberOfTask)
- {
- int typesCount = Random.Range(minTypes, maxTypes + 1);
- List<string> types = new List<string>(resources.Keys);
- types.Shuffle();
- types = types.GetRange(0, typesCount);
- string taskText = "";
- List<(string, int)> taskResources = new List<(string, int)>();
- for (int j = 0; j < types.Count; j++)
- {
- int quantity = Random.Range(minQuantity + j * 5, maxQuantity + j * 5 + 1);
- taskResources.Add((types[j], quantity));
- taskText += $"{quantity} {types[j]}\n";
- }
- taskManager[numberOfTask-1] = taskResources;
- switch (numberOfTask)
- {
- case 1:
- task1.text = taskText;
- //TaskAward1.text = rewards[0];
- break;
- case 2:
- task2.text = taskText;
- //TaskAward2.text = rewards[1];
- break;
- case 3:
- task3.text = taskText;
- //TaskAward3.text = rewards[2];
- break;
- case 4:
- task4.text = taskText;
- //TaskAward4.text = rewards[3];
- break;
- }
- }
- void GenerateAllTasks()
- {
- for (int i = 1; i <= 4; i++)
- {
- GenerateTask(i);
- }
- }
- public void SubmitResources(int numberOfTask)
- {
- // Считает награду
- float taward = 0;
- for (int i = 0; i < taskManager[numberOfTask-1].Count; i++)
- {
- switch(taskManager[numberOfTask - 1][i].Item1)
- {
- case "Морковь":
- //Debug.Log("Морковь " + taskManager[numberOfTask - 1][i].Item2);
- taward += taskManager[numberOfTask - 1][i].Item2;
- break;
- case "Баклажан":
- //Debug.Log("Баклажан " + taskManager[numberOfTask - 1][i].Item2);
- taward += taskManager[numberOfTask - 1][i].Item2 * 2;
- break;
- case "Репа":
- //Debug.Log("Репа " + taskManager[numberOfTask - 1][i].Item2);
- taward += taskManager[numberOfTask - 1][i].Item2 * 3;
- break;
- case "Кукуруза":
- //Debug.Log("Кукуруза " + taskManager[numberOfTask - 1][i].Item2);
- taward += taskManager[numberOfTask - 1][i].Item2 * 4;
- break;
- case "Тыква":
- //Debug.Log("Тыква " + taskManager[numberOfTask - 1][i].Item2);
- taward += taskManager[numberOfTask - 1][i].Item2 * 5;
- break;
- case "Томат":
- //Debug.Log("Томат " + taskManager[numberOfTask - 1][i].Item2);
- taward += taskManager[numberOfTask - 1][i].Item2 * 6;
- break;
- }
- }
- Debug.Log(numberOfTask + " taward = " + taward);
- // Вычисляем награду на основе количества ресурсов и общего количества заработанных денег
- float taskAward = taward;
- // Выводим сумму награды для данного задания
- switch (numberOfTask)
- {
- case 1:
- TaskAward1.text = $"Награда {taskAward}";
- award[0] = (int)taskAward;
- break;
- case 2:
- TaskAward2.text = $"Награда {taskAward}";
- award[1] = (int)taskAward;
- break;
- case 3:
- TaskAward3.text = $"Награда {taskAward}";
- award[2] = (int)taskAward;
- break;
- case 4:
- TaskAward4.text = $"Награда {taskAward}";
- award[3] = (int)taskAward;
- break;
- default:
- Debug.LogError("invalid task number!");
- break;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement