ReisenTasker/Assets/Scripts/Task/TaskManager.cs

94 lines
2.2 KiB
C#

using System;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
public class TaskManager : MonoBehaviour
{
#region Statication
public static TaskManager instance;
private void Awake()
{
if (instance != null && instance != this)
{
Destroy(gameObject);
return;
}
instance = this;
}
#endregion
public Task[] taskList; //list of all tasks in the game
public List<Task> activeTasks = new(); //it doesn't need to be serialized wtf are you talking about
public int maxTasksActive;
public Task startingTask;
[Header("UI")]
[SerializeField] private TaskUIObject templateTaskUI;
public Transform taskGrid;
public TextMeshProUGUI taskNameUI;
public TextMeshProUGUI taskDescriptionUI;
public Dictionary<Task, TaskUIObject> allTaskUIObjects = new();
public bool AddTask(Task taskToAdd)
{
if (activeTasks.Count >= maxTasksActive)
{
return false;
}
activeTasks.Add(taskToAdd);
AddTaskUIObject(taskToAdd);
return true;
}
private void Start()
{
//AddTask(startingTask);
}
public void CompleteTask(Task taskToComplete)
{
//remove items from inventory aswell. also need to
//activeTasks.Remove(taskToComplete);
Debug.Log($"{taskToComplete.taskName} COMPLETED");
foreach (InventoryManager.ItemAmount itemReward in taskToComplete.itemRewards)
{
InventoryManager.instance.AddItem(itemReward.item, itemReward.amount);
}
InventoryManager.instance.AddMoney(taskToComplete.moneyReward);
}
public void CheckInventory()
{
foreach (Task task in activeTasks)
{
bool skip = false;
foreach (InventoryManager.ItemAmount itemRequirment in task.itemRequirements)
{
if (InventoryManager.instance.storedItems[itemRequirment.item] < itemRequirment.amount) //doesn't track enemies killed yet but i haven't added combat yet
{
skip = true;
break;
}
}
if (!skip)
{
CompleteTask(task);
}
}
}
public void AddTaskUIObject(Task requestedTask)
{
TaskUIObject newTaskUIObject = Instantiate(templateTaskUI, taskGrid);
allTaskUIObjects[requestedTask] = newTaskUIObject;
newTaskUIObject.SetTask(requestedTask);
}
public void SetTaskUI(Task requestedTask)
{
taskNameUI.text = requestedTask.taskName;
taskDescriptionUI.text = requestedTask.description;
}
}