Path: blob/main/RSDKv4/NativeObjects/AboutScreen.cpp
817 views
#include "RetroEngine.hpp"1#include <string>23void AboutScreen_Create(void *objPtr)4{5RSDK_THIS(AboutScreen);67self->label = CREATE_ENTITY(TextLabel);8self->label->useRenderMatrix = true;9self->label->fontID = FONT_HEADING;10self->label->scale = 0.2;11self->label->alpha = 256;12self->label->x = -144.0;13self->label->y = 100.0;14self->label->z = 16.0;15self->label->state = TEXTLABEL_STATE_IDLE;16SetStringToFont(self->label->text, strAbout, FONT_HEADING);1718char title[0x40];19for (int i = 0; i < StrLength(Engine.gameWindowText); ++i) title[i] = toupper(Engine.gameWindowText[i]);20SetStringToFont8(self->gameTitle, title, FONT_LABEL);21SetStringToFont(self->versionNameText, strVersionName, FONT_LABEL);22SetStringToFont8(self->versionText, Engine.gameVersion, FONT_LABEL);2324self->meshPanel = LoadMesh("Data/Game/Models/Panel.bin", -1);25SetMeshVertexColors(self->meshPanel, 0, 0, 0, 0xC0);26self->textureArrows = LoadTexture("Data/Game/Menu/ArrowButtons.png", TEXFMT_RGBA4444);2728int package = 0;29switch (Engine.globalBoxRegion) {30case REGION_JP:31package = LoadTexture("Data/Game/Models/Package_JP.png", TEXFMT_RGBA5551);32self->meshBox = LoadMesh("Data/Game/Models/JPBox.bin", package);33break;34case REGION_US:35package = LoadTexture("Data/Game/Models/Package_US.png", TEXFMT_RGBA5551);36self->meshBox = LoadMesh("Data/Game/Models/Box.bin", package);37break;38case REGION_EU:39package = LoadTexture("Data/Game/Models/Package_EU.png", TEXFMT_RGBA5551);40self->meshBox = LoadMesh("Data/Game/Models/Box.bin", package);41break;42default: break;43}4445SetMeshAnimation(self->meshBox, &self->animator, 16, 16, 0.0);46AnimateMesh(self->meshBox, &self->animator);4748float y = -24.0f;49for (int i = 0; i < ABOUT_BTN_COUNT; ++i) {50self->buttons[i] = CREATE_ENTITY(PushButton);51self->buttons[i]->useRenderMatrix = true;52self->buttons[i]->x = 64.0;53self->buttons[i]->y = y;54self->buttons[i]->z = 0.0;55self->buttons[i]->scale = 0.175;56self->buttons[i]->bgColor = 0x00A048;57self->buttons[i]->bgColorSelected = 0x00C060;5859y -= 32.0f;60}6162SetStringToFont(self->buttons[ABOUT_BTN_PRIVACY]->text, strPrivacy, FONT_LABEL);63SetStringToFont(self->buttons[ABOUT_BTN_TERMS]->text, strTerms, FONT_LABEL);64}65void AboutScreen_Main(void *objPtr)66{67RSDK_THIS(AboutScreen);68NativeEntity_OptionsMenu *optionsMenu = (NativeEntity_OptionsMenu *)self->optionsMenu;6970switch (self->state) {71case ABOUT_STATE_ENTER: {72if (self->arrowAlpha < 0x100)73self->arrowAlpha += 8;7475float maxWidth = 0;76for (int i = 0; i < ABOUT_BTN_COUNT; ++i) {77if (self->buttons[i]->textWidth > maxWidth)78maxWidth = self->buttons[i]->textWidth;79}80for (int i = 0; i < ABOUT_BTN_COUNT; ++i) {81self->buttons[i]->textWidth = maxWidth;82}8384self->scale = fminf(self->scale + ((1.05 - self->scale) / ((60.0 * Engine.deltaTime) * 8.0)), 1.0f);8586NewRenderState();87MatrixScaleXYZF(&self->renderMatrix, self->scale, self->scale, 1.0);88MatrixTranslateXYZF(&self->matrixTemp, 0.0, -8.0, 160.0);89MatrixMultiplyF(&self->renderMatrix, &self->matrixTemp);90SetRenderMatrix(&self->renderMatrix);9192memcpy(&self->label->renderMatrix, &self->renderMatrix, sizeof(MatrixF));93for (int i = 0; i < ABOUT_BTN_COUNT; ++i) memcpy(&self->buttons[i]->renderMatrix, &self->renderMatrix, sizeof(MatrixF));9495self->timer += Engine.deltaTime;96if (self->timer > 0.5) {97self->arrowAlpha = 256;98self->timer = 0.0;99self->state = ABOUT_STATE_MAIN;100}101break;102}103case ABOUT_STATE_MAIN: {104CheckKeyDown(&keyDown);105CheckKeyPress(&keyPress);106SetRenderMatrix(&self->renderMatrix);107108if (usePhysicalControls) {109if (touches > 0) {110usePhysicalControls = false;111}112else {113if (keyPress.up) {114PlaySfxByName("Menu Move", false);115self->selectedButton--;116if (self->selectedButton < 0)117self->selectedButton = 1;118}119else if (keyPress.down) {120PlaySfxByName("Menu Move", false);121self->selectedButton++;122if (self->selectedButton >= 2)123self->selectedButton = 0;124}125126for (int i = 0; i < ABOUT_BTN_COUNT; ++i) self->buttons[i]->state = 0;127self->buttons[self->selectedButton]->state = 1;128129if (keyPress.start || keyPress.A) {130PlaySfxByName("Menu Select", false);131self->buttons[self->selectedButton]->state = 2;132self->state = ABOUT_STATE_ACTION;133}134else if (keyPress.B) {135PlaySfxByName("Menu Back", false);136self->backPressed = false;137self->state = ABOUT_STATE_EXIT;138}139}140}141else {142if (touches > 0) {143float y = -32.0f;144for (int i = 0; i < ABOUT_BTN_COUNT; ++i) {145bool valid = CheckTouchRect(64.0, y, ((64.0 * self->buttons[i]->scale) + self->buttons[i]->textWidth) * 0.75, 12.0) >= 0;146self->buttons[i]->state = valid;147148y -= 32.0f;149}150self->backPressed = CheckTouchRect(128.0, -92.0, 32.0, 32.0) >= 0;151if (self->state == ABOUT_STATE_MAIN) {152if (keyDown.up) {153self->selectedButton = 1;154usePhysicalControls = true;155}156if (keyDown.down) {157self->selectedButton = 0;158usePhysicalControls = true;159}160}161}162else {163for (int i = 0; i < ABOUT_BTN_COUNT; ++i) {164if (self->buttons[i]->state == 1) {165PlaySfxByName("Menu Select", false);166self->buttons[i]->state = 2;167self->selectedButton = i;168self->state = ABOUT_STATE_ACTION;169break;170}171}172173if (keyPress.B || self->backPressed) {174PlaySfxByName("Menu Back", false);175self->backPressed = false;176self->state = ABOUT_STATE_EXIT;177}178else {179if (self->state == ABOUT_STATE_MAIN) {180if (keyDown.up) {181self->selectedButton = 1;182usePhysicalControls = true;183}184if (keyDown.down) {185self->selectedButton = 0;186usePhysicalControls = true;187}188}189}190}191}192break;193}194case ABOUT_STATE_ACTION: {195CheckKeyDown(&keyDown);196SetRenderMatrix(&self->renderMatrix);197198if (self->buttons[self->selectedButton]->state) {199switch (self->selectedButton) {200default: break;201case ABOUT_BTN_PRIVACY: ShowWebsite(0); break;202case ABOUT_BTN_TERMS: ShowWebsite(1); break;203}204self->state = ABOUT_STATE_MAIN;205}206break;207}208case ABOUT_STATE_EXIT: {209if (self->arrowAlpha > 0)210self->arrowAlpha -= 8;211212if (self->timer < 0.2)213self->scale = fmaxf(self->scale + ((1.5f - self->scale) / ((Engine.deltaTime * 60.0) * 8.0)), 0.0);214else215self->scale = fmaxf(self->scale + ((-1.0f - self->scale) / ((Engine.deltaTime * 60.0) * 8.0)), 0.0);216217NewRenderState();218MatrixScaleXYZF(&self->renderMatrix, self->scale, self->scale, 1.0);219MatrixTranslateXYZF(&self->matrixTemp, 0.0, -8.0, 160.0);220MatrixMultiplyF(&self->renderMatrix, &self->matrixTemp);221SetRenderMatrix(&self->renderMatrix);222223memcpy(&self->label->renderMatrix, &self->renderMatrix, sizeof(MatrixF));224for (int i = 0; i < ABOUT_BTN_COUNT; ++i) memcpy(&self->buttons[i]->renderMatrix, &self->renderMatrix, sizeof(MatrixF));225226self->timer += Engine.deltaTime;227if (self->timer > 0.5) {228optionsMenu->state = OPTIONSMENU_STATE_EXITSUBMENU;229RemoveNativeObject(self->label);230for (int i = 0; i < ABOUT_BTN_COUNT; ++i) RemoveNativeObject(self->buttons[i]);231RemoveNativeObject(self);232return;233}234break;235}236}237238RenderMesh(self->meshPanel, MESH_COLORS, false);239RenderText(self->gameTitle, FONT_LABEL, 24.0, 56.0, 0.0, 0.125, 255);240RenderText(self->versionNameText, FONT_LABEL, 24.0, 32.0, 0.0, 0.125, 255);241RenderText(self->versionText, FONT_LABEL, 24.0, 8.0, 0.0, 0.125, 255);242NewRenderState();243244self->rotationY -= Engine.deltaTime;245if (self->rotationY < -(M_PI_2))246self->rotationY += (M_PI_2);247248MatrixScaleXYZF(&self->renderMatrix2, 0.6 * self->scale, 0.6 * self->scale, 0.6 * self->scale);249MatrixRotateYF(&self->matrixTemp, self->rotationY);250MatrixMultiplyF(&self->renderMatrix2, &self->matrixTemp);251MatrixTranslateXYZF(&self->matrixTemp, -56.0, -8.0, 160.0);252MatrixMultiplyF(&self->renderMatrix2, &self->matrixTemp);253SetRenderMatrix(&self->renderMatrix2);254RenderMesh(self->meshBox, MESH_NORMALS, true);255SetRenderMatrix(NULL);256257if (self->backPressed)258RenderImage(128.0, -92.0, 160.0, 0.3, 0.3, 64.0, 64.0, 128.0, 128.0, 128.0, 128.0, self->arrowAlpha, self->textureArrows);259else260RenderImage(128.0, -92.0, 160.0, 0.3, 0.3, 64.0, 64.0, 128.0, 128.0, 128.0, 0.0, self->arrowAlpha, self->textureArrows);261}262263264