using System.Collections; using System.Collections.Generic; using System.Net; using Microsoft.Unity.VisualStudio.Editor; using TMPro; using UnityEngine; using UnityEngine.UI; public class Cooking : MonoBehaviour { // void CheckDishes() // { // foreach (GameObject ingredient in currentCollisions) { // Debug.Log(ingredient.name); // Debug.Log(ingredient.GetComponent().NutritionalValue); // } // } public Vector3 FinishedDishPosition; public GameObject AllIngredients; public GameObject LevelManager; private List DishesCooked = new List(); // stop user from cooking same dish twice. private float timer = 0; private float MaxTimer = 0; private void Start() { MaxTimer = GetComponent().MaxTimer; } public void CreateDish() { List Ingredients = GetIngredients(); List AllDishes = new List (); // Find all dishes ingredients can make if (Ingredients.Count < 1) { return; } foreach (GameObject Ingredient in Ingredients) { List Dishes = Ingredient.GetComponent().IngredientIn; foreach (GameObject Dish in Dishes) { AllDishes.Add(Dish); } } List PossibleDishes = new List (); // Find the dishes, where all ingredients exist foreach (GameObject Dish in AllDishes) { List RequiredIngredients = Dish.GetComponent().RequiredIngredients; int NumberOfIngredients = RequiredIngredients.Count; int IngredientsFulfilled = 0; foreach (GameObject Ingredient in Ingredients) { if (RequiredIngredients.Contains(Ingredient)) { IngredientsFulfilled++; } } if (IngredientsFulfilled == NumberOfIngredients) { PossibleDishes.Add(Dish); } } // No dishes possible if (PossibleDishes.Count < 1) { return; } GameObject BestDish = null; foreach (GameObject Dish in PossibleDishes) { if (BestDish == null) { BestDish = Dish; continue; } int CurrentNutritionalValue = Dish.GetComponent().NutritionalValue; int BestNutrionnalValue = BestDish.GetComponent().NutritionalValue; if (CurrentNutritionalValue > BestNutrionnalValue) { BestDish = Dish; } } foreach (GameObject cookedDish in DishesCooked) { if (BestDish == cookedDish){ return; } } DishesCooked.Add(BestDish); // Find used ingredients List IngredientsInDish = BestDish.GetComponent().RequiredIngredients; List UsedIngredients = new(); List UnusedIngredients = new(); foreach (GameObject Ingredient in Ingredients) { if (IngredientsInDish.Contains(Ingredient)) { UsedIngredients.Add(Ingredient); } else { UnusedIngredients.Add(Ingredient); } } // old code //-------------------------------------- // // Remove ingredients and add the dish // foreach (GameObject Ingredient in UsedIngredients) { // Transform transform = Ingredient.GetComponent().transform; // transform.position = Vector3.up * 50; // } // //BestDish.transform.position = FinishedDishPosition; //-------------------------------------- // Return ingredients to table for (int i = 0; i < AllIngredients.transform.childCount; i++) { GameObject ingredient = AllIngredients.transform.GetChild(i).gameObject; ingredient.GetComponent().ResetPosition(); } // Show dish ui screen Sprite DishImage = BestDish.GetComponent().sprite; int NutritionalValue = BestDish.GetComponent().NutritionalValue; int Stars = NutritionalValueToStars(NutritionalValue); string DishName = BestDish.name; gameObject.GetComponent().ShowUI(DishName, DishImage, Stars); int NV = BestDish.GetComponent().NutritionalValue; LevelManager.GetComponent().UpdateUserScore(NV); timer = MaxTimer; } // Keep track of ingredients going on and off the cooker. List currentCollisions = new List (); private void OnTriggerEnter2D(Collider2D other) { currentCollisions.Add (other.gameObject); } private void OnTriggerExit2D(Collider2D other) { currentCollisions.Remove (other.gameObject); } List GetIngredients() { List Ingredients = new List (); foreach (GameObject collision in currentCollisions) { if (collision.tag == "Ingredient") { Ingredients.Add(collision); } } return Ingredients; } private int NutritionalValueToStars(int NV) { int stars = 1; if (NV >= 11) { stars = 2; } if (NV >= 14) { stars = 3; } if (NV >= 20) { stars = 4; } if (NV >= 22) { stars = 5; } return stars; } private void Update() { if (timer < 0) { LevelManager.GetComponent().CompareScores(); timer = 0; } if (timer > 0) timer -= Time.deltaTime; } }