Merge pull request #227 from chatrat12/wide-screen-support
Added simple wide screen support #187
This commit is contained in:
commit
f1283a397a
|
@ -21,8 +21,10 @@ void gameplayOptionsInit(struct GameplayOptions* gameplayOptions) {
|
|||
gameplayOptions->selectedItem = GameplayOptionMovingPortals;
|
||||
|
||||
gameplayOptions->movingPortals = menuBuildCheckbox(&gDejaVuSansFont, "Movable Portals", GAMEPLAY_X + 8, GAMEPLAY_Y + 8);
|
||||
gameplayOptions->wideScreen = menuBuildCheckbox(&gDejaVuSansFont, "Wide Screen", GAMEPLAY_X + 8, GAMEPLAY_Y + 28);
|
||||
|
||||
gameplayOptions->movingPortals.checked = (gSaveData.controls.flags & ControlSaveFlagsInvert) != 0;
|
||||
gameplayOptions->wideScreen.checked = (gSaveData.controls.flags & ControlSaveWideScreen) != 0;
|
||||
}
|
||||
|
||||
enum MenuDirection gameplayOptionsUpdate(struct GameplayOptions* gameplayOptions) {
|
||||
|
@ -62,6 +64,18 @@ enum MenuDirection gameplayOptionsUpdate(struct GameplayOptions* gameplayOptions
|
|||
}
|
||||
|
||||
break;
|
||||
case GameplayOptionWideScreen:
|
||||
if (controllerGetButtonDown(0, A_BUTTON)) {
|
||||
gameplayOptions->wideScreen.checked = !gameplayOptions->wideScreen.checked;
|
||||
soundPlayerPlay(SOUNDS_BUTTONCLICKRELEASE, 1.0f, 0.5f, NULL, NULL);
|
||||
|
||||
if (gameplayOptions->wideScreen.checked) {
|
||||
gSaveData.controls.flags |= ControlSaveWideScreen;
|
||||
} else {
|
||||
gSaveData.controls.flags &= ~ControlSaveWideScreen;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (controllerDir & ControllerDirectionLeft) {
|
||||
|
@ -80,6 +94,9 @@ void gameplayOptionsRender(struct GameplayOptions* gameplayOptions, struct Rende
|
|||
|
||||
gSPDisplayList(renderState->dl++, gameplayOptions->movingPortals.outline);
|
||||
renderState->dl = menuCheckboxRender(&gameplayOptions->movingPortals, renderState->dl);
|
||||
|
||||
gSPDisplayList(renderState->dl++, gameplayOptions->wideScreen.outline);
|
||||
renderState->dl = menuCheckboxRender(&gameplayOptions->wideScreen, renderState->dl);
|
||||
|
||||
gSPDisplayList(renderState->dl++, ui_material_revert_list[SOLID_ENV_INDEX]);
|
||||
|
||||
|
@ -89,5 +106,8 @@ void gameplayOptionsRender(struct GameplayOptions* gameplayOptions, struct Rende
|
|||
menuSetRenderColor(renderState, gameplayOptions->selectedItem == GameplayOptionMovingPortals, &gSelectionGray, &gColorWhite);
|
||||
gSPDisplayList(renderState->dl++, gameplayOptions->movingPortals.text);
|
||||
|
||||
menuSetRenderColor(renderState, gameplayOptions->selectedItem == GameplayOptionWideScreen, &gSelectionGray, &gColorWhite);
|
||||
gSPDisplayList(renderState->dl++, gameplayOptions->wideScreen.text);
|
||||
|
||||
gSPDisplayList(renderState->dl++, ui_material_revert_list[DEJAVU_SANS_INDEX]);
|
||||
}
|
|
@ -6,12 +6,14 @@
|
|||
|
||||
enum GameplayOption {
|
||||
GameplayOptionMovingPortals,
|
||||
GameplayOptionWideScreen,
|
||||
|
||||
GameplayOptionCount,
|
||||
};
|
||||
|
||||
struct GameplayOptions {
|
||||
struct MenuCheckbox movingPortals;
|
||||
struct MenuCheckbox wideScreen;
|
||||
Gfx* lookSensitivityText;
|
||||
Gfx* lookAccelerationText;
|
||||
short selectedItem;
|
||||
|
|
|
@ -38,6 +38,7 @@ enum ControlSaveFlags {
|
|||
ControlSaveTankControls = (1 << 1),
|
||||
|
||||
ControlSaveMoveablePortals = (1 << 8),
|
||||
ControlSaveWideScreen = (1 << 9),
|
||||
};
|
||||
|
||||
struct ControlSaveState {
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
#include "portal_render.h"
|
||||
#include "../scene/dynamic_scene.h"
|
||||
#include "../levels/levels.h"
|
||||
#include "../savefile/savefile.h"
|
||||
|
||||
#include "../build/assets/models/portal/portal_blue.h"
|
||||
#include "../build/assets/models/portal/portal_blue_face.h"
|
||||
|
@ -21,6 +22,8 @@
|
|||
#define MIN_VP_WIDTH 64
|
||||
#define CAMERA_CLIPPING_RADIUS 0.2f
|
||||
#define PORTAL_CLIPPING_OFFSET 0.1f
|
||||
#define ASPECT_SD 1.333333333333333 // 4:3
|
||||
#define ASPECT_WIDE 1.777777777777778 // 16:9
|
||||
|
||||
void renderPropsInit(struct RenderProps* props, struct Camera* camera, float aspectRatio, struct RenderState* renderState, u16 roomIndex) {
|
||||
props->camera = *camera;
|
||||
|
@ -109,6 +112,10 @@ Vp* renderPropsBuildViewport(struct RenderProps* props, struct RenderState* rend
|
|||
|
||||
void renderPlanFinishView(struct RenderPlan* renderPlan, struct Scene* scene, struct RenderProps* properties, struct RenderState* renderState);
|
||||
|
||||
inline static float getAspect()
|
||||
{
|
||||
return (gSaveData.controls.flags & ControlSaveWideScreen) != 0 ? ASPECT_WIDE : ASPECT_SD;
|
||||
}
|
||||
|
||||
#define CALC_SCREEN_SPACE(clip_space, screen_size) ((clip_space + 1.0f) * ((screen_size) / 2))
|
||||
|
||||
|
@ -146,7 +153,7 @@ int renderPlanPortal(struct RenderPlan* renderPlan, struct Scene* scene, struct
|
|||
|
||||
struct ScreenClipper clipper;
|
||||
|
||||
screenClipperInitWithCamera(&clipper, ¤t->camera, (float)SCREEN_WD / (float)SCREEN_HT, portalTransform);
|
||||
screenClipperInitWithCamera(&clipper, ¤t->camera, getAspect(), portalTransform);
|
||||
struct Box2D clippingBounds;
|
||||
screenClipperBoundingPoints(&clipper, gPortalOutline, sizeof(gPortalOutline) / sizeof(*gPortalOutline), &clippingBounds);
|
||||
|
||||
|
@ -437,7 +444,7 @@ void renderPlanAdjustViewportDepth(struct RenderPlan* renderPlan) {
|
|||
}
|
||||
|
||||
void renderPlanBuild(struct RenderPlan* renderPlan, struct Scene* scene, struct RenderState* renderState) {
|
||||
renderPropsInit(&renderPlan->stageProps[0], &scene->camera, (float)SCREEN_WD / (float)SCREEN_HT, renderState, scene->player.body.currentRoom);
|
||||
renderPropsInit(&renderPlan->stageProps[0], &scene->camera, getAspect(), renderState, scene->player.body.currentRoom);
|
||||
renderPlan->stageCount = 1;
|
||||
renderPlan->clippedPortalIndex = -1;
|
||||
renderPlan->nearPolygonCount = 0;
|
||||
|
|
Loading…
Reference in a new issue