generated from RageAgainstThePixel/upm-template
-
-
Notifications
You must be signed in to change notification settings - Fork 2
/
SkyboxDemo.cs
117 lines (100 loc) · 3.54 KB
/
SkyboxDemo.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
using BlockadeLabs.Skyboxes;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
using Utilities.Extensions;
namespace BlockadeLabs.Demo
{
public class SkyboxDemo : MonoBehaviour
{
[SerializeField]
private TMP_InputField promptInputField;
[SerializeField]
private TMP_Dropdown skyboxStyleDropdown;
[SerializeField]
private Button generateButton;
[SerializeField]
private Material skyboxMaterial;
private BlockadeLabsClient api;
private CancellationTokenSource lifetimeCancellationTokenSource;
private IReadOnlyList<SkyboxStyle> skyboxOptions;
private void OnValidate()
{
promptInputField.Validate();
skyboxStyleDropdown.Validate();
generateButton.Validate();
}
private void Awake()
{
OnValidate();
lifetimeCancellationTokenSource = new CancellationTokenSource();
try
{
api = new BlockadeLabsClient();
}
catch (Exception e)
{
Debug.LogError($"Failed to create {nameof(BlockadeLabsClient)}!\n{e}");
enabled = false;
return;
}
GetSkyboxStyles();
generateButton.onClick.AddListener(GenerateSkybox);
promptInputField.onSubmit.AddListener(GenerateSkybox);
promptInputField.onValueChanged.AddListener(ValidateInput);
}
private void ValidateInput(string input)
{
generateButton.interactable = !string.IsNullOrWhiteSpace(input);
}
private void GenerateSkybox() => GenerateSkybox(promptInputField.text);
private async void GenerateSkybox(string prompt)
{
if (string.IsNullOrWhiteSpace(prompt))
{
Debug.LogWarning("No prompt given!");
return;
}
try
{
generateButton.interactable = false;
promptInputField.interactable = false;
var request = new SkyboxRequest(prompt, skyboxStyleId: skyboxOptions[skyboxStyleDropdown.value].Id);
var skyboxInfo = await api.SkyboxEndpoint.GenerateSkyboxAsync(request, lifetimeCancellationTokenSource.Token).ConfigureAwait(true);
skyboxMaterial.mainTexture = skyboxInfo.MainTexture;
Debug.Log($"Successfully created skybox: {skyboxInfo.Id}");
}
catch (Exception e)
{
Debug.LogError(e);
}
finally
{
generateButton.interactable = true;
promptInputField.interactable = true;
}
}
private void OnDestroy()
{
lifetimeCancellationTokenSource.Cancel();
}
private async void GetSkyboxStyles()
{
try
{
skyboxOptions = await api.SkyboxEndpoint.GetSkyboxStylesAsync(lifetimeCancellationTokenSource.Token).ConfigureAwait(true);
var dropdownOptions = new List<TMP_Dropdown.OptionData>(skyboxOptions.Count);
dropdownOptions.AddRange(skyboxOptions.Select(skyboxStyle => new TMP_Dropdown.OptionData(skyboxStyle.Name)));
skyboxStyleDropdown.options = dropdownOptions;
}
catch (Exception e)
{
Debug.LogError(e);
}
}
}
}