This repository has been archived on 2025-03-20. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
mojo-kitchen-chaos/Assets/Scripts/DeliveryManager.cs

116 lines
3.4 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DeliveryManager : MonoBehaviour
{
public event EventHandler OnRecipeSpawned;
public event EventHandler OnRecipeCompleted;
public event EventHandler OnRecipeSuccess;
public event EventHandler OnRecipeFailed;
public static DeliveryManager Instance { get; private set; }
[SerializeField] private RecipeListSO recipeListSO;
private List<RecipeSO> waitingRecipeSOList;
private float spawnRecipeTimer;
private float spawnRecipeTimerMax = 4f;
private int waitingRecipesMax = 4;
private int successfulRecipesAmount;
private void Awake()
{
Instance = this;
waitingRecipeSOList = new List<RecipeSO>();
}
private void Update()
{
spawnRecipeTimer -= Time.deltaTime;
if (spawnRecipeTimer <= 0f)
{
spawnRecipeTimer = spawnRecipeTimerMax;
if (waitingRecipeSOList.Count < waitingRecipesMax)
{
RecipeSO waitingRecipeSO = recipeListSO.recipeSOList[UnityEngine.Random.Range(0, recipeListSO.recipeSOList.Count)];
waitingRecipeSOList.Add(waitingRecipeSO);
OnRecipeSpawned?.Invoke(this, EventArgs.Empty);
}
}
}
public void DeliverRecipe(PlateKitchenObject plateKitchenObject)
{
for (int i=0; i < waitingRecipeSOList.Count; ++i)
{
RecipeSO waitingRecipeSO = waitingRecipeSOList[i];
if (waitingRecipeSO.kitchenObjectSoList.Count == plateKitchenObject.GetKitchenObjectSOList().Count)
{
// Has equal ingreedients on plate
bool plateContentsMatchesRecipe = true;
foreach (KitchenObjectSO recipeKitchenObjectSO in waitingRecipeSO.kitchenObjectSoList)
{
// Cycle through all ingreedients within recipe
bool ingreedientFound = false;
foreach (KitchenObjectSO plateKitchenObjectSO in plateKitchenObject.GetKitchenObjectSOList())
{
// Cycle through all ingreedients within plate
if (plateKitchenObjectSO == recipeKitchenObjectSO)
{
// Ingreedient matches!
ingreedientFound = true;
break;
}
}
if (!ingreedientFound)
{
// This Recipe ingreedient was not on plate
plateContentsMatchesRecipe = false;
}
}
if (plateContentsMatchesRecipe)
{
// Player delivered correct recipe
successfulRecipesAmount++;
waitingRecipeSOList.RemoveAt(i);
OnRecipeCompleted?.Invoke(this, EventArgs.Empty);
OnRecipeSuccess?.Invoke(this, EventArgs.Empty);
return;
}
}
}
// No matches found!
// Player brought the wrong recipe!
OnRecipeFailed?.Invoke(this, EventArgs.Empty);
}
public List<RecipeSO> GetWaitingRecipeSOList()
{
return waitingRecipeSOList;
}
public int GetSuccessfulRecipesAmount()
{
return successfulRecipesAmount;
}
}