161 lines
4.5 KiB
C#
161 lines
4.5 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using Microsoft.Unity.VisualStudio.Editor;
|
|
using UnityEngine;
|
|
|
|
public class Cooking : MonoBehaviour
|
|
{
|
|
// void CheckDishes()
|
|
// {
|
|
// foreach (GameObject ingredient in currentCollisions) {
|
|
|
|
// Debug.Log(ingredient.name);
|
|
// Debug.Log(ingredient.GetComponent<Ingredient>().NutritionalValue);
|
|
// }
|
|
|
|
// }
|
|
|
|
|
|
public Vector3 FinishedDishPosition;
|
|
public GameObject AllIngredients;
|
|
|
|
public void CreateDish() {
|
|
List <GameObject> Ingredients = GetIngredients();
|
|
|
|
List <GameObject> AllDishes = new List <GameObject>();
|
|
|
|
// Find all dishes ingredients can make
|
|
|
|
if (Ingredients.Count < 1) {
|
|
return;
|
|
}
|
|
|
|
foreach (GameObject Ingredient in Ingredients) {
|
|
|
|
List <GameObject> Dishes = Ingredient.GetComponent<Ingredient>().IngredientIn;
|
|
|
|
foreach (GameObject Dish in Dishes) {
|
|
AllDishes.Add(Dish);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
List <GameObject> PossibleDishes = new List <GameObject>();
|
|
// Find the dishes, where all ingredients exist
|
|
|
|
foreach (GameObject Dish in AllDishes) {
|
|
List <GameObject> RequiredIngredients = Dish.GetComponent<Dish>().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<Dish>().NutritionalValue;
|
|
int BestNutrionnalValue = BestDish.GetComponent<Dish>().NutritionalValue;
|
|
|
|
if (CurrentNutritionalValue > BestNutrionnalValue) {
|
|
BestDish = Dish;
|
|
}
|
|
}
|
|
|
|
// Find used ingredients
|
|
List <GameObject> IngredientsInDish = BestDish.GetComponent<Dish>().RequiredIngredients;
|
|
List <GameObject> UsedIngredients = new();
|
|
List <GameObject> 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<Ingredient>().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<Ingredient>().ResetPosition();
|
|
}
|
|
|
|
// Show dish ui screen
|
|
Sprite DishImage = BestDish.GetComponent<SpriteRenderer>().sprite;
|
|
int Stars = 3;
|
|
string DishName = BestDish.name;
|
|
|
|
gameObject.GetComponent<DishUI>().ShowUI(DishName, DishImage, Stars);
|
|
|
|
}
|
|
|
|
// Keep track of ingredients going on and off the cooker.
|
|
List <GameObject> currentCollisions = new List <GameObject>();
|
|
private void OnTriggerEnter2D(Collider2D other) {
|
|
currentCollisions.Add (other.gameObject);
|
|
}
|
|
private void OnTriggerExit2D(Collider2D other) {
|
|
currentCollisions.Remove (other.gameObject);
|
|
}
|
|
List <GameObject> GetIngredients()
|
|
{
|
|
List <GameObject> Ingredients = new List <GameObject>();
|
|
|
|
foreach (GameObject collision in currentCollisions) {
|
|
if (collision.tag == "Ingredient") {
|
|
Ingredients.Add(collision);
|
|
}
|
|
}
|
|
return Ingredients;
|
|
}
|
|
|
|
|
|
// void Update()
|
|
// {
|
|
// GetIngredients();
|
|
// }
|
|
|
|
|
|
|
|
|
|
}
|