Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-Mania-Decompilation
Path: blob/master/SonicMania/Objects/Menu/UIButtonPrompt.c
338 views
1
// ---------------------------------------------------------------------
2
// RSDK Project: Sonic Mania
3
// Object Description: UIButtonPrompt Object
4
// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges
5
// Decompiled by: Rubberduckycooly & RMGRich
6
// ---------------------------------------------------------------------
7
8
#include "Game.h"
9
10
ObjectUIButtonPrompt *UIButtonPrompt;
11
12
void UIButtonPrompt_Update(void)
13
{
14
RSDK_THIS(UIButtonPrompt);
15
16
bool32 textChanged = false;
17
if (self->textSprite != UIWidgets->textFrames) {
18
RSDK.SetSpriteAnimation(UIWidgets->textFrames, 0, &self->promptAnimator, true, self->promptID);
19
textChanged = true;
20
self->textSprite = UIWidgets->textFrames;
21
}
22
23
if (self->scale.x == 0x200 && self->scaleMax == 0x200 && self->scaleSpeed)
24
self->scaleSpeed = 0;
25
26
StateMachine_Run(self->state);
27
28
if (self->scale.x >= self->scaleMax) {
29
if (self->scale.x > self->scaleMax) {
30
self->scale.x -= self->scaleSpeed;
31
if (self->scale.x < self->scaleMax)
32
self->scale.x = self->scaleMax;
33
}
34
}
35
else {
36
self->scale.x += self->scaleSpeed;
37
if (self->scale.x > self->scaleMax)
38
self->scale.x = self->scaleMax;
39
}
40
41
self->scale.y = self->scale.x;
42
43
if (self->prevPrompt != self->promptID) {
44
RSDK.SetSpriteAnimation(UIWidgets->textFrames, 0, &self->promptAnimator, true, self->promptID);
45
self->prevPrompt = self->promptID;
46
}
47
48
int32 button = self->buttonID;
49
if (self->prevButton != button) {
50
UIButtonPrompt_SetButtonSprites();
51
button = self->buttonID;
52
self->prevButton = button;
53
}
54
55
if (sku_platform == PLATFORM_PC || sku_platform == PLATFORM_DEV) {
56
int32 mappings = UIButtonPrompt_GetButtonMappings(UIButtonPrompt->inputSlot, button);
57
if (textChanged || self->mappings != mappings) {
58
UIButtonPrompt_SetButtonSprites();
59
self->mappings = mappings;
60
}
61
}
62
}
63
64
void UIButtonPrompt_LateUpdate(void)
65
{
66
RSDK_THIS(UIButtonPrompt);
67
68
EntityUIControl *control = (EntityUIControl *)self->parent;
69
if (control && control->heading && self->headingAnchor) {
70
EntityUIHeading *heading = (EntityUIHeading *)control->heading;
71
72
switch (self->headingAnchor) {
73
default:
74
case UIBUTTONPROMPT_ANCHOR_NONE: break;
75
76
case UIBUTTONPROMPT_ANCHOR_TOPLEFT_ROW1:
77
self->position.x = heading->position.x - TO_FIXED(188);
78
self->position.y = heading->position.y - TO_FIXED(8);
79
break;
80
81
case UIBUTTONPROMPT_ANCHOR_TOPRIGHT_ROW1:
82
self->position.x = heading->position.x + TO_FIXED(124);
83
self->position.y = heading->position.y - TO_FIXED(8);
84
break;
85
86
case UIBUTTONPROMPT_ANCHOR_TOPLEFT_ROW2:
87
self->position.x = heading->position.x - TO_FIXED(188);
88
self->position.y = heading->position.y + TO_FIXED(16);
89
break;
90
91
case UIBUTTONPROMPT_ANCHOR_TOPRIGHT_ROW2:
92
self->position.x = heading->position.x + TO_FIXED(124);
93
self->position.y = heading->position.y + TO_FIXED(16);
94
break;
95
}
96
}
97
}
98
99
void UIButtonPrompt_StaticUpdate(void)
100
{
101
UIButtonPrompt->type = UIButtonPrompt_GetGamepadType();
102
103
#if MANIA_USE_PLUS
104
int32 id = API_GetFilteredInputDeviceID(false, false, 0);
105
#else
106
int32 id = API_GetFilteredInputDeviceID(INPUT_NONE);
107
#endif
108
int32 gamepadType = API_GetInputDeviceType(id);
109
int32 deviceType = (gamepadType >> 8) & 0xFF;
110
111
UIButtonPrompt->inputSlot = deviceType == DEVICE_TYPE_KEYBOARD ? (gamepadType & 0xFF) : CONT_P1;
112
}
113
114
void UIButtonPrompt_Draw(void)
115
{
116
RSDK_THIS(UIButtonPrompt);
117
118
UIButtonPrompt_SetButtonSprites();
119
120
RSDK.DrawSprite(&self->decorAnimator, NULL, false);
121
122
self->drawFX = FX_SCALE;
123
RSDK.DrawSprite(&self->buttonAnimator, NULL, false);
124
125
self->drawFX = FX_NONE;
126
if (self->textVisible)
127
RSDK.DrawSprite(&self->promptAnimator, NULL, false);
128
}
129
130
void UIButtonPrompt_Create(void *data)
131
{
132
RSDK_THIS(UIButtonPrompt);
133
134
if (!SceneInfo->inEditor) {
135
self->startPos = self->position;
136
self->visible = true;
137
self->drawGroup = 2;
138
self->scaleMax = 0x200;
139
self->scaleSpeed = 0x10;
140
self->scale.x = 0x200;
141
self->scale.y = 0x200;
142
self->disableScale = false;
143
self->active = ACTIVE_BOUNDS;
144
self->updateRange.x = 0x2000000;
145
self->updateRange.y = 0x800000;
146
self->textVisible = true;
147
148
RSDK.SetSpriteAnimation(UIButtonPrompt->aniFrames, 0, &self->decorAnimator, true, 0);
149
RSDK.SetSpriteAnimation(UIWidgets->textFrames, 0, &self->promptAnimator, true, self->promptID);
150
151
UIButtonPrompt_SetButtonSprites();
152
153
self->textSprite = UIWidgets->textFrames;
154
self->state = UIButtonPrompt_State_CheckIfSelected;
155
self->parent = NULL;
156
self->touchSize.x = 0x580000;
157
self->touchSize.y = 0x100000;
158
self->touchPos.x = 0x200000;
159
}
160
}
161
162
void UIButtonPrompt_StageLoad(void)
163
{
164
UIButtonPrompt->type = UIBUTTONPROMPT_KEYBOARD;
165
UIButtonPrompt->inputSlot = CONT_P1;
166
167
UIButtonPrompt->aniFrames = RSDK.LoadSpriteAnimation("UI/Buttons.bin", SCOPE_STAGE);
168
}
169
170
int32 UIButtonPrompt_GetButtonMappings(int32 input, int32 button)
171
{
172
#if MANIA_USE_PLUS
173
switch (button) {
174
case UIBUTTONPROMPT_BUTTON_A: return ControllerInfo[input].keyA.keyMap;
175
case UIBUTTONPROMPT_BUTTON_B: return ControllerInfo[input].keyB.keyMap;
176
case UIBUTTONPROMPT_BUTTON_X: return ControllerInfo[input].keyX.keyMap;
177
case UIBUTTONPROMPT_BUTTON_Y: return ControllerInfo[input].keyY.keyMap;
178
case UIBUTTONPROMPT_BUTTON_START: return ControllerInfo[input].keyStart.keyMap;
179
case UIBUTTONPROMPT_BUTTON_SELECT: return ControllerInfo[input].keySelect.keyMap;
180
default: break;
181
}
182
#else
183
switch (button) {
184
case UIBUTTONPROMPT_BUTTON_A: return ControllerInfo[CONT_P1].keyA.keyMap;
185
case UIBUTTONPROMPT_BUTTON_B: return ControllerInfo[CONT_P1].keyB.keyMap;
186
case UIBUTTONPROMPT_BUTTON_X: return ControllerInfo[CONT_P1].keyX.keyMap;
187
case UIBUTTONPROMPT_BUTTON_Y: return ControllerInfo[CONT_P1].keyY.keyMap;
188
case UIBUTTONPROMPT_BUTTON_START: return ControllerInfo[CONT_P1].keyStart.keyMap;
189
case UIBUTTONPROMPT_BUTTON_SELECT: return ControllerInfo[CONT_P1].keySelect.keyMap;
190
default: break;
191
}
192
#endif
193
194
return 0;
195
}
196
197
int32 UIButtonPrompt_GetGamepadType(void)
198
{
199
#if MANIA_USE_PLUS
200
int32 id = API_GetFilteredInputDeviceID(false, false, 0);
201
#else
202
int32 id = API_GetFilteredInputDeviceID(INPUT_NONE);
203
#endif
204
int32 gamepadType = API_GetInputDeviceType(id);
205
206
int32 deviceType = (gamepadType >> 8) & 0xFF;
207
if (deviceType == DEVICE_TYPE_KEYBOARD) {
208
switch (Localization->language) {
209
case LANGUAGE_FR: return UIBUTTONPROMPT_KEYBOARD_FR;
210
case LANGUAGE_IT: return UIBUTTONPROMPT_KEYBOARD_IT;
211
case LANGUAGE_GE: return UIBUTTONPROMPT_KEYBOARD_GE;
212
case LANGUAGE_SP: return UIBUTTONPROMPT_KEYBOARD_SP;
213
default: return UIBUTTONPROMPT_KEYBOARD;
214
}
215
}
216
else if (deviceType == DEVICE_TYPE_CONTROLLER) {
217
// I don't actually think saturn type is ever set in-engine, neat that it exists though
218
219
switch (gamepadType & 0xFF) {
220
case DEVICE_XBOX: return UIBUTTONPROMPT_XBOX;
221
case DEVICE_PS4: return UIBUTTONPROMPT_PS4;
222
case DEVICE_SATURN: return UIBUTTONPROMPT_SATURN_WHITE;
223
case DEVICE_SWITCH_HANDHELD:
224
case DEVICE_SWITCH_JOY_GRIP:
225
case DEVICE_SWITCH_PRO: return UIBUTTONPROMPT_SWITCH;
226
case DEVICE_SWITCH_JOY_L: return UIBUTTONPROMPT_JOYCON_L;
227
case DEVICE_SWITCH_JOY_R: return UIBUTTONPROMPT_JOYCON_R;
228
default: break;
229
}
230
}
231
return UIBUTTONPROMPT_XBOX;
232
}
233
234
uint8 UIButtonPrompt_MappingsToFrame(int32 mappings)
235
{
236
#if GAME_VERSION != VER_100
237
switch (mappings) {
238
case KEYMAP_BACK: return 14;
239
case KEYMAP_TAB: return 15;
240
case KEYMAP_RETURN: return 41;
241
case KEYMAP_SHIFT:
242
case KEYMAP_LSHIFT: return 42;
243
case KEYMAP_CONTROL:
244
case KEYMAP_LCONTROL: return 54;
245
case KEYMAP_MENU:
246
case KEYMAP_LMENU: return 55;
247
case KEYMAP_CAPITAL: return 29;
248
case KEYMAP_SPACE: return 56;
249
case KEYMAP_PRIOR: return 91;
250
case KEYMAP_NEXT: return 92;
251
case KEYMAP_END: return 93;
252
case KEYMAP_HOME: return 94;
253
case KEYMAP_LEFT: return 61;
254
case KEYMAP_UP: return 59;
255
case KEYMAP_RIGHT: return 62;
256
case KEYMAP_DOWN: return 60;
257
case KEYMAP_INSERT: return 95;
258
case KEYMAP_DELETE: return 96;
259
case KEYMAP_0: return 11;
260
case KEYMAP_1: return 2;
261
case KEYMAP_2: return 3;
262
case KEYMAP_3: return 4;
263
case KEYMAP_4: return 5;
264
case KEYMAP_5: return 6;
265
case KEYMAP_6: return 7;
266
case KEYMAP_7: return 8;
267
case KEYMAP_8: return 9;
268
case KEYMAP_9: return 10;
269
case KEYMAP_A: return 30;
270
case KEYMAP_B: return 47;
271
case KEYMAP_C: return 45;
272
case KEYMAP_D: return 32;
273
case KEYMAP_E: return 18;
274
case KEYMAP_F: return 33;
275
case KEYMAP_G: return 34;
276
case KEYMAP_H: return 35;
277
case KEYMAP_I: return 23;
278
case KEYMAP_J: return 36;
279
case KEYMAP_K: return 37;
280
case KEYMAP_L: return 38;
281
case KEYMAP_M: return 49;
282
case KEYMAP_N: return 48;
283
case KEYMAP_O: return 24;
284
case KEYMAP_P: return 25;
285
case KEYMAP_Q: return 16;
286
case KEYMAP_R: return 19;
287
case KEYMAP_S: return 31;
288
case KEYMAP_T: return 20;
289
case KEYMAP_U: return 22;
290
case KEYMAP_V: return 46;
291
case KEYMAP_W: return 17;
292
case KEYMAP_X: return 44;
293
case KEYMAP_Y: return 21;
294
case KEYMAP_Z: return 43;
295
case KEYMAP_NUMPAD0: return 77;
296
case KEYMAP_NUMPAD1: return 73;
297
case KEYMAP_NUMPAD2: return 74;
298
case KEYMAP_NUMPAD3: return 75;
299
case KEYMAP_NUMPAD4: return 70;
300
case KEYMAP_NUMPAD5: return 71;
301
case KEYMAP_NUMPAD6: return 72;
302
case KEYMAP_NUMPAD7: return 66;
303
case KEYMAP_NUMPAD8: return 67;
304
case KEYMAP_NUMPAD9: return 68;
305
case KEYMAP_MULTIPLY: return 64;
306
case KEYMAP_ADD: return 69;
307
case KEYMAP_SUBTRACT: return 65;
308
case KEYMAP_DECIMAL: return 78;
309
case KEYMAP_DIVIDE: return 63;
310
case KEYMAP_RSHIFT: return 53;
311
case KEYMAP_RCONTROL: return 58;
312
case KEYMAP_RMENU: return 57;
313
case KEYMAP_OEM_1: return 79;
314
case KEYMAP_OEM_PLUS: return 87;
315
case KEYMAP_OEM_COMMA: return 88;
316
case KEYMAP_OEM_MINUS: return 89;
317
case KEYMAP_OEM_PERIOD: return 90;
318
case KEYMAP_OEM_2: return 80;
319
case KEYMAP_OEM_3: return 81;
320
case KEYMAP_OEM_4: return 82;
321
case KEYMAP_OEM_5: return 83;
322
case KEYMAP_OEM_6: return 84;
323
case KEYMAP_OEM_7: return 85;
324
case KEYMAP_OEM_8: return 86;
325
default: return 0;
326
}
327
#else
328
switch (mappings) {
329
case KEYMAP_BACK: return 14;
330
case KEYMAP_TAB: return 15;
331
case KEYMAP_RETURN: return 41;
332
case KEYMAP_SHIFT:
333
case KEYMAP_LSHIFT: return 42;
334
case KEYMAP_CONTROL:
335
case KEYMAP_LCONTROL: return 54;
336
case KEYMAP_MENU: return 55;
337
case KEYMAP_CAPITAL: return 29;
338
case KEYMAP_SPACE: return 56;
339
case KEYMAP_LEFT: return 61;
340
case KEYMAP_UP: return 59;
341
case KEYMAP_RIGHT: return 62;
342
case KEYMAP_DOWN: return 60;
343
case KEYMAP_0: return 11;
344
case KEYMAP_1: return 2;
345
case KEYMAP_2: return 3;
346
case KEYMAP_3: return 4;
347
case KEYMAP_4: return 5;
348
case KEYMAP_5: return 6;
349
case KEYMAP_6: return 7;
350
case KEYMAP_7: return 8;
351
case KEYMAP_8: return 9;
352
case KEYMAP_9: return 10;
353
case KEYMAP_A: return 30;
354
case KEYMAP_B: return 47;
355
case KEYMAP_C: return 45;
356
case KEYMAP_D: return 32;
357
case KEYMAP_E: return 18;
358
case KEYMAP_F: return 33;
359
case KEYMAP_G: return 34;
360
case KEYMAP_H: return 35;
361
case KEYMAP_I: return 23;
362
case KEYMAP_J: return 36;
363
case KEYMAP_K: return 37;
364
case KEYMAP_L: return 38;
365
case KEYMAP_M: return 49;
366
case KEYMAP_N: return 48;
367
case KEYMAP_O: return 24;
368
case KEYMAP_P: return 25;
369
case KEYMAP_Q: return 16;
370
case KEYMAP_R: return 19;
371
case KEYMAP_S: return 31;
372
case KEYMAP_T: return 20;
373
case KEYMAP_U: return 22;
374
case KEYMAP_V: return 46;
375
case KEYMAP_W: return 17;
376
case KEYMAP_X: return 44;
377
case KEYMAP_Y: return 21;
378
case KEYMAP_Z: return 43;
379
case KEYMAP_NUMPAD0: return 77;
380
case KEYMAP_NUMPAD1: return 73;
381
case KEYMAP_NUMPAD2: return 74;
382
case KEYMAP_NUMPAD3: return 75;
383
case KEYMAP_NUMPAD4: return 70;
384
case KEYMAP_NUMPAD5: return 71;
385
case KEYMAP_NUMPAD6: return 72;
386
case KEYMAP_NUMPAD7: return 66;
387
case KEYMAP_NUMPAD8: return 67;
388
case KEYMAP_NUMPAD9: return 68;
389
case KEYMAP_MULTIPLY: return 64;
390
case KEYMAP_ADD: return 69;
391
case KEYMAP_SUBTRACT: return 65;
392
case KEYMAP_DECIMAL: return 78;
393
case KEYMAP_DIVIDE: return 63;
394
case KEYMAP_RSHIFT: return 53;
395
case KEYMAP_RCONTROL: return 58;
396
default: return 0;
397
}
398
#endif
399
return 0;
400
}
401
402
void UIButtonPrompt_SetButtonSprites(void)
403
{
404
RSDK_THIS(UIButtonPrompt);
405
406
if (SceneInfo->inEditor) {
407
RSDK.SetSpriteAnimation(UIButtonPrompt->aniFrames, UIBUTTONPROMPT_XBOX, &self->buttonAnimator, true, self->buttonID);
408
}
409
else {
410
int32 buttonID = self->buttonID;
411
if (API_GetConfirmButtonFlip() && buttonID <= 1)
412
buttonID ^= 1;
413
414
#if MANIA_USE_PLUS
415
if (UIButtonPrompt->type != UIBUTTONPROMPT_KEYBOARD
416
&& (UIButtonPrompt->type < UIBUTTONPROMPT_KEYBOARD_FR || UIButtonPrompt->type > UIBUTTONPROMPT_KEYBOARD_SP)) {
417
RSDK.SetSpriteAnimation(UIButtonPrompt->aniFrames, UIButtonPrompt->type, &self->buttonAnimator, true, buttonID);
418
}
419
else {
420
// despite different languages existing here, the english one is always the one used
421
int32 mappings = UIButtonPrompt_GetButtonMappings(UIButtonPrompt->inputSlot, buttonID);
422
int32 frame = UIButtonPrompt_MappingsToFrame(mappings);
423
RSDK.SetSpriteAnimation(UIButtonPrompt->aniFrames, UIBUTTONPROMPT_KEYBOARD, &self->buttonAnimator, true, frame);
424
}
425
#else
426
427
if (sku_platform != PLATFORM_PC && sku_platform != PLATFORM_DEV) {
428
RSDK.SetSpriteAnimation(UIButtonPrompt->aniFrames, UIButtonPrompt->type, &self->buttonAnimator, true, buttonID);
429
}
430
else {
431
int32 mappings = UIButtonPrompt_GetButtonMappings(UIButtonPrompt->inputSlot, buttonID);
432
if (UIButtonPrompt->type == UIBUTTONPROMPT_XBOX) {
433
RSDK.SetSpriteAnimation(UIButtonPrompt->aniFrames, UIBUTTONPROMPT_XBOX, &self->buttonAnimator, true, buttonID);
434
}
435
else {
436
int32 frame = UIButtonPrompt_MappingsToFrame(mappings);
437
RSDK.SetSpriteAnimation(UIButtonPrompt->aniFrames, UIBUTTONPROMPT_KEYBOARD, &self->buttonAnimator, true, frame);
438
}
439
}
440
#endif
441
}
442
}
443
444
bool32 UIButtonPrompt_CheckTouch(void)
445
{
446
RSDK_THIS(UIButtonPrompt);
447
448
EntityUIControl *control = (EntityUIControl *)self->parent;
449
if (control && !control->dialogHasFocus && !control->selectionDisabled) {
450
if (TouchInfo->count) {
451
int32 screenX = (ScreenInfo->position.x << 16);
452
int32 screenY = (ScreenInfo->position.y << 16);
453
int32 sizeX = self->touchSize.x >> 1;
454
int32 sizeY = self->touchSize.y >> 1;
455
456
bool32 wasTouched = false;
457
for (int32 i = 0; i < TouchInfo->count; ++i) {
458
int32 x = screenX - ((TouchInfo->x[i] * ScreenInfo->size.x) * -65536.0f);
459
int32 y = screenY - ((TouchInfo->y[i] * ScreenInfo->size.y) * -65536.0f);
460
461
int32 touchX = abs(self->touchPos.x + self->position.x - x);
462
int32 touchY = abs(self->touchPos.y + self->position.y - y);
463
if (touchX < sizeX && touchY < sizeY) {
464
wasTouched = true;
465
}
466
}
467
468
self->touched = wasTouched;
469
}
470
else {
471
if (self->touched) {
472
self->timer = 0;
473
self->state = UIButtonPrompt_State_Selected;
474
}
475
self->touched = false;
476
}
477
}
478
479
return self->touched;
480
}
481
482
void UIButtonPrompt_State_CheckIfSelected(void)
483
{
484
RSDK_THIS(UIButtonPrompt);
485
486
if (self->visible) {
487
if (UIButtonPrompt_CheckTouch()) {
488
self->scaleMax = 0x280;
489
490
if (self->scaleSpeed < 0x10)
491
self->scaleSpeed = 0x10;
492
}
493
else if (!self->disableScale) {
494
self->scaleMax = 0x200;
495
}
496
}
497
}
498
499
void UIButtonPrompt_State_Selected(void)
500
{
501
RSDK_THIS(UIButtonPrompt);
502
503
self->scaleMax = 0x280;
504
505
if (++self->timer == 16) {
506
self->timer = 0;
507
self->textVisible = true;
508
self->state = UIButtonPrompt_State_CheckIfSelected;
509
510
int32 buttonID = self->buttonID;
511
if (API_GetConfirmButtonFlip() && buttonID <= 1)
512
buttonID ^= 1;
513
514
UIControl_ClearInputs(buttonID);
515
}
516
517
self->textVisible = !((self->timer >> 1) & 1);
518
}
519
520
#if GAME_INCLUDE_EDITOR
521
void UIButtonPrompt_EditorDraw(void)
522
{
523
RSDK_THIS(UIButtonPrompt);
524
525
self->startPos = self->position;
526
self->drawGroup = 2;
527
self->disableScale = false;
528
self->updateRange.x = 0x2000000;
529
self->updateRange.y = 0x800000;
530
self->textVisible = true;
531
RSDK.SetSpriteAnimation(UIButtonPrompt->aniFrames, 0, &self->decorAnimator, true, 0);
532
RSDK.SetSpriteAnimation(UIWidgets->textFrames, 0, &self->promptAnimator, true, self->promptID);
533
534
UIButtonPrompt_SetButtonSprites();
535
self->textSprite = UIWidgets->textFrames;
536
537
UIButtonPrompt_Draw();
538
}
539
540
void UIButtonPrompt_EditorLoad(void)
541
{
542
UIButtonPrompt->aniFrames = RSDK.LoadSpriteAnimation("UI/Buttons.bin", SCOPE_STAGE);
543
544
RSDK_ACTIVE_VAR(UIButtonPrompt, buttonID);
545
RSDK_ENUM_VAR("A", UIBUTTONPROMPT_BUTTON_A);
546
RSDK_ENUM_VAR("B", UIBUTTONPROMPT_BUTTON_B);
547
RSDK_ENUM_VAR("X", UIBUTTONPROMPT_BUTTON_X);
548
RSDK_ENUM_VAR("Y", UIBUTTONPROMPT_BUTTON_Y);
549
RSDK_ENUM_VAR("Start", UIBUTTONPROMPT_BUTTON_START);
550
RSDK_ENUM_VAR("Select", UIBUTTONPROMPT_BUTTON_SELECT);
551
552
RSDK_ACTIVE_VAR(UIButtonPrompt, headingAnchor);
553
RSDK_ENUM_VAR("None", UIBUTTONPROMPT_ANCHOR_NONE);
554
RSDK_ENUM_VAR("Top-Left (Row 1)", UIBUTTONPROMPT_ANCHOR_TOPLEFT_ROW1);
555
RSDK_ENUM_VAR("Top-Right (Row 1)", UIBUTTONPROMPT_ANCHOR_TOPRIGHT_ROW1);
556
RSDK_ENUM_VAR("Top-Left (Row 2)", UIBUTTONPROMPT_ANCHOR_TOPLEFT_ROW2);
557
RSDK_ENUM_VAR("Top-Right (Row 2)", UIBUTTONPROMPT_ANCHOR_TOPRIGHT_ROW2);
558
}
559
#endif
560
561
void UIButtonPrompt_Serialize(void)
562
{
563
RSDK_EDITABLE_VAR(UIButtonPrompt, VAR_ENUM, promptID);
564
RSDK_EDITABLE_VAR(UIButtonPrompt, VAR_ENUM, buttonID);
565
RSDK_EDITABLE_VAR(UIButtonPrompt, VAR_UINT8, headingAnchor);
566
}
567
568