Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-1-2-2013-Decompilation
Path: blob/main/RSDKv4/NativeObjects/PushButton.cpp
817 views
1
#include "RetroEngine.hpp"
2
3
void PushButton_Create(void *objPtr)
4
{
5
RSDK_THIS(PushButton);
6
self->z = 160.0f;
7
self->alpha = 255;
8
self->scale = 0.15f;
9
self->state = PUSHBUTTON_STATE_SCALED;
10
self->symbolsTex = LoadTexture("Data/Game/Menu/Symbols.png", TEXFMT_RGBA4444);
11
self->bgColor = 0xFF0000;
12
self->bgColorSelected = 0xFF4000;
13
self->textColor = 0xFFFFFF;
14
self->textColorSelected = 0xFFFF00;
15
}
16
void PushButton_Main(void *objPtr)
17
{
18
RSDK_THIS(PushButton);
19
NewRenderState();
20
if (self->useRenderMatrix)
21
SetRenderMatrix(&self->renderMatrix);
22
SetRenderBlendMode(RENDER_BLEND_ALPHA);
23
24
switch (self->state) {
25
case PUSHBUTTON_STATE_UNSELECTED: {
26
SetRenderVertexColor((self->bgColor >> 16) & 0xFF, (self->bgColor >> 8) & 0xFF, self->bgColor & 0xFF);
27
RenderImage(self->x - self->textWidth, self->y, self->z, self->scale, self->scale, 64.0, 64.0, 64.0, 128.0, 0.0, 0.0, self->alpha,
28
self->symbolsTex);
29
RenderImage(self->x, self->y, self->z, self->textWidth + self->textWidth, self->scale, 0.5, 64.0, 1.0, 128.0, 63.0, 0.0, self->alpha,
30
self->symbolsTex);
31
RenderImage(self->x + self->textWidth, self->y, self->z, self->scale, self->scale, 0.0, 64.0, 64.0, 128.0, 64.0, 0.0, self->alpha,
32
self->symbolsTex);
33
SetRenderVertexColor(self->textColor >> 16, (self->textColor >> 8) & 0xFF, self->textColor & 0xFF);
34
RenderText(self->text, FONT_LABEL, self->x - self->xOff, self->y - self->yOff, self->z, self->textScale, self->alpha);
35
break;
36
}
37
case PUSHBUTTON_STATE_SELECTED: {
38
if (usePhysicalControls) {
39
SetRenderVertexColor(0x00, 0x00, 0x00);
40
RenderImage(self->x - self->textWidth, self->y, self->z, 1.1 * self->scale, 1.1 * self->scale, 64.0, 64.0, 64.0, 128.0, 0.0, 0.0,
41
self->alpha, self->symbolsTex);
42
RenderImage(self->x, self->y, self->z, self->textWidth + self->textWidth, 1.1 * self->scale, 0.5, 64.0, 1.0, 128.0, 63.0, 0.0,
43
self->alpha, self->symbolsTex);
44
RenderImage(self->x + self->textWidth, self->y, self->z, 1.1 * self->scale, 1.1 * self->scale, 0.0, 64.0, 64.0, 128.0, 64.0, 0.0,
45
self->alpha, self->symbolsTex);
46
}
47
SetRenderVertexColor((self->bgColorSelected >> 16) & 0xFF, (self->bgColorSelected >> 8) & 0xFF, self->bgColorSelected & 0xFF);
48
RenderImage(self->x - self->textWidth, self->y, self->z, self->scale, self->scale, 64.0, 64.0, 64.0, 128.0, 0.0, 0.0, self->alpha,
49
self->symbolsTex);
50
RenderImage(self->x, self->y, self->z, self->textWidth + self->textWidth, self->scale, 0.5, 64.0, 1.0, 128.0, 63.0, 0.0, self->alpha,
51
self->symbolsTex);
52
RenderImage(self->x + self->textWidth, self->y, self->z, self->scale, self->scale, 0.0, 64.0, 64.0, 128.0, 64.0, 0.0, self->alpha,
53
self->symbolsTex);
54
SetRenderVertexColor(self->textColorSelected >> 16, (self->textColorSelected >> 8) & 0xFF, self->textColorSelected & 0xFF);
55
RenderText(self->text, FONT_LABEL, self->x - self->xOff, self->y - self->yOff, self->z, self->textScale, self->alpha);
56
break;
57
}
58
case PUSHBUTTON_STATE_FLASHING: {
59
self->flashTimer += Engine.deltaTime;
60
if (self->flashTimer > 0.1)
61
self->flashTimer -= 0.1;
62
SetRenderVertexColor((self->bgColorSelected >> 16) & 0xFF, (self->bgColorSelected >> 8) & 0xFF, self->bgColorSelected & 0xFF);
63
RenderImage(self->x - self->textWidth, self->y, self->z, self->scale, self->scale, 64.0, 64.0, 64.0, 128.0, 0.0, 0.0, self->alpha,
64
self->symbolsTex);
65
RenderImage(self->x, self->y, self->z, self->textWidth + self->textWidth, self->scale, 0.5, 64.0, 1.0, 128.0, 63.0, 0.0, self->alpha,
66
self->symbolsTex);
67
RenderImage(self->x + self->textWidth, self->y, self->z, self->scale, self->scale, 0.0, 64.0, 64.0, 128.0, 64.0, 0.0, self->alpha,
68
self->symbolsTex);
69
70
int color = self->flashTimer > 0.05f ? self->textColorSelected : self->textColor;
71
SetRenderVertexColor((color >> 16) & 0xFF, (color >> 8) & 0xFF, color & 0xFF);
72
RenderText(self->text, FONT_LABEL, self->x - self->xOff, self->y - self->yOff, self->z, self->textScale, self->alpha);
73
self->stateTimer += Engine.deltaTime;
74
if (self->stateTimer > 0.5) {
75
self->stateTimer = 0.0;
76
self->state = PUSHBUTTON_STATE_UNSELECTED;
77
}
78
break;
79
}
80
case PUSHBUTTON_STATE_SCALED: {
81
self->state = 0;
82
self->xOff = GetTextWidth(self->text, FONT_LABEL, self->scale) * 0.375;
83
self->textWidth = GetTextWidth(self->text, FONT_LABEL, self->scale) * 0.375;
84
self->yOff = 0.75 * self->scale * 32.0;
85
self->textScale = 0.75 * self->scale;
86
87
SetRenderVertexColor(self->bgColor >> 16, (self->bgColor >> 8) & 0xFF, self->bgColor & 0xFF);
88
RenderImage(self->x - self->textWidth, self->y, self->z, self->scale, self->scale, 64.0, 64.0, 64.0, 128.0, 0.0, 0.0, self->alpha,
89
self->symbolsTex);
90
RenderImage(self->x, self->y, self->z, self->textWidth + self->textWidth, self->scale, 0.5, 64.0, 1.0, 128.0, 63.0, 0.0, self->alpha,
91
self->symbolsTex);
92
RenderImage(self->x + self->textWidth, self->y, self->z, self->scale, self->scale, 0.0, 64.0, 64.0, 128.0, 64.0, 0.0, self->alpha,
93
self->symbolsTex);
94
SetRenderVertexColor((self->textColor >> 16) & 0xFF, (self->textColor >> 8) & 0xFF, self->textColor & 0xFF);
95
RenderText(self->text, FONT_LABEL, self->x - self->xOff, self->y - self->yOff, self->z, self->textScale, self->alpha);
96
break;
97
}
98
}
99
100
SetRenderVertexColor(0xFF, 0xFF, 0xFF);
101
if (self->useRenderMatrix) {
102
NewRenderState();
103
SetRenderMatrix(NULL);
104
}
105
}
106
107