using System.Collections; using System.Collections.Generic; 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 int requiredScore = 5; public TextMeshProUGUI UserScoreText; public TextMeshProUGUI RequredScoreText; private void Start() { UserScoreText.text = "0"; RequredScoreText.text = requiredScore.ToString(); } 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; } } // 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 Stars = 3; string DishName = BestDish.name; gameObject.GetComponent().ShowUI(DishName, DishImage, Stars); UpdateUserScore(Stars); } // 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 void UpdateUserScore(int score) { UserScoreText.text = score.ToString(); } // void Update() // { // GetIngredients(); // } }