app.hypergames.hypersdk 1.8.2 → 1.8.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/HyperLoader.unity +2 -2
  3. package/Runtime/Internal/Data/URLData.cs +14 -18
  4. package/Runtime/Internal/Managers/BackendManager.cs +300 -6
  5. package/Runtime/Internal/Managers/DataManager.cs +21 -0
  6. package/Runtime/Internal/Managers/EventManager.cs +2 -0
  7. package/Runtime/Internal/Managers/GameManager.cs +4 -0
  8. package/Runtime/Internal/UI/Components/ConnectionStatusIcon.cs +261 -16
  9. package/Runtime/Internal/UI/Modals/ScoreSubmissionFailedModal.cs +1 -1
  10. package/Runtime/Plugins/WebGL/HyperTutorialCachePlugin.jslib +4 -2
  11. package/Runtime/Plugins/WebGL/HyperWebSocketPlugin.jslib +5 -0
  12. package/Runtime/Resources/Sprites/Control Bar/Internet Connection/Group 36946.png +0 -0
  13. package/Runtime/Resources/Sprites/Control Bar/Internet Connection/Group 36946.png.meta +169 -0
  14. package/Runtime/Resources/Sprites/Control Bar/Internet Connection/Group-1.png +0 -0
  15. package/Runtime/Resources/Sprites/Control Bar/Internet Connection/Group-1.png.meta +169 -0
  16. package/Runtime/Resources/Sprites/Control Bar/Internet Connection/Group-2.png +0 -0
  17. package/Runtime/Resources/Sprites/Control Bar/Internet Connection/Group-2.png.meta +169 -0
  18. package/Runtime/Resources/Sprites/Control Bar/Internet Connection/Group.png +0 -0
  19. package/Runtime/Resources/Sprites/Control Bar/Internet Connection/Group.png.meta +169 -0
  20. package/Runtime/Resources/Sprites/Control Bar/{Icon_YesWifi.png.meta → Internet Connection/Icon_YesWifi.png.meta } +1 -1
  21. package/Runtime/Resources/Sprites/Control Bar/Internet Connection/Vector.png +0 -0
  22. package/Runtime/Resources/Sprites/Control Bar/Internet Connection/Vector.png.meta +169 -0
  23. package/Runtime/Resources/Sprites/Control Bar/Internet Connection.meta +8 -0
  24. package/Runtime/Resources/UIPrefabs/ControlBar.prefab +735 -68
  25. package/package.json +1 -1
  26. /package/Runtime/Resources/Sprites/Control Bar/{Icon_NoWifi.png → Internet Connection/Icon_NoWifi.png} +0 -0
  27. /package/Runtime/Resources/Sprites/Control Bar/{Icon_NoWifi.png.meta → Internet Connection/Icon_NoWifi.png.meta} +0 -0
  28. /package/Runtime/Resources/Sprites/Control Bar/{Icon_YesWifi.png → Internet Connection/Icon_YesWifi.png} +0 -0
@@ -1,6 +1,8 @@
1
1
  using Hyper.Internal.Managers;
2
2
  using Hyper.Internal.Animation;
3
+ using TMPro;
3
4
  using UnityEngine;
5
+ using UnityEngine.UI;
4
6
 
5
7
  namespace Hyper.Internal
6
8
  {
@@ -9,43 +11,286 @@ namespace Hyper.Internal
9
11
  public GameObject lost;
10
12
  public GameObject restored;
11
13
 
14
+ [Tooltip("Wifi / latency visuals while connected. Leave unassigned only if the prefab has no dynamic group.")]
15
+ public GameObject dynamicPingIcon;
16
+
17
+ [Header("Ping thresholds (ms)")]
18
+ [Tooltip("Latency at or below (when connected) uses solid good color; above uses solid average color.")]
19
+ [SerializeField] private int goodPingMaxMs = 103;
20
+ [Tooltip("Bar section alphas grade from all 1 at 0 ms to the bad profile at this latency (ms).")]
21
+ [SerializeField] private int badPingMaxMs = 293;
22
+
23
+ [Header("Ping colors (no blending — either good or average)")]
24
+ [SerializeField] private Color goodPingColor = new Color(0.14509805f, 0.6666667f, 0.4f, 1f);
25
+ [SerializeField] private Color averagePingColor = new Color(1f, 0.4862745f, 0f, 1f);
26
+
27
+ [Header("Ping bars (top to bottom)")]
28
+ [SerializeField] private Image goodPingBar;
29
+ [SerializeField] private Image averagePingBar;
30
+ [SerializeField] private Image lowPingBar;
31
+
32
+ [Header("Wifi holder extras")]
33
+ [Tooltip("Background uses same RGB as the active ping tone; alpha fixed at 10%.")]
34
+ [SerializeField] private Image wifiBackgroundImage;
35
+ [Tooltip("Wifi dot uses same RGB; alpha fixed at 100%.")]
36
+ [SerializeField] private Image wifiDotImage;
37
+
38
+ [Header("Latency label")]
39
+ [SerializeField] private TextMeshProUGUI wifiLatencyText;
40
+
41
+ private const float WifiBackgroundAlpha = 0.175f;
42
+ private const float WifiDotAlpha = 1f;
43
+
44
+ /// <summary>Never below this so bars stay faintly visible.</summary>
45
+ private const float BarAlphaFloor = 0.1f;
46
+
47
+ // stressT = 0 good latency → all bars full; stressT = 1 bad → graded (bottom strongest) + dot at 1.
48
+ private const float TopBarAlphaGood = 1f;
49
+ private const float MidBarAlphaGood = 1f;
50
+ private const float LowBarAlphaGood = 1f;
51
+
52
+ private const float TopBarAlphaBad = 0.12f;
53
+ private const float MidBarAlphaBad = 0.3f;
54
+ private const float LowBarAlphaBad = 0.65f;
55
+
56
+ private const string HypergamesProductionApiUrl = "https://api.hypergames.app";
57
+
58
+ #if UNITY_EDITOR
59
+ [Header("Editor test")]
60
+ [SerializeField] private bool simulateRandomPingInEditor = true;
61
+ [SerializeField] private int editorSimMinMs = 20;
62
+ [SerializeField] private int editorSimMaxMs = 400;
63
+ [SerializeField] private float editorSimIntervalSeconds = 2f;
64
+
65
+ private float _editorNextPingSampleTime;
66
+ private int _editorSimulatedLatencyMs;
67
+ #endif
68
+
12
69
  private RectTransform rectTransform;
70
+ private EventManager _eventManager;
71
+ private BackendManager _backendManager;
13
72
 
14
73
  private void Awake()
15
74
  {
16
- var _eventManager = HyperRuntime.EventManager;
75
+ _eventManager = HyperRuntime.EventManager;
76
+ _backendManager = HyperRuntime.BackendManager;
17
77
  rectTransform = GetComponent<RectTransform>();
18
78
 
19
- _eventManager.OnInternetConnectionLost += ConnectionLost;
20
- _eventManager.OnInternetConnectionFound += ConnectionRestored;
79
+ _eventManager.OnInternetConnectionLost += ConnectionLost;
80
+ _eventManager.OnInternetConnectionFound += ConnectionRestored;
81
+ _eventManager.OnBackendSocketManuallyClosed += OnBackendSocketManuallyClosed;
21
82
  }
22
83
 
23
84
  private void Start()
24
85
  {
25
- rectTransform.anchoredPosition = new Vector2(rectTransform.anchoredPosition.x, -100);
86
+ ApplyStandardVisibility();
87
+
88
+ if (!ShouldUseDynamicPingIcon() && rectTransform != null)
89
+ {
90
+ Vector2 p = rectTransform.anchoredPosition;
91
+ rectTransform.anchoredPosition = new Vector2(p.x, -100f);
92
+ }
93
+
94
+ #if UNITY_EDITOR
95
+ if (simulateRandomPingInEditor)
96
+ {
97
+ editorSimMaxMs = Mathf.Max(editorSimMinMs, editorSimMaxMs);
98
+ editorSimIntervalSeconds = Mathf.Max(0.1f, editorSimIntervalSeconds);
99
+ ResampleEditorPing();
100
+ _editorNextPingSampleTime = Time.realtimeSinceStartup + editorSimIntervalSeconds;
101
+ }
102
+ #endif
103
+ }
104
+
105
+ private void OnDestroy()
106
+ {
107
+ if (_eventManager != null)
108
+ {
109
+ _eventManager.OnInternetConnectionLost -= ConnectionLost;
110
+ _eventManager.OnInternetConnectionFound -= ConnectionRestored;
111
+ _eventManager.OnBackendSocketManuallyClosed -= OnBackendSocketManuallyClosed;
112
+ }
113
+ }
114
+
115
+ private void Update()
116
+ {
117
+ #if UNITY_EDITOR
118
+ if (simulateRandomPingInEditor)
119
+ {
120
+ if (Time.realtimeSinceStartup >= _editorNextPingSampleTime)
121
+ {
122
+ ResampleEditorPing();
123
+ _editorNextPingSampleTime = Time.realtimeSinceStartup + editorSimIntervalSeconds;
124
+ }
125
+ }
126
+ #endif
127
+
128
+ bool haveLatency = TryGetCurrentLatency(out int lat, out bool socketOk);
129
+ bool showPingUi = ShouldUseDynamicPingIcon();
130
+
131
+ if (wifiLatencyText != null)
132
+ {
133
+ if (!showPingUi)
134
+ wifiLatencyText.text = string.Empty;
135
+ else if (!haveLatency || !socketOk || lat < 0)
136
+ wifiLatencyText.text = "--";
137
+ else
138
+ wifiLatencyText.text = $"{Mathf.Clamp(lat, 0, badPingMaxMs)} ms";
139
+ }
140
+
141
+ if (!showPingUi || dynamicPingIcon == null || !dynamicPingIcon.activeSelf)
142
+ return;
143
+
144
+ if (!haveLatency)
145
+ return;
146
+
147
+ RefreshPingBars(lat, socketOk);
148
+ }
149
+
150
+ private bool TryGetCurrentLatency(out int lat, out bool socketOk)
151
+ {
152
+ #if UNITY_EDITOR
153
+ if (simulateRandomPingInEditor)
154
+ {
155
+ lat = _editorSimulatedLatencyMs;
156
+ socketOk = true;
157
+ return true;
158
+ }
159
+ #endif
160
+ BackendManager backend = HyperRuntime.BackendManager;
161
+ if (backend == null)
162
+ {
163
+ lat = -1;
164
+ socketOk = false;
165
+ return false;
166
+ }
167
+
168
+ lat = backend.SdkSmoothedLatencyMs;
169
+ socketOk = backend.isSocketConnected;
170
+ return true;
171
+ }
172
+
173
+ #if UNITY_EDITOR
174
+ private void ResampleEditorPing()
175
+ {
176
+ int min = Mathf.Min(editorSimMinMs, editorSimMaxMs);
177
+ int max = Mathf.Max(editorSimMinMs, editorSimMaxMs);
178
+ _editorSimulatedLatencyMs = Random.Range(min, max + 1);
179
+ }
180
+ #endif
181
+
182
+ private void OnBackendSocketManuallyClosed()
183
+ {
184
+ this.DOKill();
185
+ gameObject.SetActive(false);
26
186
  }
27
187
 
28
- void ConnectionLost()
188
+ private void ConnectionLost()
29
189
  {
30
- lost.SetActive(true);
31
- restored.SetActive(false);
190
+ SetActiveSafe(lost, true);
191
+ SetActiveSafe(restored, false);
192
+ SetActiveSafe(dynamicPingIcon, false);
32
193
 
33
- rectTransform.DOAnchorPosY(0f, 0.5f).SetUpdate(true).SetEase(HyperTween.Ease.InQuad);
194
+ if (rectTransform != null)
195
+ rectTransform.DOAnchorPosY(0f, 0.5f).SetUpdate(true).SetEase(HyperTween.Ease.InQuad);
34
196
  }
35
197
 
36
- void ConnectionRestored()
198
+ private void ConnectionRestored()
37
199
  {
38
- lost.SetActive(false);
39
- restored.SetActive(true);
200
+ SetActiveSafe(lost, false);
201
+ SetActiveSafe(restored, false);
202
+ SetActiveSafe(dynamicPingIcon, ShouldUseDynamicPingIcon());
40
203
 
41
- rectTransform.DOAnchorPosY(0, 0.5f).SetUpdate(true).SetEase(HyperTween.Ease.InQuad).OnComplete(() =>
204
+ if (rectTransform != null)
42
205
  {
43
- HyperTween.DelayedCall(4f, () =>
206
+ rectTransform.DOAnchorPosY(0f, 0.5f).SetUpdate(true).SetEase(HyperTween.Ease.InQuad).OnComplete(() =>
44
207
  {
45
- rectTransform.DOAnchorPosY(-100f, 0.5f).SetUpdate(true).SetEase(HyperTween.Ease.InQuad);
208
+ if (!ShouldUseDynamicPingIcon())
209
+ {
210
+ HyperTween.DelayedCall(4f, () =>
211
+ {
212
+ if (rectTransform != null)
213
+ rectTransform.DOAnchorPosY(-100f, 0.5f).SetUpdate(true).SetEase(HyperTween.Ease.InQuad);
214
+ });
215
+ }
46
216
  });
47
- });
217
+ }
218
+ }
219
+
220
+ private void ApplyStandardVisibility()
221
+ {
222
+ SetActiveSafe(lost, false);
223
+ SetActiveSafe(restored, false);
224
+ SetActiveSafe(dynamicPingIcon, ShouldUseDynamicPingIcon());
225
+ }
226
+
227
+ private bool ShouldUseDynamicPingIcon()
228
+ {
229
+ if (HyperRuntime.GameManager == null || !HyperRuntime.GameManager.IsBattleMode)
230
+ return false;
231
+
232
+ if (_backendManager == null)
233
+ return true;
234
+
235
+ return _backendManager.GetServerUrl() != HypergamesProductionApiUrl;
236
+ }
237
+
238
+ private static void SetActiveSafe(GameObject go, bool active)
239
+ {
240
+ if (go != null)
241
+ go.SetActive(active);
48
242
  }
49
- }
50
243
 
244
+ private void RefreshPingBars(int lat, bool socketOk)
245
+ {
246
+ bool isGoodPing = socketOk && lat >= 0 && lat <= goodPingMaxMs;
247
+ Color tone = isGoodPing ? goodPingColor : averagePingColor;
248
+
249
+ float stressT;
250
+ if (!socketOk || lat < 0)
251
+ {
252
+ stressT = 1f;
253
+ }
254
+ else
255
+ {
256
+ float span = Mathf.Max(1f, badPingMaxMs);
257
+ stressT = Mathf.Clamp01(lat / span);
258
+ }
259
+
260
+ float topAlpha = Mathf.Lerp(TopBarAlphaGood, TopBarAlphaBad, stressT);
261
+ float midAlpha = Mathf.Lerp(MidBarAlphaGood, MidBarAlphaBad, stressT);
262
+ float lowAlpha = Mathf.Lerp(LowBarAlphaGood, LowBarAlphaBad, stressT);
263
+
264
+ topAlpha = Mathf.Max(topAlpha, BarAlphaFloor);
265
+ midAlpha = Mathf.Max(midAlpha, BarAlphaFloor);
266
+ lowAlpha = Mathf.Max(lowAlpha, BarAlphaFloor);
267
+
268
+ ApplyBarTint(goodPingBar, tone, topAlpha);
269
+ ApplyBarTint(averagePingBar, tone, midAlpha);
270
+ ApplyBarTint(lowPingBar, tone, lowAlpha);
271
+
272
+ ApplyToneFixedAlpha(wifiBackgroundImage, tone, WifiBackgroundAlpha);
273
+ ApplyToneFixedAlpha(wifiDotImage, tone, WifiDotAlpha);
274
+ }
275
+
276
+ private static void ApplyBarTint(Image img, Color toneRgb, float alphaMultiplier)
277
+ {
278
+ if (img == null)
279
+ return;
280
+
281
+ Color c = toneRgb;
282
+ c.a = Mathf.Clamp01(toneRgb.a * Mathf.Clamp01(alphaMultiplier));
283
+ img.color = c;
284
+ }
285
+
286
+ private static void ApplyToneFixedAlpha(Image img, Color toneRgb, float alpha)
287
+ {
288
+ if (img == null)
289
+ return;
290
+
291
+ Color c = toneRgb;
292
+ c.a = alpha;
293
+ img.color = c;
294
+ }
295
+ }
51
296
  }
@@ -74,7 +74,7 @@ namespace Hyper.Internal
74
74
 
75
75
  loadingCircle.SetActive(true);
76
76
 
77
- HyperRuntime.BackendManager.LogEvent(ConsoleEventType.sdk_GameEndNoInternet);
77
+ HyperRuntime.BackendManager.LogEvent(ConsoleEventType.GameEnd);
78
78
  }
79
79
 
80
80
  public void Retry()
@@ -1,11 +1,13 @@
1
1
  mergeInto(LibraryManager.library, {
2
2
  $CachedTutorialData: null,
3
3
 
4
- FetchAndCacheTutorials: function (gameSlugPtr, gameObjectPtr) {
4
+ FetchAndCacheTutorials: function (serverBaseUrlPtr, gameSlugPtr, gameObjectPtr) {
5
+ let baseUrl = UTF8ToString(serverBaseUrlPtr);
6
+ if (baseUrl.endsWith("/")) baseUrl = baseUrl.slice(0, -1);
5
7
  const gameSlug = UTF8ToString(gameSlugPtr);
6
8
  const gameObject = UTF8ToString(gameObjectPtr);
7
9
 
8
- const endpoint = `https://api.dev.hypergames.app/games/${gameSlug}/tutorials`;
10
+ const endpoint = `${baseUrl}/games/${gameSlug}/tutorials`;
9
11
 
10
12
  caches.open("tutorial-cache").then(async (cache) => {
11
13
  try {
@@ -45,6 +45,11 @@ mergeInto(LibraryManager.library, {
45
45
  const msg = JSON.stringify(data);
46
46
  SendMessage('HyperSDKSingleton', 'OnSocketScoreUpdated', msg);
47
47
  });
48
+
49
+ socket.on('sdkPong', (data) => {
50
+ const msg = JSON.stringify(data);
51
+ SendMessage('HyperSDKSingleton', 'OnSocketSdkPong', msg);
52
+ });
48
53
  },
49
54
 
50
55
  SendWebSocketMessage: function (messagePtr) {
@@ -0,0 +1,169 @@
1
+ fileFormatVersion: 2
2
+ guid: 7ea254ee7cab588419030e57237587e2
3
+ TextureImporter:
4
+ internalIDToNameTable:
5
+ - first:
6
+ 213: -505862413677581413
7
+ second: Group 36946_0
8
+ externalObjects: {}
9
+ serializedVersion: 13
10
+ mipmaps:
11
+ mipMapMode: 0
12
+ enableMipMap: 0
13
+ sRGBTexture: 1
14
+ linearTexture: 0
15
+ fadeOut: 0
16
+ borderMipMap: 0
17
+ mipMapsPreserveCoverage: 0
18
+ alphaTestReferenceValue: 0.5
19
+ mipMapFadeDistanceStart: 1
20
+ mipMapFadeDistanceEnd: 3
21
+ bumpmap:
22
+ convertToNormalMap: 0
23
+ externalNormalMap: 0
24
+ heightScale: 0.25
25
+ normalMapFilter: 0
26
+ flipGreenChannel: 0
27
+ isReadable: 0
28
+ streamingMipmaps: 0
29
+ streamingMipmapsPriority: 0
30
+ vTOnly: 0
31
+ ignoreMipmapLimit: 0
32
+ grayScaleToAlpha: 0
33
+ generateCubemap: 6
34
+ cubemapConvolution: 0
35
+ seamlessCubemap: 0
36
+ textureFormat: 1
37
+ maxTextureSize: 2048
38
+ textureSettings:
39
+ serializedVersion: 2
40
+ filterMode: 1
41
+ aniso: 1
42
+ mipBias: 0
43
+ wrapU: 1
44
+ wrapV: 1
45
+ wrapW: 1
46
+ nPOTScale: 0
47
+ lightmap: 0
48
+ compressionQuality: 50
49
+ spriteMode: 1
50
+ spriteExtrude: 1
51
+ spriteMeshType: 1
52
+ alignment: 0
53
+ spritePivot: {x: 0.5, y: 0.5}
54
+ spritePixelsToUnits: 100
55
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
56
+ spriteGenerateFallbackPhysicsShape: 1
57
+ alphaUsage: 1
58
+ alphaIsTransparency: 1
59
+ spriteTessellationDetail: -1
60
+ textureType: 8
61
+ textureShape: 1
62
+ singleChannelComponent: 0
63
+ flipbookRows: 1
64
+ flipbookColumns: 1
65
+ maxTextureSizeSet: 0
66
+ compressionQualitySet: 0
67
+ textureFormatSet: 0
68
+ ignorePngGamma: 0
69
+ applyGammaDecoding: 0
70
+ swizzle: 50462976
71
+ cookieLightType: 0
72
+ platformSettings:
73
+ - serializedVersion: 4
74
+ buildTarget: DefaultTexturePlatform
75
+ maxTextureSize: 2048
76
+ resizeAlgorithm: 0
77
+ textureFormat: -1
78
+ textureCompression: 1
79
+ compressionQuality: 50
80
+ crunchedCompression: 0
81
+ allowsAlphaSplitting: 0
82
+ overridden: 0
83
+ ignorePlatformSupport: 0
84
+ androidETC2FallbackOverride: 0
85
+ forceMaximumCompressionQuality_BC6H_BC7: 0
86
+ - serializedVersion: 4
87
+ buildTarget: Standalone
88
+ maxTextureSize: 2048
89
+ resizeAlgorithm: 0
90
+ textureFormat: -1
91
+ textureCompression: 1
92
+ compressionQuality: 50
93
+ crunchedCompression: 0
94
+ allowsAlphaSplitting: 0
95
+ overridden: 0
96
+ ignorePlatformSupport: 0
97
+ androidETC2FallbackOverride: 0
98
+ forceMaximumCompressionQuality_BC6H_BC7: 0
99
+ - serializedVersion: 4
100
+ buildTarget: Android
101
+ maxTextureSize: 2048
102
+ resizeAlgorithm: 0
103
+ textureFormat: -1
104
+ textureCompression: 1
105
+ compressionQuality: 50
106
+ crunchedCompression: 0
107
+ allowsAlphaSplitting: 0
108
+ overridden: 0
109
+ ignorePlatformSupport: 0
110
+ androidETC2FallbackOverride: 0
111
+ forceMaximumCompressionQuality_BC6H_BC7: 0
112
+ - serializedVersion: 4
113
+ buildTarget: WebGL
114
+ maxTextureSize: 2048
115
+ resizeAlgorithm: 0
116
+ textureFormat: -1
117
+ textureCompression: 1
118
+ compressionQuality: 50
119
+ crunchedCompression: 0
120
+ allowsAlphaSplitting: 0
121
+ overridden: 0
122
+ ignorePlatformSupport: 0
123
+ androidETC2FallbackOverride: 0
124
+ forceMaximumCompressionQuality_BC6H_BC7: 0
125
+ spriteSheet:
126
+ serializedVersion: 2
127
+ sprites:
128
+ - serializedVersion: 2
129
+ name: Group 36946_0
130
+ rect:
131
+ serializedVersion: 2
132
+ x: 0
133
+ y: 0
134
+ width: 64
135
+ height: 64
136
+ alignment: 0
137
+ pivot: {x: 0, y: 0}
138
+ border: {x: 0, y: 0, z: 0, w: 0}
139
+ customData:
140
+ outline: []
141
+ physicsShape: []
142
+ tessellationDetail: -1
143
+ bones: []
144
+ spriteID: b9ba68f90d0daf8f0800000000000000
145
+ internalID: -505862413677581413
146
+ vertices: []
147
+ indices:
148
+ edges: []
149
+ weights: []
150
+ outline: []
151
+ customData:
152
+ physicsShape: []
153
+ bones: []
154
+ spriteID: 5e97eb03825dee720800000000000000
155
+ internalID: 0
156
+ vertices: []
157
+ indices:
158
+ edges: []
159
+ weights: []
160
+ secondaryTextures: []
161
+ spriteCustomMetadata:
162
+ entries: []
163
+ nameFileIdTable:
164
+ Group 36946_0: -505862413677581413
165
+ mipmapLimitGroupName:
166
+ pSDRemoveMatte: 0
167
+ userData:
168
+ assetBundleName:
169
+ assetBundleVariant:
@@ -0,0 +1,169 @@
1
+ fileFormatVersion: 2
2
+ guid: 59e469bf5447a2843984dd0d1e3e49b6
3
+ TextureImporter:
4
+ internalIDToNameTable:
5
+ - first:
6
+ 213: -1671329636532071926
7
+ second: Group-1_0
8
+ externalObjects: {}
9
+ serializedVersion: 13
10
+ mipmaps:
11
+ mipMapMode: 0
12
+ enableMipMap: 0
13
+ sRGBTexture: 1
14
+ linearTexture: 0
15
+ fadeOut: 0
16
+ borderMipMap: 0
17
+ mipMapsPreserveCoverage: 0
18
+ alphaTestReferenceValue: 0.5
19
+ mipMapFadeDistanceStart: 1
20
+ mipMapFadeDistanceEnd: 3
21
+ bumpmap:
22
+ convertToNormalMap: 0
23
+ externalNormalMap: 0
24
+ heightScale: 0.25
25
+ normalMapFilter: 0
26
+ flipGreenChannel: 0
27
+ isReadable: 0
28
+ streamingMipmaps: 0
29
+ streamingMipmapsPriority: 0
30
+ vTOnly: 0
31
+ ignoreMipmapLimit: 0
32
+ grayScaleToAlpha: 0
33
+ generateCubemap: 6
34
+ cubemapConvolution: 0
35
+ seamlessCubemap: 0
36
+ textureFormat: 1
37
+ maxTextureSize: 2048
38
+ textureSettings:
39
+ serializedVersion: 2
40
+ filterMode: 1
41
+ aniso: 1
42
+ mipBias: 0
43
+ wrapU: 1
44
+ wrapV: 1
45
+ wrapW: 1
46
+ nPOTScale: 0
47
+ lightmap: 0
48
+ compressionQuality: 50
49
+ spriteMode: 1
50
+ spriteExtrude: 1
51
+ spriteMeshType: 1
52
+ alignment: 0
53
+ spritePivot: {x: 0.5, y: 0.5}
54
+ spritePixelsToUnits: 100
55
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
56
+ spriteGenerateFallbackPhysicsShape: 1
57
+ alphaUsage: 1
58
+ alphaIsTransparency: 1
59
+ spriteTessellationDetail: -1
60
+ textureType: 8
61
+ textureShape: 1
62
+ singleChannelComponent: 0
63
+ flipbookRows: 1
64
+ flipbookColumns: 1
65
+ maxTextureSizeSet: 0
66
+ compressionQualitySet: 0
67
+ textureFormatSet: 0
68
+ ignorePngGamma: 0
69
+ applyGammaDecoding: 0
70
+ swizzle: 50462976
71
+ cookieLightType: 0
72
+ platformSettings:
73
+ - serializedVersion: 4
74
+ buildTarget: DefaultTexturePlatform
75
+ maxTextureSize: 256
76
+ resizeAlgorithm: 0
77
+ textureFormat: -1
78
+ textureCompression: 1
79
+ compressionQuality: 50
80
+ crunchedCompression: 1
81
+ allowsAlphaSplitting: 0
82
+ overridden: 0
83
+ ignorePlatformSupport: 0
84
+ androidETC2FallbackOverride: 0
85
+ forceMaximumCompressionQuality_BC6H_BC7: 0
86
+ - serializedVersion: 4
87
+ buildTarget: Standalone
88
+ maxTextureSize: 2048
89
+ resizeAlgorithm: 0
90
+ textureFormat: -1
91
+ textureCompression: 1
92
+ compressionQuality: 50
93
+ crunchedCompression: 0
94
+ allowsAlphaSplitting: 0
95
+ overridden: 0
96
+ ignorePlatformSupport: 0
97
+ androidETC2FallbackOverride: 0
98
+ forceMaximumCompressionQuality_BC6H_BC7: 0
99
+ - serializedVersion: 4
100
+ buildTarget: Android
101
+ maxTextureSize: 2048
102
+ resizeAlgorithm: 0
103
+ textureFormat: -1
104
+ textureCompression: 1
105
+ compressionQuality: 50
106
+ crunchedCompression: 0
107
+ allowsAlphaSplitting: 0
108
+ overridden: 0
109
+ ignorePlatformSupport: 0
110
+ androidETC2FallbackOverride: 0
111
+ forceMaximumCompressionQuality_BC6H_BC7: 0
112
+ - serializedVersion: 4
113
+ buildTarget: WebGL
114
+ maxTextureSize: 2048
115
+ resizeAlgorithm: 0
116
+ textureFormat: -1
117
+ textureCompression: 1
118
+ compressionQuality: 50
119
+ crunchedCompression: 0
120
+ allowsAlphaSplitting: 0
121
+ overridden: 0
122
+ ignorePlatformSupport: 0
123
+ androidETC2FallbackOverride: 0
124
+ forceMaximumCompressionQuality_BC6H_BC7: 0
125
+ spriteSheet:
126
+ serializedVersion: 2
127
+ sprites:
128
+ - serializedVersion: 2
129
+ name: Group-1_0
130
+ rect:
131
+ serializedVersion: 2
132
+ x: 0
133
+ y: 0
134
+ width: 47
135
+ height: 16
136
+ alignment: 0
137
+ pivot: {x: 0, y: 0}
138
+ border: {x: 0, y: 0, z: 0, w: 0}
139
+ customData:
140
+ outline: []
141
+ physicsShape: []
142
+ tessellationDetail: -1
143
+ bones: []
144
+ spriteID: a025ce7fc8e3ec8e0800000000000000
145
+ internalID: -1671329636532071926
146
+ vertices: []
147
+ indices:
148
+ edges: []
149
+ weights: []
150
+ outline: []
151
+ customData:
152
+ physicsShape: []
153
+ bones: []
154
+ spriteID: 5e97eb03825dee720800000000000000
155
+ internalID: 0
156
+ vertices: []
157
+ indices:
158
+ edges: []
159
+ weights: []
160
+ secondaryTextures: []
161
+ spriteCustomMetadata:
162
+ entries: []
163
+ nameFileIdTable:
164
+ Group-1_0: -1671329636532071926
165
+ mipmapLimitGroupName:
166
+ pSDRemoveMatte: 0
167
+ userData:
168
+ assetBundleName:
169
+ assetBundleVariant: