sonolus.py 0.1.0__py3-none-any.whl → 0.1.2__py3-none-any.whl

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.

Potentially problematic release.


This version of sonolus.py might be problematic. Click here for more details.

sonolus/script/runtime.py CHANGED
@@ -7,17 +7,24 @@ from sonolus.script.globals import (
7
7
  _level_life,
8
8
  _level_score,
9
9
  _play_runtime_environment,
10
+ _play_runtime_ui,
11
+ _play_runtime_ui_configuration,
10
12
  _play_runtime_update,
13
+ _preview_runtime_canvas,
11
14
  _preview_runtime_environment,
15
+ _preview_runtime_ui,
16
+ _preview_runtime_ui_configuration,
12
17
  _runtime_background,
13
18
  _runtime_particle_transform,
14
19
  _runtime_skin_transform,
15
20
  _runtime_touch_array,
16
- _runtime_ui,
17
- _runtime_ui_configuration,
18
21
  _tutorial_runtime_environment,
22
+ _tutorial_runtime_ui,
23
+ _tutorial_runtime_ui_configuration,
19
24
  _tutorial_runtime_update,
20
25
  _watch_runtime_environment,
26
+ _watch_runtime_ui,
27
+ _watch_runtime_ui_configuration,
21
28
  _watch_runtime_update,
22
29
  )
23
30
  from sonolus.script.graphics import Quad, Rect
@@ -83,21 +90,56 @@ class _TutorialRuntimeUpdate:
83
90
  navigation_direction: int
84
91
 
85
92
 
93
+ class ScrollDirection(IntEnum):
94
+ LEFT_TO_RIGHT = 0
95
+ TOP_TO_BOTTOM = 1
96
+ RIGHT_TO_LEFT = 2
97
+ BOTTOM_TO_TOP = 3
98
+
99
+
100
+ @_preview_runtime_canvas
101
+ class _PreviewRuntimeCanvas:
102
+ scroll_direction: ScrollDirection
103
+ size: float
104
+
105
+
86
106
  class RuntimeUiConfig(Record):
87
107
  scale: float
88
108
  alpha: float
89
109
 
90
110
 
91
- @_runtime_ui_configuration
92
- class _RuntimeUiConfigs:
111
+ @_play_runtime_ui_configuration
112
+ class _PlayRuntimeUiConfigs:
93
113
  menu: RuntimeUiConfig
94
114
  judgment: RuntimeUiConfig
95
115
  combo: RuntimeUiConfig
96
116
  primary_metric: RuntimeUiConfig
97
117
  secondary_metric: RuntimeUiConfig
118
+
119
+
120
+ @_watch_runtime_ui_configuration
121
+ class _WatchRuntimeUiConfigs:
122
+ menu: RuntimeUiConfig
123
+ judgment: RuntimeUiConfig
124
+ combo: RuntimeUiConfig
125
+ primary_metric: RuntimeUiConfig
126
+ secondary_metric: RuntimeUiConfig
127
+ progress: RuntimeUiConfig
128
+
129
+
130
+ @_preview_runtime_ui_configuration
131
+ class _PreviewRuntimeUiConfigs:
132
+ menu: RuntimeUiConfig
98
133
  progress: RuntimeUiConfig
99
134
 
100
135
 
136
+ @_tutorial_runtime_ui_configuration
137
+ class _TutorialRuntimeUiConfigs:
138
+ menu: RuntimeUiConfig
139
+ navigation: RuntimeUiConfig
140
+ instruction: RuntimeUiConfig
141
+
142
+
101
143
  class HorizontalAlign(IntEnum):
102
144
  LEFT = -1
103
145
  CENTER = 0
@@ -139,8 +181,20 @@ class RuntimeUiLayout(Record):
139
181
  self.background = background
140
182
 
141
183
 
142
- @_runtime_ui
143
- class _RuntimeUi:
184
+ @_play_runtime_ui
185
+ class _PlayRuntimeUi:
186
+ menu: RuntimeUiLayout
187
+ judgment: RuntimeUiLayout
188
+ combo_value: RuntimeUiLayout
189
+ combo_text: RuntimeUiLayout
190
+ primary_metric_bar: RuntimeUiLayout
191
+ primary_metric_value: RuntimeUiLayout
192
+ secondary_metric_bar: RuntimeUiLayout
193
+ secondary_metric_value: RuntimeUiLayout
194
+
195
+
196
+ @_watch_runtime_ui
197
+ class _WatchRuntimeUi:
144
198
  menu: RuntimeUiLayout
145
199
  judgment: RuntimeUiLayout
146
200
  combo_value: RuntimeUiLayout
@@ -152,6 +206,20 @@ class _RuntimeUi:
152
206
  progress: RuntimeUiLayout
153
207
 
154
208
 
209
+ @_preview_runtime_ui
210
+ class _PreviewRuntimeUi:
211
+ menu: RuntimeUiLayout
212
+ progress: RuntimeUiLayout
213
+
214
+
215
+ @_tutorial_runtime_ui
216
+ class _TutorialRuntimeUi:
217
+ menu: RuntimeUiLayout
218
+ previous: RuntimeUiLayout
219
+ next: RuntimeUiLayout
220
+ instruction: RuntimeUiLayout
221
+
222
+
155
223
  class Touch(Record):
156
224
  id: int
157
225
  started: bool
@@ -329,13 +397,13 @@ def is_debug() -> bool:
329
397
  if not ctx():
330
398
  return False
331
399
  match ctx().global_state.mode:
332
- case Mode.Play:
400
+ case Mode.PLAY:
333
401
  return _PlayRuntimeEnvironment.is_debug
334
- case Mode.Watch:
402
+ case Mode.WATCH:
335
403
  return _WatchRuntimeEnvironment.is_debug
336
- case Mode.Preview:
404
+ case Mode.PREVIEW:
337
405
  return _PreviewRuntimeEnvironment.is_debug
338
- case Mode.Tutorial:
406
+ case Mode.TUTORIAL:
339
407
  return _TutorialRuntimeEnvironment.is_debug
340
408
  case _:
341
409
  return False
@@ -346,13 +414,13 @@ def aspect_ratio() -> float:
346
414
  if not ctx():
347
415
  return 16 / 9
348
416
  match ctx().global_state.mode:
349
- case Mode.Play:
417
+ case Mode.PLAY:
350
418
  return _PlayRuntimeEnvironment.aspect_ratio
351
- case Mode.Watch:
419
+ case Mode.WATCH:
352
420
  return _WatchRuntimeEnvironment.aspect_ratio
353
- case Mode.Preview:
421
+ case Mode.PREVIEW:
354
422
  return _PreviewRuntimeEnvironment.aspect_ratio
355
- case Mode.Tutorial:
423
+ case Mode.TUTORIAL:
356
424
  return _TutorialRuntimeEnvironment.aspect_ratio
357
425
 
358
426
 
@@ -361,11 +429,11 @@ def audio_offset() -> float:
361
429
  if not ctx():
362
430
  return 0
363
431
  match ctx().global_state.mode:
364
- case Mode.Play:
432
+ case Mode.PLAY:
365
433
  return _PlayRuntimeEnvironment.audio_offset
366
- case Mode.Watch:
434
+ case Mode.WATCH:
367
435
  return _WatchRuntimeEnvironment.audio_offset
368
- case Mode.Tutorial:
436
+ case Mode.TUTORIAL:
369
437
  return _TutorialRuntimeEnvironment.audio_offset
370
438
  case _:
371
439
  return 0
@@ -376,9 +444,9 @@ def input_offset() -> float:
376
444
  if not ctx():
377
445
  return 0
378
446
  match ctx().global_state.mode:
379
- case Mode.Play:
447
+ case Mode.PLAY:
380
448
  return _PlayRuntimeEnvironment.input_offset
381
- case Mode.Watch:
449
+ case Mode.WATCH:
382
450
  return _WatchRuntimeEnvironment.input_offset
383
451
  case _:
384
452
  return 0
@@ -389,7 +457,7 @@ def is_multiplayer() -> bool:
389
457
  if not ctx():
390
458
  return False
391
459
  match ctx().global_state.mode:
392
- case Mode.Play:
460
+ case Mode.PLAY:
393
461
  return _PlayRuntimeEnvironment.is_multiplayer
394
462
  case _:
395
463
  return False
@@ -400,7 +468,7 @@ def is_replay() -> bool:
400
468
  if not ctx():
401
469
  return False
402
470
  match ctx().global_state.mode:
403
- case Mode.Watch:
471
+ case Mode.WATCH:
404
472
  return _WatchRuntimeEnvironment.is_replay
405
473
  case _:
406
474
  return False
@@ -411,11 +479,11 @@ def time() -> float:
411
479
  if not ctx():
412
480
  return 0
413
481
  match ctx().global_state.mode:
414
- case Mode.Play:
482
+ case Mode.PLAY:
415
483
  return _PlayRuntimeUpdate.time
416
- case Mode.Watch:
484
+ case Mode.WATCH:
417
485
  return _WatchRuntimeUpdate.time
418
- case Mode.Tutorial:
486
+ case Mode.TUTORIAL:
419
487
  return _TutorialRuntimeUpdate.time
420
488
  case _:
421
489
  return 0
@@ -426,11 +494,11 @@ def delta_time() -> float:
426
494
  if not ctx():
427
495
  return 0
428
496
  match ctx().global_state.mode:
429
- case Mode.Play:
497
+ case Mode.PLAY:
430
498
  return _PlayRuntimeUpdate.delta_time
431
- case Mode.Watch:
499
+ case Mode.WATCH:
432
500
  return _WatchRuntimeUpdate.delta_time
433
- case Mode.Tutorial:
501
+ case Mode.TUTORIAL:
434
502
  return _TutorialRuntimeUpdate.delta_time
435
503
  case _:
436
504
  return 0
@@ -441,11 +509,11 @@ def scaled_time() -> float:
441
509
  if not ctx():
442
510
  return 0
443
511
  match ctx().global_state.mode:
444
- case Mode.Play:
512
+ case Mode.PLAY:
445
513
  return _PlayRuntimeUpdate.scaled_time
446
- case Mode.Watch:
514
+ case Mode.WATCH:
447
515
  return _WatchRuntimeUpdate.scaled_time
448
- case Mode.Tutorial:
516
+ case Mode.TUTORIAL:
449
517
  return _TutorialRuntimeUpdate.time
450
518
  case _:
451
519
  return 0
@@ -456,7 +524,7 @@ def touches() -> VarArray[Touch, 999]:
456
524
  if not ctx():
457
525
  return VarArray(0, Array[Touch, 0]())
458
526
  match ctx().global_state.mode:
459
- case Mode.Play:
527
+ case Mode.PLAY:
460
528
  return VarArray(_PlayRuntimeUpdate.touch_count, _TouchArray.touches)
461
529
  case _:
462
530
  return VarArray(0, Array[Touch, 0]())
@@ -467,7 +535,7 @@ def is_skip() -> bool:
467
535
  if not ctx():
468
536
  return False
469
537
  match ctx().global_state.mode:
470
- case Mode.Watch:
538
+ case Mode.WATCH:
471
539
  return _WatchRuntimeUpdate.is_skip
472
540
  case _:
473
541
  return False
@@ -478,7 +546,7 @@ def navigation_direction() -> int:
478
546
  if not ctx():
479
547
  return 0
480
548
  match ctx().global_state.mode:
481
- case Mode.Tutorial:
549
+ case Mode.TUTORIAL:
482
550
  return _TutorialRuntimeUpdate.navigation_direction
483
551
  case _:
484
552
  return 0
@@ -510,8 +578,18 @@ def set_background(value: Quad):
510
578
  _Background.value = value
511
579
 
512
580
 
513
- runtime_ui = _RuntimeUi
514
- runtime_ui_configs = _RuntimeUiConfigs
581
+ play_ui = _PlayRuntimeUi
582
+ play_ui_configs = _PlayRuntimeUiConfigs
583
+ watch_ui = _WatchRuntimeUi
584
+ watch_ui_configs = _WatchRuntimeUiConfigs
585
+ preview_ui = _PreviewRuntimeUi
586
+ preview_ui_configs = _PreviewRuntimeUiConfigs
587
+ tutorial_ui = _TutorialRuntimeUi
588
+ tutorial_ui_configs = _TutorialRuntimeUiConfigs
589
+
590
+
591
+ def canvas() -> _PreviewRuntimeCanvas:
592
+ return _PreviewRuntimeCanvas
515
593
 
516
594
 
517
595
  def screen() -> Rect:
sonolus/script/sprite.py CHANGED
@@ -1,5 +1,5 @@
1
1
  from dataclasses import dataclass
2
- from typing import Annotated, Any, Protocol, dataclass_transform, get_origin
2
+ from typing import Annotated, Any, NewType, dataclass_transform, get_origin
3
3
 
4
4
  from sonolus.backend.ops import Op
5
5
  from sonolus.script.graphics import QuadLike, flatten_quad
@@ -193,8 +193,7 @@ def skin_sprite(name: str) -> Any:
193
193
  return SkinSprite(name)
194
194
 
195
195
 
196
- class Skin(Protocol):
197
- _sprites_: list[str]
196
+ type Skin = NewType("Skin", Any)
198
197
 
199
198
 
200
199
  @dataclass_transform()
@@ -221,110 +220,112 @@ def skin[T](cls: type[T]) -> T | Skin:
221
220
 
222
221
 
223
222
  class StandardSprite:
224
- NoteHeadNeutral = Annotated[Sprite, skin_sprite("#NOTE_HEAD_NEUTRAL")]
225
- NoteHeadRed = Annotated[Sprite, skin_sprite("#NOTE_HEAD_RED")]
226
- NoteHeadGreen = Annotated[Sprite, skin_sprite("#NOTE_HEAD_GREEN")]
227
- NoteHeadBlue = Annotated[Sprite, skin_sprite("#NOTE_HEAD_BLUE")]
228
- NoteHeadYellow = Annotated[Sprite, skin_sprite("#NOTE_HEAD_YELLOW")]
229
- NoteHeadPurple = Annotated[Sprite, skin_sprite("#NOTE_HEAD_PURPLE")]
230
- NoteHeadCyan = Annotated[Sprite, skin_sprite("#NOTE_HEAD_CYAN")]
231
-
232
- NoteTickNeutral = Annotated[Sprite, skin_sprite("#NOTE_TICK_NEUTRAL")]
233
- NoteTickRed = Annotated[Sprite, skin_sprite("#NOTE_TICK_RED")]
234
- NoteTickGreen = Annotated[Sprite, skin_sprite("#NOTE_TICK_GREEN")]
235
- NoteTickBlue = Annotated[Sprite, skin_sprite("#NOTE_TICK_BLUE")]
236
- NoteTickYellow = Annotated[Sprite, skin_sprite("#NOTE_TICK_YELLOW")]
237
- NoteTickPurple = Annotated[Sprite, skin_sprite("#NOTE_TICK_PURPLE")]
238
- NoteTickCyan = Annotated[Sprite, skin_sprite("#NOTE_TICK_CYAN")]
239
-
240
- NoteTailNeutral = Annotated[Sprite, skin_sprite("#NOTE_TAIL_NEUTRAL")]
241
- NoteTailRed = Annotated[Sprite, skin_sprite("#NOTE_TAIL_RED")]
242
- NoteTailGreen = Annotated[Sprite, skin_sprite("#NOTE_TAIL_GREEN")]
243
- NoteTailBlue = Annotated[Sprite, skin_sprite("#NOTE_TAIL_BLUE")]
244
- NoteTailYellow = Annotated[Sprite, skin_sprite("#NOTE_TAIL_YELLOW")]
245
- NoteTailPurple = Annotated[Sprite, skin_sprite("#NOTE_TAIL_PURPLE")]
246
- NoteTailCyan = Annotated[Sprite, skin_sprite("#NOTE_TAIL_CYAN")]
247
-
248
- NoteConnectionNeutral = Annotated[Sprite, skin_sprite("#NOTE_CONNECTION_NEUTRAL")]
249
- NoteConnectionRed = Annotated[Sprite, skin_sprite("#NOTE_CONNECTION_RED")]
250
- NoteConnectionGreen = Annotated[Sprite, skin_sprite("#NOTE_CONNECTION_GREEN")]
251
- NoteConnectionBlue = Annotated[Sprite, skin_sprite("#NOTE_CONNECTION_BLUE")]
252
- NoteConnectionYellow = Annotated[Sprite, skin_sprite("#NOTE_CONNECTION_YELLOW")]
253
- NoteConnectionPurple = Annotated[Sprite, skin_sprite("#NOTE_CONNECTION_PURPLE")]
254
- NoteConnectionCyan = Annotated[Sprite, skin_sprite("#NOTE_CONNECTION_CYAN")]
255
-
256
- NoteConnectionNeutralSeamless = Annotated[Sprite, skin_sprite("#NOTE_CONNECTION_NEUTRAL_SEAMLESS")]
257
- NoteConnectionRedSeamless = Annotated[Sprite, skin_sprite("#NOTE_CONNECTION_RED_SEAMLESS")]
258
- NoteConnectionGreenSeamless = Annotated[Sprite, skin_sprite("#NOTE_CONNECTION_GREEN_SEAMLESS")]
259
- NoteConnectionBlueSeamless = Annotated[Sprite, skin_sprite("#NOTE_CONNECTION_BLUE_SEAMLESS")]
260
- NoteConnectionYellowSeamless = Annotated[Sprite, skin_sprite("#NOTE_CONNECTION_YELLOW_SEAMLESS")]
261
- NoteConnectionPurpleSeamless = Annotated[Sprite, skin_sprite("#NOTE_CONNECTION_PURPLE_SEAMLESS")]
262
- NoteConnectionCyanSeamless = Annotated[Sprite, skin_sprite("#NOTE_CONNECTION_CYAN_SEAMLESS")]
263
-
264
- SimultaneousConnectionNeutral = Annotated[Sprite, skin_sprite("#SIMULTANEOUS_CONNECTION_NEUTRAL")]
265
- SimultaneousConnectionRed = Annotated[Sprite, skin_sprite("#SIMULTANEOUS_CONNECTION_RED")]
266
- SimultaneousConnectionGreen = Annotated[Sprite, skin_sprite("#SIMULTANEOUS_CONNECTION_GREEN")]
267
- SimultaneousConnectionBlue = Annotated[Sprite, skin_sprite("#SIMULTANEOUS_CONNECTION_BLUE")]
268
- SimultaneousConnectionYellow = Annotated[Sprite, skin_sprite("#SIMULTANEOUS_CONNECTION_YELLOW")]
269
- SimultaneousConnectionPurple = Annotated[Sprite, skin_sprite("#SIMULTANEOUS_CONNECTION_PURPLE")]
270
- SimultaneousConnectionCyan = Annotated[Sprite, skin_sprite("#SIMULTANEOUS_CONNECTION_CYAN")]
271
-
272
- SimultaneousConnectionNeutralSeamless = Annotated[Sprite, skin_sprite("#SIMULTANEOUS_CONNECTION_NEUTRAL_SEAMLESS")]
273
- SimultaneousConnectionRedSeamless = Annotated[Sprite, skin_sprite("#SIMULTANEOUS_CONNECTION_RED_SEAMLESS")]
274
- SimultaneousConnectionGreenSeamless = Annotated[Sprite, skin_sprite("#SIMULTANEOUS_CONNECTION_GREEN_SEAMLESS")]
275
- SimultaneousConnectionBlueSeamless = Annotated[Sprite, skin_sprite("#SIMULTANEOUS_CONNECTION_BLUE_SEAMLESS")]
276
- SimultaneousConnectionYellowSeamless = Annotated[Sprite, skin_sprite("#SIMULTANEOUS_CONNECTION_YELLOW_SEAMLESS")]
277
- SimultaneousConnectionPurpleSeamless = Annotated[Sprite, skin_sprite("#SIMULTANEOUS_CONNECTION_PURPLE_SEAMLESS")]
278
- SimultaneousConnectionCyanSeamless = Annotated[Sprite, skin_sprite("#SIMULTANEOUS_CONNECTION_CYAN_SEAMLESS")]
279
-
280
- DirectionalMarkerNeutral = Annotated[Sprite, skin_sprite("#DIRECTIONAL_MARKER_NEUTRAL")]
281
- DirectionalMarkerRed = Annotated[Sprite, skin_sprite("#DIRECTIONAL_MARKER_RED")]
282
- DirectionalMarkerGreen = Annotated[Sprite, skin_sprite("#DIRECTIONAL_MARKER_GREEN")]
283
- DirectionalMarkerBlue = Annotated[Sprite, skin_sprite("#DIRECTIONAL_MARKER_BLUE")]
284
- DirectionalMarkerYellow = Annotated[Sprite, skin_sprite("#DIRECTIONAL_MARKER_YELLOW")]
285
- DirectionalMarkerPurple = Annotated[Sprite, skin_sprite("#DIRECTIONAL_MARKER_PURPLE")]
286
- DirectionalMarkerCyan = Annotated[Sprite, skin_sprite("#DIRECTIONAL_MARKER_CYAN")]
287
-
288
- SimultaneousMarkerNeutral = Annotated[Sprite, skin_sprite("#SIMULTANEOUS_MARKER_NEUTRAL")]
289
- SimultaneousMarkerRed = Annotated[Sprite, skin_sprite("#SIMULTANEOUS_MARKER_RED")]
290
- SimultaneousMarkerGreen = Annotated[Sprite, skin_sprite("#SIMULTANEOUS_MARKER_GREEN")]
291
- SimultaneousMarkerBlue = Annotated[Sprite, skin_sprite("#SIMULTANEOUS_MARKER_BLUE")]
292
- SimultaneousMarkerYellow = Annotated[Sprite, skin_sprite("#SIMULTANEOUS_MARKER_YELLOW")]
293
- SimultaneousMarkerPurple = Annotated[Sprite, skin_sprite("#SIMULTANEOUS_MARKER_PURPLE")]
294
- SimultaneousMarkerCyan = Annotated[Sprite, skin_sprite("#SIMULTANEOUS_MARKER_CYAN")]
295
-
296
- StageMiddle = Annotated[Sprite, skin_sprite("#STAGE_MIDDLE")]
297
- StageLeftBorder = Annotated[Sprite, skin_sprite("#STAGE_LEFT_BORDER")]
298
- StageRightBorder = Annotated[Sprite, skin_sprite("#STAGE_RIGHT_BORDER")]
299
- StageTopBorder = Annotated[Sprite, skin_sprite("#STAGE_TOP_BORDER")]
300
- StageBottomBorder = Annotated[Sprite, skin_sprite("#STAGE_BOTTOM_BORDER")]
301
-
302
- StageLeftBorderSeamless = Annotated[Sprite, skin_sprite("#STAGE_LEFT_BORDER_SEAMLESS")]
303
- StageRightBorderSeamless = Annotated[Sprite, skin_sprite("#STAGE_RIGHT_BORDER_SEAMLESS")]
304
- StageTopBorderSeamless = Annotated[Sprite, skin_sprite("#STAGE_TOP_BORDER_SEAMLESS")]
305
- StageBottomBorderSeamless = Annotated[Sprite, skin_sprite("#STAGE_BOTTOM_BORDER_SEAMLESS")]
306
-
307
- StageTopLeftCorner = Annotated[Sprite, skin_sprite("#STAGE_TOP_LEFT_CORNER")]
308
- StageTopRightCorner = Annotated[Sprite, skin_sprite("#STAGE_TOP_RIGHT_CORNER")]
309
- StageBottomLeftCorner = Annotated[Sprite, skin_sprite("#STAGE_BOTTOM_LEFT_CORNER")]
310
- StageBottomRightCorner = Annotated[Sprite, skin_sprite("#STAGE_BOTTOM_RIGHT_CORNER")]
311
-
312
- Lane = Annotated[Sprite, skin_sprite("#LANE")]
313
- LaneSeamless = Annotated[Sprite, skin_sprite("#LANE_SEAMLESS")]
314
- LaneAlternative = Annotated[Sprite, skin_sprite("#LANE_ALTERNATIVE")]
315
- LaneAlternativeSeamless = Annotated[Sprite, skin_sprite("#LANE_ALTERNATIVE_SEAMLESS")]
316
-
317
- JudgmentLine = Annotated[Sprite, skin_sprite("#JUDGMENT_LINE")]
318
- NoteSlot = Annotated[Sprite, skin_sprite("#NOTE_SLOT")]
319
- StageCover = Annotated[Sprite, skin_sprite("#STAGE_COVER")]
320
-
321
- GridNeutral = Annotated[Sprite, skin_sprite("#GRID_NEUTRAL")]
322
- GridRed = Annotated[Sprite, skin_sprite("#GRID_RED")]
323
- GridGreen = Annotated[Sprite, skin_sprite("#GRID_GREEN")]
324
- GridBlue = Annotated[Sprite, skin_sprite("#GRID_BLUE")]
325
- GridYellow = Annotated[Sprite, skin_sprite("#GRID_YELLOW")]
326
- GridPurple = Annotated[Sprite, skin_sprite("#GRID_PURPLE")]
327
- GridCyan = Annotated[Sprite, skin_sprite("#GRID_CYAN")]
223
+ NOTE_HEAD_NEUTRAL = Annotated[Sprite, skin_sprite("#NOTE_HEAD_NEUTRAL")]
224
+ NOTE_HEAD_RED = Annotated[Sprite, skin_sprite("#NOTE_HEAD_RED")]
225
+ NOTE_HEAD_GREEN = Annotated[Sprite, skin_sprite("#NOTE_HEAD_GREEN")]
226
+ NOTE_HEAD_BLUE = Annotated[Sprite, skin_sprite("#NOTE_HEAD_BLUE")]
227
+ NOTE_HEAD_YELLOW = Annotated[Sprite, skin_sprite("#NOTE_HEAD_YELLOW")]
228
+ NOTE_HEAD_PURPLE = Annotated[Sprite, skin_sprite("#NOTE_HEAD_PURPLE")]
229
+ NOTE_HEAD_CYAN = Annotated[Sprite, skin_sprite("#NOTE_HEAD_CYAN")]
230
+
231
+ NOTE_TICK_NEUTRAL = Annotated[Sprite, skin_sprite("#NOTE_TICK_NEUTRAL")]
232
+ NOTE_TICK_RED = Annotated[Sprite, skin_sprite("#NOTE_TICK_RED")]
233
+ NOTE_TICK_GREEN = Annotated[Sprite, skin_sprite("#NOTE_TICK_GREEN")]
234
+ NOTE_TICK_BLUE = Annotated[Sprite, skin_sprite("#NOTE_TICK_BLUE")]
235
+ NOTE_TICK_YELLOW = Annotated[Sprite, skin_sprite("#NOTE_TICK_YELLOW")]
236
+ NOTE_TICK_PURPLE = Annotated[Sprite, skin_sprite("#NOTE_TICK_PURPLE")]
237
+ NOTE_TICK_CYAN = Annotated[Sprite, skin_sprite("#NOTE_TICK_CYAN")]
238
+
239
+ NOTE_TAIL_NEUTRAL = Annotated[Sprite, skin_sprite("#NOTE_TAIL_NEUTRAL")]
240
+ NOTE_TAIL_RED = Annotated[Sprite, skin_sprite("#NOTE_TAIL_RED")]
241
+ NOTE_TAIL_GREEN = Annotated[Sprite, skin_sprite("#NOTE_TAIL_GREEN")]
242
+ NOTE_TAIL_BLUE = Annotated[Sprite, skin_sprite("#NOTE_TAIL_BLUE")]
243
+ NOTE_TAIL_YELLOW = Annotated[Sprite, skin_sprite("#NOTE_TAIL_YELLOW")]
244
+ NOTE_TAIL_PURPLE = Annotated[Sprite, skin_sprite("#NOTE_TAIL_PURPLE")]
245
+ NOTE_TAIL_CYAN = Annotated[Sprite, skin_sprite("#NOTE_TAIL_CYAN")]
246
+
247
+ NOTE_CONNECTION_NEUTRAL = Annotated[Sprite, skin_sprite("#NOTE_CONNECTION_NEUTRAL")]
248
+ NOTE_CONNECTION_RED = Annotated[Sprite, skin_sprite("#NOTE_CONNECTION_RED")]
249
+ NOTE_CONNECTION_GREEN = Annotated[Sprite, skin_sprite("#NOTE_CONNECTION_GREEN")]
250
+ NOTE_CONNECTION_BLUE = Annotated[Sprite, skin_sprite("#NOTE_CONNECTION_BLUE")]
251
+ NOTE_CONNECTION_YELLOW = Annotated[Sprite, skin_sprite("#NOTE_CONNECTION_YELLOW")]
252
+ NOTE_CONNECTION_PURPLE = Annotated[Sprite, skin_sprite("#NOTE_CONNECTION_PURPLE")]
253
+ NOTE_CONNECTION_CYAN = Annotated[Sprite, skin_sprite("#NOTE_CONNECTION_CYAN")]
254
+
255
+ NOTE_CONNECTION_NEUTRAL_SEAMLESS = Annotated[Sprite, skin_sprite("#NOTE_CONNECTION_NEUTRAL_SEAMLESS")]
256
+ NOTE_CONNECTION_RED_SEAMLESS = Annotated[Sprite, skin_sprite("#NOTE_CONNECTION_RED_SEAMLESS")]
257
+ NOTE_CONNECTION_GREEN_SEAMLESS = Annotated[Sprite, skin_sprite("#NOTE_CONNECTION_GREEN_SEAMLESS")]
258
+ NOTE_CONNECTION_BLUE_SEAMLESS = Annotated[Sprite, skin_sprite("#NOTE_CONNECTION_BLUE_SEAMLESS")]
259
+ NOTE_CONNECTION_YELLOW_SEAMLESS = Annotated[Sprite, skin_sprite("#NOTE_CONNECTION_YELLOW_SEAMLESS")]
260
+ NOTE_CONNECTION_PURPLE_SEAMLESS = Annotated[Sprite, skin_sprite("#NOTE_CONNECTION_PURPLE_SEAMLESS")]
261
+ NOTE_CONNECTION_CYAN_SEAMLESS = Annotated[Sprite, skin_sprite("#NOTE_CONNECTION_CYAN_SEAMLESS")]
262
+
263
+ SIMULTANEOUS_CONNECTION_NEUTRAL = Annotated[Sprite, skin_sprite("#SIMULTANEOUS_CONNECTION_NEUTRAL")]
264
+ SIMULTANEOUS_CONNECTION_RED = Annotated[Sprite, skin_sprite("#SIMULTANEOUS_CONNECTION_RED")]
265
+ SIMULTANEOUS_CONNECTION_GREEN = Annotated[Sprite, skin_sprite("#SIMULTANEOUS_CONNECTION_GREEN")]
266
+ SIMULTANEOUS_CONNECTION_BLUE = Annotated[Sprite, skin_sprite("#SIMULTANEOUS_CONNECTION_BLUE")]
267
+ SIMULTANEOUS_CONNECTION_YELLOW = Annotated[Sprite, skin_sprite("#SIMULTANEOUS_CONNECTION_YELLOW")]
268
+ SIMULTANEOUS_CONNECTION_PURPLE = Annotated[Sprite, skin_sprite("#SIMULTANEOUS_CONNECTION_PURPLE")]
269
+ SIMULTANEOUS_CONNECTION_CYAN = Annotated[Sprite, skin_sprite("#SIMULTANEOUS_CONNECTION_CYAN")]
270
+
271
+ SIMULTANEOUS_CONNECTION_NEUTRAL_SEAMLESS = Annotated[
272
+ Sprite, skin_sprite("#SIMULTANEOUS_CONNECTION_NEUTRAL_SEAMLESS")
273
+ ]
274
+ SIMULTANEOUS_CONNECTION_RED_SEAMLESS = Annotated[Sprite, skin_sprite("#SIMULTANEOUS_CONNECTION_RED_SEAMLESS")]
275
+ SIMULTANEOUS_CONNECTION_GREEN_SEAMLESS = Annotated[Sprite, skin_sprite("#SIMULTANEOUS_CONNECTION_GREEN_SEAMLESS")]
276
+ SIMULTANEOUS_CONNECTION_BLUE_SEAMLESS = Annotated[Sprite, skin_sprite("#SIMULTANEOUS_CONNECTION_BLUE_SEAMLESS")]
277
+ SIMULTANEOUS_CONNECTION_YELLOW_SEAMLESS = Annotated[Sprite, skin_sprite("#SIMULTANEOUS_CONNECTION_YELLOW_SEAMLESS")]
278
+ SIMULTANEOUS_CONNECTION_PURPLE_SEAMLESS = Annotated[Sprite, skin_sprite("#SIMULTANEOUS_CONNECTION_PURPLE_SEAMLESS")]
279
+ SIMULTANEOUS_CONNECTION_CYAN_SEAMLESS = Annotated[Sprite, skin_sprite("#SIMULTANEOUS_CONNECTION_CYAN_SEAMLESS")]
280
+
281
+ DIRECTIONAL_MARKER_NEUTRAL = Annotated[Sprite, skin_sprite("#DIRECTIONAL_MARKER_NEUTRAL")]
282
+ DIRECTIONAL_MARKER_RED = Annotated[Sprite, skin_sprite("#DIRECTIONAL_MARKER_RED")]
283
+ DIRECTIONAL_MARKER_GREEN = Annotated[Sprite, skin_sprite("#DIRECTIONAL_MARKER_GREEN")]
284
+ DIRECTIONAL_MARKER_BLUE = Annotated[Sprite, skin_sprite("#DIRECTIONAL_MARKER_BLUE")]
285
+ DIRECTIONAL_MARKER_YELLOW = Annotated[Sprite, skin_sprite("#DIRECTIONAL_MARKER_YELLOW")]
286
+ DIRECTIONAL_MARKER_PURPLE = Annotated[Sprite, skin_sprite("#DIRECTIONAL_MARKER_PURPLE")]
287
+ DIRECTIONAL_MARKER_CYAN = Annotated[Sprite, skin_sprite("#DIRECTIONAL_MARKER_CYAN")]
288
+
289
+ SIMULTANEOUS_MARKER_NEUTRAL = Annotated[Sprite, skin_sprite("#SIMULTANEOUS_MARKER_NEUTRAL")]
290
+ SIMULTANEOUS_MARKER_RED = Annotated[Sprite, skin_sprite("#SIMULTANEOUS_MARKER_RED")]
291
+ SIMULTANEOUS_MARKER_GREEN = Annotated[Sprite, skin_sprite("#SIMULTANEOUS_MARKER_GREEN")]
292
+ SIMULTANEOUS_MARKER_BLUE = Annotated[Sprite, skin_sprite("#SIMULTANEOUS_MARKER_BLUE")]
293
+ SIMULTANEOUS_MARKER_YELLOW = Annotated[Sprite, skin_sprite("#SIMULTANEOUS_MARKER_YELLOW")]
294
+ SIMULTANEOUS_MARKER_PURPLE = Annotated[Sprite, skin_sprite("#SIMULTANEOUS_MARKER_PURPLE")]
295
+ SIMULTANEOUS_MARKER_CYAN = Annotated[Sprite, skin_sprite("#SIMULTANEOUS_MARKER_CYAN")]
296
+
297
+ STAGE_MIDDLE = Annotated[Sprite, skin_sprite("#STAGE_MIDDLE")]
298
+ STAGE_LEFT_BORDER = Annotated[Sprite, skin_sprite("#STAGE_LEFT_BORDER")]
299
+ STAGE_RIGHT_BORDER = Annotated[Sprite, skin_sprite("#STAGE_RIGHT_BORDER")]
300
+ STAGE_TOP_BORDER = Annotated[Sprite, skin_sprite("#STAGE_TOP_BORDER")]
301
+ STAGE_BOTTOM_BORDER = Annotated[Sprite, skin_sprite("#STAGE_BOTTOM_BORDER")]
302
+
303
+ STAGE_LEFT_BORDER_SEAMLESS = Annotated[Sprite, skin_sprite("#STAGE_LEFT_BORDER_SEAMLESS")]
304
+ STAGE_RIGHT_BORDER_SEAMLESS = Annotated[Sprite, skin_sprite("#STAGE_RIGHT_BORDER_SEAMLESS")]
305
+ STAGE_TOP_BORDER_SEAMLESS = Annotated[Sprite, skin_sprite("#STAGE_TOP_BORDER_SEAMLESS")]
306
+ STAGE_BOTTOM_BORDER_SEAMLESS = Annotated[Sprite, skin_sprite("#STAGE_BOTTOM_BORDER_SEAMLESS")]
307
+
308
+ STAGE_TOP_LEFT_CORNER = Annotated[Sprite, skin_sprite("#STAGE_TOP_LEFT_CORNER")]
309
+ STAGE_TOP_RIGHT_CORNER = Annotated[Sprite, skin_sprite("#STAGE_TOP_RIGHT_CORNER")]
310
+ STAGE_BOTTOM_LEFT_CORNER = Annotated[Sprite, skin_sprite("#STAGE_BOTTOM_LEFT_CORNER")]
311
+ STAGE_BOTTOM_RIGHT_CORNER = Annotated[Sprite, skin_sprite("#STAGE_BOTTOM_RIGHT_CORNER")]
312
+
313
+ LANE = Annotated[Sprite, skin_sprite("#LANE")]
314
+ LANE_SEAMLESS = Annotated[Sprite, skin_sprite("#LANE_SEAMLESS")]
315
+ LANE_ALTERNATIVE = Annotated[Sprite, skin_sprite("#LANE_ALTERNATIVE")]
316
+ LANE_ALTERNATIVE_SEAMLESS = Annotated[Sprite, skin_sprite("#LANE_ALTERNATIVE_SEAMLESS")]
317
+
318
+ JUDGMENT_LINE = Annotated[Sprite, skin_sprite("#JUDGMENT_LINE")]
319
+ NOTE_SLOT = Annotated[Sprite, skin_sprite("#NOTE_SLOT")]
320
+ STAGE_COVER = Annotated[Sprite, skin_sprite("#STAGE_COVER")]
321
+
322
+ GRID_NEUTRAL = Annotated[Sprite, skin_sprite("#GRID_NEUTRAL")]
323
+ GRID_RED = Annotated[Sprite, skin_sprite("#GRID_RED")]
324
+ GRID_GREEN = Annotated[Sprite, skin_sprite("#GRID_GREEN")]
325
+ GRID_BLUE = Annotated[Sprite, skin_sprite("#GRID_BLUE")]
326
+ GRID_YELLOW = Annotated[Sprite, skin_sprite("#GRID_YELLOW")]
327
+ GRID_PURPLE = Annotated[Sprite, skin_sprite("#GRID_PURPLE")]
328
+ GRID_CYAN = Annotated[Sprite, skin_sprite("#GRID_CYAN")]
328
329
 
329
330
 
330
331
  @skin