using Unity.Entities; using Unity.Transforms; using Unity.Mathematics; using Unity.Tiny.Rendering; namespace TinyKitchen { /// /// Instantiate next food item in the list /// and make it transparent to visualize the spatula angle /// [UpdateAfter(typeof(ReadGameInput))] public class SpawnFood : ComponentSystem { Random m_Random; protected override void OnCreate() { RequireSingletonForUpdate(); m_Random = new Random(314159); base.OnCreate(); } protected override void OnUpdate() { var game = GetSingleton(); if (game.gameState == GameState.Aiming) { EntityQuery query = EntityManager.CreateEntityQuery(typeof(FoodInstanceComponent)); if (query.CalculateEntityCount() == 0) { var settingsEntity = GetSingletonEntity(); var foodPrefabs = EntityManager.GetBuffer(settingsEntity); // Check if the list of prefab is empty if (foodPrefabs.Length == 0) throw new System.Exception("No food prefabs to instantiate"); // Instantiate next food in the list hierarchy var foodType = m_Random.NextInt(foodPrefabs.Length); var food = EntityManager.Instantiate(foodPrefabs[foodType].Food); EntityManager.SetComponentData(food, new Rotation() { Value = m_Random.NextQuaternionRotation(), }); // Make the food transparent var instance = EntityManager.GetComponentData(food); var renderer = EntityManager.GetComponentData(instance.Child); var mat = EntityManager.GetComponentData(renderer.material); mat.transparent = true; EntityManager.SetComponentData(renderer.material, mat); game.FoodOnSpatula = food; SetSingleton(game); } } } } }