Path: blob/main/RSDKv4/NativeObjects/AchievementsMenu.cpp
817 views
#include "RetroEngine.hpp"12#if !RETRO_USE_ORIGINAL_CODE3void AchievementsMenu_Create(void *objPtr)4{5RSDK_THIS(AchievementsMenu);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, strAchievements, FONT_HEADING);1718self->scale = 0;19self->arrowAlpha = 0;2021self->meshPanel = LoadMesh("Data/Game/Models/Panel.bin", -1);22SetMeshVertexColors(self->meshPanel, 0, 0, 0, 0xC0);23self->textureArrows = LoadTexture("Data/Game/Menu/ArrowButtons.png", TEXFMT_RGBA4444);2425char buffer[0x40];26char buffer2[0x80];2728float y = 24.0f;29for (int i = 0; i < 5; ++i) {30self->displays[i] = CREATE_ENTITY(AchievementDisplay);31self->displays[i]->fontID = FONT_LABEL;32self->displays[i]->x = -112.0f;33self->displays[i]->y = y;34self->displays[i]->scale = 0.11;35self->displays[i]->state = achievements[i].status == 100;36self->displays[i]->useRenderMatrix = true;3738StringUpperCase(buffer, achievements[i].name);39StringUpperCase(buffer2, achievements[i].desc);40SetStringToFont8(self->displays[i]->achievementText, buffer, self->displays[i]->fontID);41SetStringToFont8(self->displays[i]->descriptionText, buffer2, self->displays[i]->fontID);4243y -= 96.0f;44}45}46void AchievementsMenu_Main(void *objPtr)47{48RSDK_THIS(AchievementsMenu);4950switch (self->state) {51case 0: {52if (self->arrowAlpha < 0x100)53self->arrowAlpha += 8;5455self->scale = fminf(self->scale + ((1.05 - self->scale) / ((60.0 * Engine.deltaTime) * 8.0)), 1.0f);5657NewRenderState();58MatrixScaleXYZF(&self->renderMatrix, self->scale, self->scale, 1.0);59MatrixTranslateXYZF(&self->matrixTemp, 0.0, 0, 160.0);60MatrixMultiplyF(&self->renderMatrix, &self->matrixTemp);61SetRenderMatrix(&self->renderMatrix);6263memcpy(&self->label->renderMatrix, &self->renderMatrix, sizeof(MatrixF));64for (int i = 0; i < 5; ++i) memcpy(&self->displays[i]->renderMatrix, &self->renderMatrix, sizeof(MatrixF));6566self->timer += Engine.deltaTime;67if (self->timer > 0.5) {68self->arrowAlpha = 0x100;69self->timer = 0.0;70self->state = 1;71}72break;73}74case 1: {75CheckKeyDown(&keyDown);76CheckKeyPress(&keyPress);77SetRenderMatrix(&self->renderMatrix);7879if (usePhysicalControls) {80if (touches > 0) {81usePhysicalControls = false;82}83else {84if (keyPress.up) {85}86else if (keyPress.down) {87}8889if (keyPress.B) {90PlaySfxByName("Menu Back", false);91self->backPressed = false;92self->state = ABOUT_STATE_EXIT;93}94}95}96else {97if (touches > 0) {98self->backPressed = CheckTouchRect(128.0, -92.0, 32.0, 32.0) >= 0;99}100else {101if (keyPress.B || self->backPressed) {102PlaySfxByName("Menu Back", false);103self->backPressed = false;104self->state = ABOUT_STATE_EXIT;105}106else {107if (self->state == ABOUT_STATE_MAIN) {108if (keyDown.up) {109usePhysicalControls = true;110}111if (keyDown.down) {112usePhysicalControls = true;113}114}115}116}117}118break;119}120case 2: { // fade out121if (self->arrowAlpha > 0)122self->arrowAlpha -= 8;123124if (self->timer < 0.2)125self->scale = fmaxf(self->scale + ((1.5f - self->scale) / ((Engine.deltaTime * 60.0) * 8.0)), 0.0);126else127self->scale = fmaxf(self->scale + ((-1.0f - self->scale) / ((Engine.deltaTime * 60.0) * 8.0)), 0.0);128129NewRenderState();130MatrixScaleXYZF(&self->renderMatrix, self->scale, self->scale, 1.0);131MatrixTranslateXYZF(&self->matrixTemp, 0.0, 0, 160.0);132MatrixMultiplyF(&self->renderMatrix, &self->matrixTemp);133SetRenderMatrix(&self->renderMatrix);134135memcpy(&self->label->renderMatrix, &self->renderMatrix, sizeof(MatrixF));136for (int i = 0; i < 5; ++i) memcpy(&self->displays[i]->renderMatrix, &self->renderMatrix, sizeof(MatrixF));137138self->timer += Engine.deltaTime;139if (self->timer > 0.5) {140// mainMenu->state = 4;141RemoveNativeObject(self->label);142for (int i = 0; i < 5; ++i) RemoveNativeObject(self->displays[i]);143RemoveNativeObject(self);144return;145}146break;147}148}149150RenderMesh(self->meshPanel, MESH_COLORS, false);151NewRenderState();152SetRenderMatrix(NULL);153154if (self->backPressed)155RenderImage(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);156else157RenderImage(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);158}159#endif160161162