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