mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2025-10-30 08:01:01 +00:00
new djui hud tools: viewport, scissor and render line (#916)
added these new djui hud tools for Lua: - djui_hud_set_viewport - djui_hud_reset_viewport - djui_hud_set_scissor - djui_hud_reset_scissor - djui_hud_render_line - this code could already be done exactly. this is just to make rendering lines more efficient. Also made nametags use a viewport for scaling in the credits.
This commit is contained in:
parent
95588761fd
commit
ac1cf57cf0
10 changed files with 383 additions and 25 deletions
|
|
@ -3950,6 +3950,34 @@ function djui_hud_get_mouse_scroll_y()
|
|||
-- ...
|
||||
end
|
||||
|
||||
--- @param x number
|
||||
--- @param y number
|
||||
--- @param width number
|
||||
--- @param height number
|
||||
--- Sets the viewport to the specified position and size, this will resize
|
||||
function djui_hud_set_viewport(x, y, width, height)
|
||||
-- ...
|
||||
end
|
||||
|
||||
--- put the description here
|
||||
function djui_hud_reset_viewport()
|
||||
-- ...
|
||||
end
|
||||
|
||||
--- @param x number
|
||||
--- @param y number
|
||||
--- @param width number
|
||||
--- @param height number
|
||||
--- put the description here
|
||||
function djui_hud_set_scissor(x, y, width, height)
|
||||
-- ...
|
||||
end
|
||||
|
||||
--- put the description here
|
||||
function djui_hud_reset_scissor()
|
||||
-- ...
|
||||
end
|
||||
|
||||
--- @param message string
|
||||
--- @return number
|
||||
--- Measures the length of `message` in the current font
|
||||
|
|
@ -4056,6 +4084,16 @@ function djui_hud_render_rect_interpolated(prevX, prevY, prevWidth, prevHeight,
|
|||
-- ...
|
||||
end
|
||||
|
||||
--- @param p1X number
|
||||
--- @param p1Y number
|
||||
--- @param p2X number
|
||||
--- @param p2Y number
|
||||
--- @param size number
|
||||
--- Renders an DJUI HUD line onto the screen
|
||||
function djui_hud_render_line(p1X, p1Y, p2X, p2Y, size)
|
||||
-- ...
|
||||
end
|
||||
|
||||
--- @return number
|
||||
--- Gets the current camera FOV
|
||||
function get_current_fov()
|
||||
|
|
|
|||
|
|
@ -3268,6 +3268,100 @@ Returns the amount scrolled vertically (-down/up+)
|
|||
|
||||
<br />
|
||||
|
||||
## [djui_hud_set_viewport](#djui_hud_set_viewport)
|
||||
|
||||
### Description
|
||||
Sets the viewport to the specified position and size, this will resize
|
||||
|
||||
### Lua Example
|
||||
`djui_hud_set_viewport(x, y, width, height)`
|
||||
|
||||
### Parameters
|
||||
| Field | Type |
|
||||
| ----- | ---- |
|
||||
| x | `number` |
|
||||
| y | `number` |
|
||||
| width | `number` |
|
||||
| height | `number` |
|
||||
|
||||
### Returns
|
||||
- None
|
||||
|
||||
### C Prototype
|
||||
`void djui_hud_set_viewport(f32 x, f32 y, f32 width, f32 height);`
|
||||
|
||||
[:arrow_up_small:](#)
|
||||
|
||||
<br />
|
||||
|
||||
## [djui_hud_reset_viewport](#djui_hud_reset_viewport)
|
||||
|
||||
### Description
|
||||
put the description here
|
||||
|
||||
### Lua Example
|
||||
`djui_hud_reset_viewport()`
|
||||
|
||||
### Parameters
|
||||
- None
|
||||
|
||||
### Returns
|
||||
- None
|
||||
|
||||
### C Prototype
|
||||
`void djui_hud_reset_viewport(void);`
|
||||
|
||||
[:arrow_up_small:](#)
|
||||
|
||||
<br />
|
||||
|
||||
## [djui_hud_set_scissor](#djui_hud_set_scissor)
|
||||
|
||||
### Description
|
||||
put the description here
|
||||
|
||||
### Lua Example
|
||||
`djui_hud_set_scissor(x, y, width, height)`
|
||||
|
||||
### Parameters
|
||||
| Field | Type |
|
||||
| ----- | ---- |
|
||||
| x | `number` |
|
||||
| y | `number` |
|
||||
| width | `number` |
|
||||
| height | `number` |
|
||||
|
||||
### Returns
|
||||
- None
|
||||
|
||||
### C Prototype
|
||||
`void djui_hud_set_scissor(f32 x, f32 y, f32 width, f32 height);`
|
||||
|
||||
[:arrow_up_small:](#)
|
||||
|
||||
<br />
|
||||
|
||||
## [djui_hud_reset_scissor](#djui_hud_reset_scissor)
|
||||
|
||||
### Description
|
||||
put the description here
|
||||
|
||||
### Lua Example
|
||||
`djui_hud_reset_scissor()`
|
||||
|
||||
### Parameters
|
||||
- None
|
||||
|
||||
### Returns
|
||||
- None
|
||||
|
||||
### C Prototype
|
||||
`void djui_hud_reset_scissor(void);`
|
||||
|
||||
[:arrow_up_small:](#)
|
||||
|
||||
<br />
|
||||
|
||||
## [djui_hud_measure_text](#djui_hud_measure_text)
|
||||
|
||||
### Description
|
||||
|
|
@ -3526,6 +3620,33 @@ Renders an interpolated DJUI HUD rect onto the screen
|
|||
|
||||
<br />
|
||||
|
||||
## [djui_hud_render_line](#djui_hud_render_line)
|
||||
|
||||
### Description
|
||||
Renders an DJUI HUD line onto the screen
|
||||
|
||||
### Lua Example
|
||||
`djui_hud_render_line(p1X, p1Y, p2X, p2Y, size)`
|
||||
|
||||
### Parameters
|
||||
| Field | Type |
|
||||
| ----- | ---- |
|
||||
| p1X | `number` |
|
||||
| p1Y | `number` |
|
||||
| p2X | `number` |
|
||||
| p2Y | `number` |
|
||||
| size | `number` |
|
||||
|
||||
### Returns
|
||||
- None
|
||||
|
||||
### C Prototype
|
||||
`void djui_hud_render_line(f32 p1X, f32 p1Y, f32 p2X, f32 p2Y, f32 size);`
|
||||
|
||||
[:arrow_up_small:](#)
|
||||
|
||||
<br />
|
||||
|
||||
## [get_current_fov](#get_current_fov)
|
||||
|
||||
### Description
|
||||
|
|
|
|||
|
|
@ -776,6 +776,10 @@
|
|||
- [djui_hud_get_mouse_buttons_released](functions-3.md#djui_hud_get_mouse_buttons_released)
|
||||
- [djui_hud_get_mouse_scroll_x](functions-3.md#djui_hud_get_mouse_scroll_x)
|
||||
- [djui_hud_get_mouse_scroll_y](functions-3.md#djui_hud_get_mouse_scroll_y)
|
||||
- [djui_hud_set_viewport](functions-3.md#djui_hud_set_viewport)
|
||||
- [djui_hud_reset_viewport](functions-3.md#djui_hud_reset_viewport)
|
||||
- [djui_hud_set_scissor](functions-3.md#djui_hud_set_scissor)
|
||||
- [djui_hud_reset_scissor](functions-3.md#djui_hud_reset_scissor)
|
||||
- [djui_hud_measure_text](functions-3.md#djui_hud_measure_text)
|
||||
- [djui_hud_print_text](functions-3.md#djui_hud_print_text)
|
||||
- [djui_hud_print_text_interpolated](functions-3.md#djui_hud_print_text_interpolated)
|
||||
|
|
@ -785,6 +789,7 @@
|
|||
- [djui_hud_render_texture_tile_interpolated](functions-3.md#djui_hud_render_texture_tile_interpolated)
|
||||
- [djui_hud_render_rect](functions-3.md#djui_hud_render_rect)
|
||||
- [djui_hud_render_rect_interpolated](functions-3.md#djui_hud_render_rect_interpolated)
|
||||
- [djui_hud_render_line](functions-3.md#djui_hud_render_line)
|
||||
- [get_current_fov](functions-3.md#get_current_fov)
|
||||
- [djui_hud_get_fov_coeff](functions-3.md#djui_hud_get_fov_coeff)
|
||||
- [djui_hud_world_pos_to_screen_pos](functions-3.md#djui_hud_world_pos_to_screen_pos)
|
||||
|
|
|
|||
|
|
@ -47,8 +47,8 @@ struct SpawnInfo *gMarioSpawnInfo = &gPlayerSpawnInfos[0];
|
|||
struct Area *gAreas = gAreaData;
|
||||
struct Area *gCurrentArea = NULL;
|
||||
struct CreditsEntry *gCurrCreditsEntry = NULL;
|
||||
Vp *D_8032CE74 = NULL;
|
||||
Vp *D_8032CE78 = NULL;
|
||||
Vp *gViewportOverride = NULL;
|
||||
Vp *gViewportClip = NULL;
|
||||
s16 gWarpTransDelay = 0;
|
||||
u32 gFBSetColor = 0;
|
||||
u32 gWarpTransFBSetColor = 0;
|
||||
|
|
@ -90,7 +90,7 @@ u8 sSpawnTypeFromWarpBhv[] = {
|
|||
MARIO_SPAWN_AIRBORNE_STAR_COLLECT, MARIO_SPAWN_AIRBORNE_DEATH, MARIO_SPAWN_LAUNCH_STAR_COLLECT, MARIO_SPAWN_LAUNCH_DEATH,
|
||||
};
|
||||
|
||||
Vp D_8032CF00 = { {
|
||||
Vp gViewportFullscreen = { {
|
||||
{ 640, 480, 511, 0 },
|
||||
{ 640, 480, 511, 0 },
|
||||
} };
|
||||
|
|
@ -107,8 +107,8 @@ void override_viewport_and_clip(Vp *a, Vp *b, u8 c, u8 d, u8 e) {
|
|||
u16 sp6 = ((c >> 3) << 11) | ((d >> 3) << 6) | ((e >> 3) << 1) | 1;
|
||||
|
||||
gFBSetColor = (sp6 << 16) | sp6;
|
||||
D_8032CE74 = a;
|
||||
D_8032CE78 = b;
|
||||
gViewportOverride = a;
|
||||
gViewportClip = b;
|
||||
}
|
||||
|
||||
void set_warp_transition_rgb(u8 red, u8 green, u8 blue) {
|
||||
|
|
@ -446,9 +446,9 @@ void play_transition_after_delay(s16 transType, s16 time, u8 red, u8 green, u8 b
|
|||
void render_game(void) {
|
||||
dynos_update_gfx();
|
||||
if (gCurrentArea != NULL && !gWarpTransition.pauseRendering) {
|
||||
geo_process_root(gCurrentArea->root, D_8032CE74, D_8032CE78, gFBSetColor);
|
||||
geo_process_root(gCurrentArea->root, gViewportOverride, gViewportClip, gFBSetColor);
|
||||
|
||||
gSPViewport(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&D_8032CF00));
|
||||
gSPViewport(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gViewportFullscreen));
|
||||
|
||||
gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, BORDER_HEIGHT, SCREEN_WIDTH,
|
||||
SCREEN_HEIGHT - BORDER_HEIGHT);
|
||||
|
|
@ -479,8 +479,8 @@ void render_game(void) {
|
|||
gSaveOptSelectIndex = gPauseScreenMode;
|
||||
}
|
||||
|
||||
if (D_8032CE78 != NULL) {
|
||||
make_viewport_clip_rect(D_8032CE78);
|
||||
if (gViewportClip != NULL) {
|
||||
make_viewport_clip_rect(gViewportClip);
|
||||
} else
|
||||
gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, BORDER_HEIGHT, SCREEN_WIDTH,
|
||||
SCREEN_HEIGHT - BORDER_HEIGHT);
|
||||
|
|
@ -502,15 +502,15 @@ void render_game(void) {
|
|||
}
|
||||
} else {
|
||||
render_text_labels();
|
||||
if (D_8032CE78 != NULL) {
|
||||
clear_viewport(D_8032CE78, gWarpTransFBSetColor);
|
||||
if (gViewportClip != NULL) {
|
||||
clear_viewport(gViewportClip, gWarpTransFBSetColor);
|
||||
} else {
|
||||
clear_frame_buffer(gWarpTransFBSetColor);
|
||||
}
|
||||
}
|
||||
|
||||
D_8032CE74 = NULL;
|
||||
D_8032CE78 = NULL;
|
||||
gViewportOverride = NULL;
|
||||
gViewportClip = NULL;
|
||||
}
|
||||
|
||||
void get_area_minimum_y(u8* hasMinY, f32* minY) {
|
||||
|
|
|
|||
|
|
@ -159,6 +159,8 @@ void djui_reset_hud_params(void) {
|
|||
djui_hud_set_rotation(0, 0, 0);
|
||||
djui_hud_reset_color();
|
||||
djui_hud_set_filter(FILTER_NEAREST);
|
||||
djui_hud_reset_viewport();
|
||||
djui_hud_reset_scissor();
|
||||
}
|
||||
|
||||
void djui_render(void) {
|
||||
|
|
|
|||
|
|
@ -82,6 +82,24 @@ static void djui_hud_size_translate(f32* size) {
|
|||
}
|
||||
}
|
||||
|
||||
// Translates position and scale to N64 resolution
|
||||
static void djui_hud_translate_positions(f32 *outX, f32 *outY, f32 *outW, f32 *outH) {
|
||||
// translate position
|
||||
djui_hud_position_translate(outX, outY);
|
||||
*outX -= GFX_DIMENSIONS_FROM_LEFT_EDGE(0);
|
||||
*outY -= SCREEN_HEIGHT;
|
||||
|
||||
// translate scale
|
||||
if (sResolution == RESOLUTION_DJUI) {
|
||||
u32 windowWidth, windowHeight;
|
||||
gfx_get_dimensions(&windowWidth, &windowHeight);
|
||||
f32 screenWidth = (f32) windowWidth / djui_gfx_get_scale();
|
||||
f32 screenHeight = (f32) windowHeight / djui_gfx_get_scale();
|
||||
*outW = (*outW / screenWidth) * SCREEN_WIDTH;
|
||||
*outH = (*outH / screenHeight) * SCREEN_HEIGHT;
|
||||
}
|
||||
}
|
||||
|
||||
////////////
|
||||
// interp //
|
||||
////////////
|
||||
|
|
@ -303,6 +321,43 @@ f32 djui_hud_get_mouse_scroll_y(void) {
|
|||
return mouse_scroll_y;
|
||||
}
|
||||
|
||||
void djui_hud_set_viewport(f32 x, f32 y, f32 width, f32 height) {
|
||||
// translate position and scale
|
||||
f32 translatedX = x, translatedY = y, translatedW = width, translatedH = height;
|
||||
djui_hud_translate_positions(&translatedX, &translatedY, &translatedW, &translatedH);
|
||||
|
||||
// convert to viewport structure
|
||||
static Vp vp = {{
|
||||
{ 640, 480, 511, 0 },
|
||||
{ 640, 480, 511, 0 },
|
||||
}};
|
||||
Vp_t *viewport = &vp.vp;
|
||||
viewport->vscale[0] = translatedW * 2.0f;
|
||||
viewport->vscale[1] = translatedH * 2.0f;
|
||||
viewport->vtrans[0] = (translatedW + translatedX) * 2.0f;
|
||||
viewport->vtrans[1] = (translatedH + translatedY) * 2.0f;
|
||||
|
||||
gSPViewport(gDisplayListHead++, &vp);
|
||||
}
|
||||
|
||||
void djui_hud_reset_viewport(void) {
|
||||
extern Vp gViewportFullscreen;
|
||||
gSPViewport(gDisplayListHead++, &gViewportFullscreen);
|
||||
}
|
||||
|
||||
void djui_hud_set_scissor(f32 x, f32 y, f32 width, f32 height) {
|
||||
// translate position and scale
|
||||
f32 translatedX = x, translatedY = y, translatedW = width, translatedH = height;
|
||||
djui_hud_translate_positions(&translatedX, &translatedY, &translatedW, &translatedH);
|
||||
|
||||
// apply the scissor
|
||||
gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, translatedX, translatedY, translatedW, translatedH);
|
||||
}
|
||||
|
||||
void djui_hud_reset_scissor(void) {
|
||||
gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, BORDER_HEIGHT, SCREEN_WIDTH, SCREEN_HEIGHT - BORDER_HEIGHT);
|
||||
}
|
||||
|
||||
f32 djui_hud_measure_text(const char* message) {
|
||||
if (message == NULL) { return 0; }
|
||||
const struct DjuiFont* font = gDjuiFonts[sFont];
|
||||
|
|
@ -644,6 +699,15 @@ void djui_hud_render_rect_interpolated(f32 prevX, f32 prevY, f32 prevWidth, f32
|
|||
interp->rotation = sRotation;
|
||||
}
|
||||
|
||||
void djui_hud_render_line(f32 p1X, f32 p1Y, f32 p2X, f32 p2Y, f32 size) {
|
||||
f32 dx = p2X - p1X;
|
||||
f32 dy = p2Y - p1Y;
|
||||
f32 angle = atan2s(dy, dx) - 0x4000; // -90 degrees to adjust for djui rotation
|
||||
f32 hDist = sqrt(sqr(dx) + sqr(dy));
|
||||
djui_hud_set_rotation(angle, 0, 0.5);
|
||||
djui_hud_render_rect(p1X, p1Y, hDist, size);
|
||||
}
|
||||
|
||||
static void hud_rotate_and_translate_vec3f(Vec3f vec, Mat4* mtx, Vec3f out) {
|
||||
out[0] = (*mtx)[0][0] * vec[0] + (*mtx)[1][0] * vec[1] + (*mtx)[2][0] * vec[2];
|
||||
out[1] = (*mtx)[0][1] * vec[0] + (*mtx)[1][1] * vec[1] + (*mtx)[2][1] * vec[2];
|
||||
|
|
@ -666,6 +730,8 @@ f32 djui_hud_get_fov_coeff() {
|
|||
return (fovDefault / fovCurrent) * 1.13f;
|
||||
}
|
||||
|
||||
bool gDjuiHudToWorldCalcViewport = true;
|
||||
|
||||
bool djui_hud_world_pos_to_screen_pos(Vec3f pos, OUT Vec3f out) {
|
||||
if (!gCamera) { return false; }
|
||||
hud_rotate_and_translate_vec3f(pos, &gCamera->mtx, out);
|
||||
|
|
@ -695,9 +761,9 @@ bool djui_hud_world_pos_to_screen_pos(Vec3f pos, OUT Vec3f out) {
|
|||
out[0] += screenWidth / 2.0f;
|
||||
out[1] += screenHeight / 2.0f;
|
||||
|
||||
extern Vp *D_8032CE74;
|
||||
if (D_8032CE74) {
|
||||
Vp_t *viewport = &D_8032CE74->vp;
|
||||
extern Vp *gViewportOverride;
|
||||
if (gViewportOverride && gDjuiHudToWorldCalcViewport) {
|
||||
Vp_t *viewport = &gViewportOverride->vp;
|
||||
f32 width = viewport->vscale[0] / 2.0f;
|
||||
f32 height = viewport->vscale[1] / 2.0f;
|
||||
f32 x = (viewport->vtrans[0] / 4.0f) - width / 2.0f;
|
||||
|
|
|
|||
|
|
@ -104,6 +104,14 @@ u8 djui_hud_get_mouse_buttons_released(void);
|
|||
f32 djui_hud_get_mouse_scroll_x(void);
|
||||
/* |description|Returns the amount scrolled vertically (-down/up+)|descriptionEnd| */
|
||||
f32 djui_hud_get_mouse_scroll_y(void);
|
||||
/* |description|Sets the viewport to the specified position and size, this will resize |descriptionEnd| */
|
||||
void djui_hud_set_viewport(f32 x, f32 y, f32 width, f32 height);
|
||||
/* |description|put the description here|descriptionEnd| */
|
||||
void djui_hud_reset_viewport(void);
|
||||
/* |description|put the description here|descriptionEnd| */
|
||||
void djui_hud_set_scissor(f32 x, f32 y, f32 width, f32 height);
|
||||
/* |description|put the description here|descriptionEnd| */
|
||||
void djui_hud_reset_scissor(void);
|
||||
|
||||
/* |description|Measures the length of `message` in the current font|descriptionEnd| */
|
||||
f32 djui_hud_measure_text(const char* message);
|
||||
|
|
@ -125,6 +133,8 @@ void djui_hud_render_texture_tile_interpolated(struct TextureInfo* texInfo, f32
|
|||
void djui_hud_render_rect(f32 x, f32 y, f32 width, f32 height);
|
||||
/* |description|Renders an interpolated DJUI HUD rect onto the screen|descriptionEnd| */
|
||||
void djui_hud_render_rect_interpolated(f32 prevX, f32 prevY, f32 prevWidth, f32 prevHeight, f32 x, f32 y, f32 width, f32 height);
|
||||
/* |description|Renders an DJUI HUD line onto the screen|descriptionEnd| */
|
||||
void djui_hud_render_line(f32 p1X, f32 p1Y, f32 p2X, f32 p2Y, f32 size);
|
||||
|
||||
/* |description|Gets the current camera FOV|descriptionEnd| */
|
||||
f32 get_current_fov();
|
||||
|
|
|
|||
|
|
@ -12790,6 +12790,82 @@ int smlua_func_djui_hud_get_mouse_scroll_y(UNUSED lua_State* L) {
|
|||
return 1;
|
||||
}
|
||||
|
||||
int smlua_func_djui_hud_set_viewport(lua_State* L) {
|
||||
if (L == NULL) { return 0; }
|
||||
|
||||
int top = lua_gettop(L);
|
||||
if (top != 4) {
|
||||
LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "djui_hud_set_viewport", 4, top);
|
||||
return 0;
|
||||
}
|
||||
|
||||
f32 x = smlua_to_number(L, 1);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "djui_hud_set_viewport"); return 0; }
|
||||
f32 y = smlua_to_number(L, 2);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 2, "djui_hud_set_viewport"); return 0; }
|
||||
f32 width = smlua_to_number(L, 3);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 3, "djui_hud_set_viewport"); return 0; }
|
||||
f32 height = smlua_to_number(L, 4);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 4, "djui_hud_set_viewport"); return 0; }
|
||||
|
||||
djui_hud_set_viewport(x, y, width, height);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int smlua_func_djui_hud_reset_viewport(UNUSED lua_State* L) {
|
||||
if (L == NULL) { return 0; }
|
||||
|
||||
int top = lua_gettop(L);
|
||||
if (top != 0) {
|
||||
LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "djui_hud_reset_viewport", 0, top);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
djui_hud_reset_viewport();
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int smlua_func_djui_hud_set_scissor(lua_State* L) {
|
||||
if (L == NULL) { return 0; }
|
||||
|
||||
int top = lua_gettop(L);
|
||||
if (top != 4) {
|
||||
LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "djui_hud_set_scissor", 4, top);
|
||||
return 0;
|
||||
}
|
||||
|
||||
f32 x = smlua_to_number(L, 1);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "djui_hud_set_scissor"); return 0; }
|
||||
f32 y = smlua_to_number(L, 2);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 2, "djui_hud_set_scissor"); return 0; }
|
||||
f32 width = smlua_to_number(L, 3);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 3, "djui_hud_set_scissor"); return 0; }
|
||||
f32 height = smlua_to_number(L, 4);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 4, "djui_hud_set_scissor"); return 0; }
|
||||
|
||||
djui_hud_set_scissor(x, y, width, height);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int smlua_func_djui_hud_reset_scissor(UNUSED lua_State* L) {
|
||||
if (L == NULL) { return 0; }
|
||||
|
||||
int top = lua_gettop(L);
|
||||
if (top != 0) {
|
||||
LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "djui_hud_reset_scissor", 0, top);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
djui_hud_reset_scissor();
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int smlua_func_djui_hud_measure_text(lua_State* L) {
|
||||
if (L == NULL) { return 0; }
|
||||
|
||||
|
|
@ -13045,6 +13121,31 @@ int smlua_func_djui_hud_render_rect_interpolated(lua_State* L) {
|
|||
return 1;
|
||||
}
|
||||
|
||||
int smlua_func_djui_hud_render_line(lua_State* L) {
|
||||
if (L == NULL) { return 0; }
|
||||
|
||||
int top = lua_gettop(L);
|
||||
if (top != 5) {
|
||||
LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "djui_hud_render_line", 5, top);
|
||||
return 0;
|
||||
}
|
||||
|
||||
f32 p1X = smlua_to_number(L, 1);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "djui_hud_render_line"); return 0; }
|
||||
f32 p1Y = smlua_to_number(L, 2);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 2, "djui_hud_render_line"); return 0; }
|
||||
f32 p2X = smlua_to_number(L, 3);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 3, "djui_hud_render_line"); return 0; }
|
||||
f32 p2Y = smlua_to_number(L, 4);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 4, "djui_hud_render_line"); return 0; }
|
||||
f32 size = smlua_to_number(L, 5);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 5, "djui_hud_render_line"); return 0; }
|
||||
|
||||
djui_hud_render_line(p1X, p1Y, p2X, p2Y, size);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int smlua_func_get_current_fov(UNUSED lua_State* L) {
|
||||
if (L == NULL) { return 0; }
|
||||
|
||||
|
|
@ -37175,6 +37276,10 @@ void smlua_bind_functions_autogen(void) {
|
|||
smlua_bind_function(L, "djui_hud_get_mouse_buttons_released", smlua_func_djui_hud_get_mouse_buttons_released);
|
||||
smlua_bind_function(L, "djui_hud_get_mouse_scroll_x", smlua_func_djui_hud_get_mouse_scroll_x);
|
||||
smlua_bind_function(L, "djui_hud_get_mouse_scroll_y", smlua_func_djui_hud_get_mouse_scroll_y);
|
||||
smlua_bind_function(L, "djui_hud_set_viewport", smlua_func_djui_hud_set_viewport);
|
||||
smlua_bind_function(L, "djui_hud_reset_viewport", smlua_func_djui_hud_reset_viewport);
|
||||
smlua_bind_function(L, "djui_hud_set_scissor", smlua_func_djui_hud_set_scissor);
|
||||
smlua_bind_function(L, "djui_hud_reset_scissor", smlua_func_djui_hud_reset_scissor);
|
||||
smlua_bind_function(L, "djui_hud_measure_text", smlua_func_djui_hud_measure_text);
|
||||
smlua_bind_function(L, "djui_hud_print_text", smlua_func_djui_hud_print_text);
|
||||
smlua_bind_function(L, "djui_hud_print_text_interpolated", smlua_func_djui_hud_print_text_interpolated);
|
||||
|
|
@ -37184,6 +37289,7 @@ void smlua_bind_functions_autogen(void) {
|
|||
smlua_bind_function(L, "djui_hud_render_texture_tile_interpolated", smlua_func_djui_hud_render_texture_tile_interpolated);
|
||||
smlua_bind_function(L, "djui_hud_render_rect", smlua_func_djui_hud_render_rect);
|
||||
smlua_bind_function(L, "djui_hud_render_rect_interpolated", smlua_func_djui_hud_render_rect_interpolated);
|
||||
smlua_bind_function(L, "djui_hud_render_line", smlua_func_djui_hud_render_line);
|
||||
smlua_bind_function(L, "get_current_fov", smlua_func_get_current_fov);
|
||||
smlua_bind_function(L, "djui_hud_get_fov_coeff", smlua_func_djui_hud_get_fov_coeff);
|
||||
smlua_bind_function(L, "djui_hud_world_pos_to_screen_pos", smlua_func_djui_hud_world_pos_to_screen_pos);
|
||||
|
|
|
|||
|
|
@ -84,6 +84,8 @@ void nametags_render(void) {
|
|||
vec3f_copy(pos, m->marioBodyState->headPos);
|
||||
pos[1] += 100;
|
||||
|
||||
extern bool gDjuiHudToWorldCalcViewport;
|
||||
gDjuiHudToWorldCalcViewport = false;
|
||||
if ((i != 0 || (i == 0 && m->action != ACT_FIRST_PERSON)) &&
|
||||
djui_hud_world_pos_to_screen_pos(pos, out)) {
|
||||
|
||||
|
|
@ -114,11 +116,15 @@ void nametags_render(void) {
|
|||
e->inited = true;
|
||||
}
|
||||
|
||||
// Scissor to clip during credits
|
||||
extern Vp *D_8032CE74;
|
||||
extern Vp *D_8032CE78;
|
||||
Vp *viewport = D_8032CE74 == NULL ? D_8032CE78 : D_8032CE74;
|
||||
if (viewport) { make_viewport_clip_rect(viewport); }
|
||||
// Apply viewport for credits
|
||||
extern Vp *gViewportOverride;
|
||||
extern Vp *gViewportClip;
|
||||
extern Vp gViewportFullscreen;
|
||||
Vp *viewport = gViewportOverride == NULL ? gViewportClip : gViewportOverride;
|
||||
if (viewport) {
|
||||
make_viewport_clip_rect(viewport);
|
||||
gSPViewport(gDisplayListHead++, viewport);
|
||||
}
|
||||
|
||||
djui_hud_print_outlined_text_interpolated(name,
|
||||
e->prevPos[0] - measure, e->prevPos[1], e->prevScale,
|
||||
|
|
@ -135,12 +141,16 @@ void nametags_render(void) {
|
|||
);
|
||||
}
|
||||
|
||||
// Reset scissor
|
||||
if (viewport) { gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, BORDER_HEIGHT, SCREEN_WIDTH, SCREEN_HEIGHT - BORDER_HEIGHT); }
|
||||
// Reset viewport
|
||||
if (viewport) {
|
||||
gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, BORDER_HEIGHT, SCREEN_WIDTH, SCREEN_HEIGHT - BORDER_HEIGHT);
|
||||
gSPViewport(gDisplayListHead++, &gViewportFullscreen);
|
||||
}
|
||||
|
||||
vec3f_copy(e->prevPos, out);
|
||||
e->prevScale = scale;
|
||||
}
|
||||
gDjuiHudToWorldCalcViewport = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@
|
|||
#include <SDL2/SDL.h>
|
||||
#endif
|
||||
|
||||
extern Vp D_8032CF00;
|
||||
extern Vp gViewportFullscreen;
|
||||
|
||||
OSMesg D_80339BEC;
|
||||
OSMesgQueue gSIEventMesgQueue;
|
||||
|
|
@ -363,7 +363,7 @@ void produce_one_dummy_frame(void (*callback)(), u8 clearColorR, u8 clearColorG,
|
|||
djui_gfx_displaylist_begin();
|
||||
|
||||
// fix scaling issues
|
||||
gSPViewport(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&D_8032CF00));
|
||||
gSPViewport(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gViewportFullscreen));
|
||||
gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, BORDER_HEIGHT, SCREEN_WIDTH, SCREEN_HEIGHT - BORDER_HEIGHT);
|
||||
|
||||
// clear screen
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue