using FishNet.Component.Transforming; using FishNet.Object; using System; using UnityEngine; using UnityEngine.UI; using UnityEngine.XR.Interaction.Toolkit; public class ShapeDetectionMinigameController : MonoBehaviour { public MicrophoneStand microphoneStand; public PushableButton imageGenerationButton; public PushableButton modelGenerationButton; public Texture2D GeneratedTexture { get; private set; } public Image imageDisplay; public GameObject GeneratedModel { get; private set; } public Transform modelSpawnPoint; public string shapeScannerTag = "ShapeScannable"; private bool modelGenerationInProgress; // Start is called before the first frame update void Start() { imageGenerationButton.OnButtonPressed += InvokeImageGeneration; modelGenerationButton.OnButtonPressed += InvokeModelGeneration; modelGenerationInProgress = false; } // Update is called once per frame void Update() { } private async void InvokeImageGeneration() { string inputPrompt = microphoneStand.GetTextOutput(); byte[] imageBytes = await InvokeAiClient.Instance.GenerateImage(inputPrompt); GeneratedTexture = ModelGenerationUtils.CreateTexture(imageBytes); Sprite sprite = ModelGenerationUtils.CreateSprite(GeneratedTexture); imageDisplay.sprite = sprite; imageGenerationButton.Deactivate(); if (!modelGenerationInProgress) { modelGenerationButton.Deactivate(); } } private async void InvokeModelGeneration() { modelGenerationInProgress = true; string encodedTexture = Convert.ToBase64String(GeneratedTexture.EncodeToJPG()); byte[] encodedModel = await TrellisClient.Instance.GenerateModel(encodedTexture); GameObject spawnedObject = await ModelGenerationUtils.Instance.SpawnModel(encodedModel); InitializeSpawnedObject(spawnedObject); // Destroy previous generated object Destroy(GeneratedModel); GeneratedModel = spawnedObject; modelGenerationButton.Deactivate(); modelGenerationInProgress = false; } private void InitializeSpawnedObject(GameObject spawnedObject) { Rigidbody rigidbody = spawnedObject.AddComponent(); rigidbody.isKinematic = true; //spawnedObject.AddComponent(); //spawnedObject.AddComponent(); spawnedObject.transform.parent = modelSpawnPoint; spawnedObject.transform.position = modelSpawnPoint.position; spawnedObject.tag = shapeScannerTag; spawnedObject.SetActive(true); spawnedObject.AddComponent(); } }