Merge pull request #577 from VanGorkum/Gorky/portal
Introduce Portal UI look from Switch version
This commit is contained in:
commit
cfd50df93f
|
@ -209,3 +209,14 @@ materials:
|
||||||
gDPSetTextureFilter: G_TF_BILERP
|
gDPSetTextureFilter: G_TF_BILERP
|
||||||
gDPSetTextureLUT: G_TT_NONE
|
gDPSetTextureLUT: G_TT_NONE
|
||||||
gDPSetTexturePersp: G_TP_NONE
|
gDPSetTexturePersp: G_TP_NONE
|
||||||
|
|
||||||
|
orange_transparent_overlay:
|
||||||
|
gDPSetCombineMode:
|
||||||
|
color: ["0", "0", "0", ENVIRONMENT]
|
||||||
|
alpha: ["0", "0", "0", ENVIRONMENT]
|
||||||
|
gDPSetRenderMode: G_RM_XLU_SURF
|
||||||
|
gDPSetEnvColor:
|
||||||
|
r: 255
|
||||||
|
g: 156
|
||||||
|
b: 0
|
||||||
|
a: 142
|
||||||
|
|
|
@ -19,6 +19,12 @@
|
||||||
#define PORTAL_LOGO_O_WIDTH 30
|
#define PORTAL_LOGO_O_WIDTH 30
|
||||||
#define PORTAL_LOGO_HEIGHT 47
|
#define PORTAL_LOGO_HEIGHT 47
|
||||||
|
|
||||||
|
#define LANDING_MENU_TEXT_START_X 30
|
||||||
|
#define LANDING_MENU_TEXT_START_Y 132
|
||||||
|
#define STRIDE_OPTION_1 12
|
||||||
|
#define STRIDE_OPTION_2 16
|
||||||
|
#define PACKED_MENU_THRESHOLD 4
|
||||||
|
|
||||||
Gfx portal_logo_gfx[] = {
|
Gfx portal_logo_gfx[] = {
|
||||||
gsSPTextureRectangle(
|
gsSPTextureRectangle(
|
||||||
PORTAL_LOGO_X << 2,
|
PORTAL_LOGO_X << 2,
|
||||||
|
@ -55,12 +61,15 @@ Gfx portal_logo_gfx[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
void landingMenuInitText(struct LandingMenu* landingMenu) {
|
void landingMenuInitText(struct LandingMenu* landingMenu) {
|
||||||
int y = 132;
|
int y = LANDING_MENU_TEXT_START_Y;
|
||||||
|
int stride = getCurrentStrideValue(landingMenu);
|
||||||
int stride = landingMenu->optionCount > 4 ? 12 : 16;
|
|
||||||
|
|
||||||
for (int i = 0; i < landingMenu->optionCount; ++i) {
|
for (int i = 0; i < landingMenu->optionCount; ++i) {
|
||||||
landingMenu->optionText[i] = menuBuildPrerenderedText(&gDejaVuSansFont, translationsGet(landingMenu->options[i].messageId), 30, y, SCREEN_WD);
|
landingMenu->optionText[i] = menuBuildPrerenderedText(&gDejaVuSansFont,
|
||||||
|
translationsGet(landingMenu->options[i].messageId),
|
||||||
|
LANDING_MENU_TEXT_START_X,
|
||||||
|
y,
|
||||||
|
SCREEN_WD);
|
||||||
y += stride;
|
y += stride;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -135,11 +144,36 @@ void landingMenuRender(struct LandingMenu* landingMenu, struct RenderState* rend
|
||||||
gSPDisplayList(renderState->dl++, portal_logo_gfx);
|
gSPDisplayList(renderState->dl++, portal_logo_gfx);
|
||||||
gSPDisplayList(renderState->dl++, ui_material_revert_list[PORTAL_LOGO_INDEX]);
|
gSPDisplayList(renderState->dl++, ui_material_revert_list[PORTAL_LOGO_INDEX]);
|
||||||
|
|
||||||
|
int paddingDepthY = 2;
|
||||||
|
int paddingDepthX = 4;
|
||||||
|
if (landingMenu->optionCount > PACKED_MENU_THRESHOLD){
|
||||||
|
paddingDepthY = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int maxTextWidth = 0;
|
||||||
|
for (int i = 0; i < landingMenu->optionCount; ++i) {
|
||||||
|
if (landingMenu->optionText[i]->width > maxTextWidth) {
|
||||||
|
maxTextWidth = landingMenu->optionText[i]->width;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
gSPDisplayList(renderState->dl++, ui_material_list[ORANGE_TRANSPARENT_OVERLAY_INDEX]);
|
||||||
|
gDPFillRectangle(renderState->dl++,
|
||||||
|
landingMenu->optionText[landingMenu->selectedItem]->x - paddingDepthX,
|
||||||
|
landingMenu->optionText[landingMenu->selectedItem]->y - paddingDepthY,
|
||||||
|
landingMenu->optionText[landingMenu->selectedItem]->x + maxTextWidth + paddingDepthX,
|
||||||
|
landingMenu->optionText[landingMenu->selectedItem]->y + getCurrentStrideValue(landingMenu) - paddingDepthY);
|
||||||
|
gSPDisplayList(renderState->dl++, ui_material_revert_list[ORANGE_TRANSPARENT_OVERLAY_INDEX]);
|
||||||
|
|
||||||
struct PrerenderedTextBatch* batch = prerenderedBatchStart();
|
struct PrerenderedTextBatch* batch = prerenderedBatchStart();
|
||||||
for (int i = 0; i < landingMenu->optionCount; ++i) {
|
for (int i = 0; i < landingMenu->optionCount; ++i) {
|
||||||
prerenderedBatchAdd(batch, landingMenu->optionText[i], landingMenu->selectedItem == i ? &gSelectionGray: &gColorWhite);
|
prerenderedBatchAdd(batch, landingMenu->optionText[i], &gColorWhite);
|
||||||
}
|
}
|
||||||
renderState->dl = prerenderedBatchFinish(batch, gDejaVuSansImages, renderState->dl);
|
renderState->dl = prerenderedBatchFinish(batch, gDejaVuSansImages, renderState->dl);
|
||||||
gSPDisplayList(renderState->dl++, ui_material_revert_list[DEJAVU_SANS_0_INDEX]);
|
gSPDisplayList(renderState->dl++, ui_material_revert_list[DEJAVU_SANS_0_INDEX]);
|
||||||
|
}
|
||||||
|
|
||||||
|
int getCurrentStrideValue(struct LandingMenu* landingMenu)
|
||||||
|
{
|
||||||
|
return (landingMenu->optionCount > PACKED_MENU_THRESHOLD ? STRIDE_OPTION_1 : STRIDE_OPTION_2);
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,6 +22,6 @@ void landingMenuInit(struct LandingMenu* landingMenu, struct LandingMenuOption*
|
||||||
void landingMenuRebuildText(struct LandingMenu* landingMenu);
|
void landingMenuRebuildText(struct LandingMenu* landingMenu);
|
||||||
struct LandingMenuOption* landingMenuUpdate(struct LandingMenu* landingMenu);
|
struct LandingMenuOption* landingMenuUpdate(struct LandingMenu* landingMenu);
|
||||||
void landingMenuRender(struct LandingMenu* landingMenu, struct RenderState* renderState, struct GraphicsTask* task);
|
void landingMenuRender(struct LandingMenu* landingMenu, struct RenderState* renderState, struct GraphicsTask* task);
|
||||||
|
int getCurrentStrideValue(struct LandingMenu* landingMenu);
|
||||||
|
|
||||||
#endif
|
#endif
|
Loading…
Reference in a new issue