1#pragma warning disable 649
2using System.Collections;
17 private const float TurnLength = 1f;
22 private const float Distance = 100f;
27 private const string BaseURI =
"https://ricardoreis.net/trilib/demos/assetdownloader/";
32 [SerializeField]
private GameObject _downloadTemplate;
40 StartCoroutine(TurnWrapper(partName, -90f));
49 StartCoroutine(TurnWrapper(partName, 90f));
58 private IEnumerator TurnWrapper(
string partName,
float angle)
60 var wrapper = GameObject.Find($
"{partName}Wrapper");
61 if (wrapper ==
null) yield
break;
62 var line = GameObject.Find($
"{partName}Line");
63 if (line ==
null) yield
break;
64 var buttons = line.GetComponentsInChildren<
Button>();
65 for (var i = 0; i < buttons.Length; i++)
67 var button = buttons[i];
68 button.enabled =
false;
71 var initialYaw = wrapper.transform.rotation.eulerAngles.y;
72 var finalYaw = initialYaw + angle;
73 for (var i = 0f; i < TurnLength; i += Time.deltaTime)
75 var eulerAngles = wrapper.transform.rotation.eulerAngles;
76 eulerAngles.y = Mathf.Lerp(initialYaw, finalYaw, Easing(i / TurnLength));
77 wrapper.transform.rotation = Quaternion.Euler(eulerAngles);
81 var finalEulerAngles = wrapper.transform.rotation.eulerAngles;
82 finalEulerAngles.y = finalYaw;
83 wrapper.transform.rotation = Quaternion.Euler(finalEulerAngles);
84 for (var i = 0; i < buttons.Length; i++)
86 var button = buttons[i];
87 button.enabled =
true;
94 private static float Easing(
float value)
96 if ((value *= 2f) < 1f)
return 0.5f * value * value * value;
97 return 0.5f * ((value -= 2f) * value * value + 2f);
104 private void LoadParts(
string partName)
106 for (var i = 0; i < 4; i++) LoadPart(partName, i);
114 private void LoadPart(
string partName,
int partIndex)
116 var wrapper = GameObject.Find($
"{partName}Wrapper");
117 if (wrapper ==
null)
return;
118 var request = AssetDownloader.CreateWebRequest($
"{BaseURI}{partName}{partIndex}.zip");
137 protected override void OnError(IContextualizedError contextualizedError)
139 var context = contextualizedError.GetContext();
140 if (context is AssetLoaderContext assetLoaderContext)
144 var downloaded = Instantiate(_downloadTemplate, _downloadTemplate.transform.parent);
145 var text = downloaded.GetComponentInChildren<Text>();
147 $
"Error: {uriLoadCustomContextData.UnityWebRequest.uri.Segments[uriLoadCustomContextData.UnityWebRequest.uri.Segments.Length - 1]}";
148 downloaded.SetActive(
true);
151 base.OnError(contextualizedError);
161 if (assetLoaderContext.RootGameObject !=
null)
165 var downloaded = Instantiate(_downloadTemplate, _downloadTemplate.transform.parent);
166 var text = downloaded.GetComponentInChildren<Text>();
168 $
"Done: {uriLoadCustomContextData.UnityWebRequest.uri.Segments[uriLoadCustomContextData.UnityWebRequest.uri.Segments.Length - 1]}";
169 downloaded.SetActive(
true);
172 base.OnMaterialsLoad(assetLoaderContext);
180 protected override void OnLoad(AssetLoaderContext assetLoaderContext)
182 if (assetLoaderContext.RootGameObject !=
null)
186 var partIndex = (int) uriLoadCustomContextData.CustomData;
187 var rotation = Quaternion.Euler(0f, partIndex * 90f, 0f);
188 assetLoaderContext.RootGameObject.transform.SetPositionAndRotation(
189 rotation *
new Vector3(0f, 0f, Distance), rotation);
192 base.OnLoad(assetLoaderContext);
UnityEngine.UI.Button Button
TriLibCore.AssetLoaderOptions AssetLoaderOptions
Represents a base class used in TriLib samples.
virtual void OnProgress(AssetLoaderContext assetLoaderContext, float value)
Event is triggered when the Model loading progress changes.
Represents a TriLib sample which allows the user to load models from a website and switch between the...
void PreviousPart(string partName)
Switches to the previous part.
override void OnMaterialsLoad(AssetLoaderContext assetLoaderContext)
Event triggered when the Model and all its resources loaded.
void NextPart(string partName)
Switches to the next part.
override void OnLoad(AssetLoaderContext assetLoaderContext)
Event triggered when the Model Meshes and hierarchy are loaded.
override void Start()
Checks if the Dispatcher instance exists, stores this class instance as the Singleton and load all ar...
override void OnError(IContextualizedError contextualizedError)
Event triggered when there is any Model loading error.
Represents a class passed as the custom data to the Asset Loader Context when loading Models from URI...
Represents a class passed as the custom data to the Asset Loader Context when loading Models from Zip...