Initial WIP on DPI scaling for in-game

This commit is contained in:
UnknownShadow200 2019-09-03 19:52:42 +10:00
parent 57d9b5f238
commit c5b1b019d7
8 changed files with 26 additions and 20 deletions

View File

@ -44,7 +44,7 @@ static void PerspectiveCamera_GetPickedBlock(struct PickedPos* pos) {
struct Entity* p = &LocalPlayer_Instance.Base; struct Entity* p = &LocalPlayer_Instance.Base;
Vec3 dir = Vec3_GetDirVector(p->HeadY * MATH_DEG2RAD, p->HeadX * MATH_DEG2RAD); Vec3 dir = Vec3_GetDirVector(p->HeadY * MATH_DEG2RAD, p->HeadX * MATH_DEG2RAD);
Vec3 eyePos = Entity_GetEyePosition(p); Vec3 eyePos = Entity_GetEyePosition(p);
float reach = LocalPlayer_Instance.ReachDistance; float reach = LocalPlayer_Instance.ReachDistance;
Picking_CalculatePickedBlock(eyePos, dir, reach, pos); Picking_CalculatePickedBlock(eyePos, dir, reach, pos);
} }

View File

@ -550,7 +550,7 @@ void Entities_RenderNames(double delta) {
int i; int i;
if (Entities.NamesMode == NAME_MODE_NONE) return; if (Entities.NamesMode == NAME_MODE_NONE) return;
entities_closestId = Entities_GetCloset(&p->Base); entities_closestId = Entities_GetClosest(&p->Base);
if (!p->Hacks.CanSeeAllNames || Entities.NamesMode != NAME_MODE_ALL) return; if (!p->Hacks.CanSeeAllNames || Entities.NamesMode != NAME_MODE_ALL) return;
Gfx_SetTexturing(true); Gfx_SetTexturing(true);
@ -634,7 +634,7 @@ void Entities_Remove(EntityID id) {
Entities.List[id] = NULL; Entities.List[id] = NULL;
} }
EntityID Entities_GetCloset(struct Entity* src) { EntityID Entities_GetClosest(struct Entity* src) {
Vec3 eyePos = Entity_GetEyePosition(src); Vec3 eyePos = Entity_GetEyePosition(src);
Vec3 dir = Vec3_GetDirVector(src->HeadY * MATH_DEG2RAD, src->HeadX * MATH_DEG2RAD); Vec3 dir = Vec3_GetDirVector(src->HeadY * MATH_DEG2RAD, src->HeadX * MATH_DEG2RAD);
float closestDist = MATH_POS_INF; float closestDist = MATH_POS_INF;

View File

@ -144,7 +144,7 @@ void Entities_RenderHoveredNames(double delta);
/* Removes the given entity, raising EntityEvents.Removed event. */ /* Removes the given entity, raising EntityEvents.Removed event. */
void Entities_Remove(EntityID id); void Entities_Remove(EntityID id);
/* Gets the ID of the closest entity to the given entity. */ /* Gets the ID of the closest entity to the given entity. */
EntityID Entities_GetCloset(struct Entity* src); EntityID Entities_GetClosest(struct Entity* src);
/* Draws shadows under entities, depending on Entities.ShadowsMode */ /* Draws shadows under entities, depending on Entities.ShadowsMode */
void Entities_DrawShadows(void); void Entities_DrawShadows(void);

View File

@ -26,7 +26,8 @@ static cc_uint8 priorities[GUI_MAX_SCREENS];
void Widget_SetLocation(void* widget, cc_uint8 horAnchor, cc_uint8 verAnchor, int xOffset, int yOffset) { void Widget_SetLocation(void* widget, cc_uint8 horAnchor, cc_uint8 verAnchor, int xOffset, int yOffset) {
struct Widget* w = (struct Widget*)widget; struct Widget* w = (struct Widget*)widget;
w->horAnchor = horAnchor; w->verAnchor = verAnchor; w->horAnchor = horAnchor; w->verAnchor = verAnchor;
w->xOffset = xOffset; w->yOffset = yOffset; w->xOffset = Display_ScaleX(xOffset);
w->yOffset = Display_ScaleY(yOffset);
Widget_Reposition(w); Widget_Reposition(w);
} }

View File

@ -466,7 +466,7 @@ static void MouseStateUpdate(int button, bool pressed) {
/* defer getting the targeted entity, as it's a costly operation */ /* defer getting the targeted entity, as it's a costly operation */
if (input_pickingId == -1) { if (input_pickingId == -1) {
p = &LocalPlayer_Instance.Base; p = &LocalPlayer_Instance.Base;
input_pickingId = Entities_GetCloset(p); input_pickingId = Entities_GetClosest(p);
} }
input_buttonsDown[button] = pressed; input_buttonsDown[button] = pressed;

View File

@ -1855,6 +1855,7 @@ static void MenuOptionsScreen_FreeInput(struct MenuOptionsScreen* s) {
Elem_TryFree(s->widgets[i]); Elem_TryFree(s->widgets[i]);
s->widgets[i] = NULL; s->widgets[i] = NULL;
} }
Window_CloseKeyboard();
} }
static void MenuOptionsScreen_RedrawInput(struct MenuOptionsScreen* s) { static void MenuOptionsScreen_RedrawInput(struct MenuOptionsScreen* s) {
@ -2001,7 +2002,9 @@ static void MenuOptionsScreen_Input(void* screen, void* widget) {
ANCHOR_CENTRE, ANCHOR_CENTRE, 240, 110); ANCHOR_CENTRE, ANCHOR_CENTRE, 240, 110);
Menu_Button(s, i - 3, &s->Default, 200, MenuOptionsScreen_Default, Menu_Button(s, i - 3, &s->Default, 200, MenuOptionsScreen_Default,
ANCHOR_CENTRE, ANCHOR_CENTRE, 0, 150); ANCHOR_CENTRE, ANCHOR_CENTRE, 0, 150);
MenuOptionsScreen_RedrawInput(s); MenuOptionsScreen_RedrawInput(s);
Window_OpenKeyboard();
} }
static void MenuOptionsScreen_OnHacksChanged(void* screen) { static void MenuOptionsScreen_OnHacksChanged(void* screen) {
@ -2043,7 +2046,9 @@ static void MenuOptionsScreen_Render(void* screen, double delta) {
} }
static void MenuOptionsScreen_Free(void* screen) { static void MenuOptionsScreen_Free(void* screen) {
struct MenuOptionsScreen* s = (struct MenuOptionsScreen*)screen;
Event_UnregisterVoid(&UserEvents.HackPermissionsChanged, screen, MenuOptionsScreen_OnHacksChanged); Event_UnregisterVoid(&UserEvents.HackPermissionsChanged, screen, MenuOptionsScreen_OnHacksChanged);
if (s->activeI >= 0) Window_CloseKeyboard();
} }
static void MenuOptionsScreen_OnResize(void* screen) { static void MenuOptionsScreen_OnResize(void* screen) {

View File

@ -347,9 +347,8 @@ static void StatusScreen_ContextLost(void* screen) {
} }
static void StatusScreen_ContextRecreated(void* screen) { static void StatusScreen_ContextRecreated(void* screen) {
static const String chars = String_FromConst("0123456789-, ()"); static const String chars = String_FromConst("0123456789-, ()");
static const String prefix = String_FromConst("Position: "); static const String prefix = String_FromConst("Position: ");
static const String version = String_FromConst("0.30");
struct StatusScreen* s = (struct StatusScreen*)screen; struct StatusScreen* s = (struct StatusScreen*)screen;
struct TextWidget* line1 = &s->line1; struct TextWidget* line1 = &s->line1;
@ -374,7 +373,7 @@ static void StatusScreen_ContextRecreated(void* screen) {
/* Swap around so 0.30 version is at top */ /* Swap around so 0.30 version is at top */
line2->yOffset = 2; line2->yOffset = 2;
line1->yOffset = s->posAtlas.tex.Y; line1->yOffset = s->posAtlas.tex.Y;
TextWidget_Set(line2, &version, &s->font); TextWidget_SetConst(line2, "0.30", &s->font);
Widget_Reposition(line1); Widget_Reposition(line1);
Widget_Reposition(line2); Widget_Reposition(line2);

View File

@ -88,11 +88,11 @@ void TextWidget_SetConst(struct TextWidget* w, const char* text, struct FontDesc
*------------------------------------------------------ButtonWidget-------------------------------------------------------* *------------------------------------------------------ButtonWidget-------------------------------------------------------*
*#########################################################################################################################*/ *#########################################################################################################################*/
#define BUTTON_uWIDTH (200.0f / 256.0f) #define BUTTON_uWIDTH (200.0f / 256.0f)
#define BUTTON_MIN_WIDTH 40
static struct Texture Button_ShadowTex = { GFX_NULL, Tex_Rect(0,0, 0,0), Widget_UV(0,66, 200,86) }; static struct Texture btnShadowTex = { GFX_NULL, Tex_Rect(0,0, 0,0), Widget_UV(0,66, 200,86) };
static struct Texture Button_SelectedTex = { GFX_NULL, Tex_Rect(0,0, 0,0), Widget_UV(0,86, 200,106) }; static struct Texture btnSelectedTex = { GFX_NULL, Tex_Rect(0,0, 0,0), Widget_UV(0,86, 200,106) };
static struct Texture Button_DisabledTex = { GFX_NULL, Tex_Rect(0,0, 0,0), Widget_UV(0,46, 200,66) }; static struct Texture btnDisabledTex = { GFX_NULL, Tex_Rect(0,0, 0,0), Widget_UV(0,46, 200,66) };
static int btnMinHeight;
static void ButtonWidget_Free(void* widget) { static void ButtonWidget_Free(void* widget) {
struct ButtonWidget* w = (struct ButtonWidget*)widget; struct ButtonWidget* w = (struct ButtonWidget*)widget;
@ -117,8 +117,8 @@ static void ButtonWidget_Render(void* widget, double delta) {
struct Texture back; struct Texture back;
float scale; float scale;
back = w->active ? Button_SelectedTex : Button_ShadowTex; back = w->active ? btnSelectedTex : btnShadowTex;
if (w->disabled) back = Button_DisabledTex; if (w->disabled) back = btnDisabledTex;
back.ID = Gui_ClassicTexture ? Gui_GuiClassicTex : Gui_GuiTex; back.ID = Gui_ClassicTexture ? Gui_GuiClassicTex : Gui_GuiTex;
back.X = w->x; back.Width = w->width; back.X = w->x; back.Width = w->width;
@ -156,7 +156,8 @@ void ButtonWidget_Make(struct ButtonWidget* w, int minWidth, Widget_LeftClick on
Widget_Reset(w); Widget_Reset(w);
w->VTABLE = &ButtonWidget_VTABLE; w->VTABLE = &ButtonWidget_VTABLE;
w->optName = NULL; w->optName = NULL;
w->minWidth = minWidth; w->minWidth = Display_ScaleX(minWidth);
btnMinHeight = Display_ScaleY(40);
w->MenuClick = onClick; w->MenuClick = onClick;
Widget_SetLocation(w, horAnchor, verAnchor, xOffset, yOffset); Widget_SetLocation(w, horAnchor, verAnchor, xOffset, yOffset);
} }
@ -174,7 +175,7 @@ void ButtonWidget_Set(struct ButtonWidget* w, const String* text, struct FontDes
} }
w->width = max(w->tex.Width, w->minWidth); w->width = max(w->tex.Width, w->minWidth);
w->height = max(w->tex.Height, BUTTON_MIN_WIDTH); w->height = max(w->tex.Height, btnMinHeight);
Widget_Reposition(w); Widget_Reposition(w);
} }
@ -1441,8 +1442,8 @@ void MenuInputWidget_Create(struct MenuInputWidget* w, int width, int height, co
w->base.VTABLE = &MenuInputWidget_VTABLE; w->base.VTABLE = &MenuInputWidget_VTABLE;
w->base.caretPos = -1; w->base.caretPos = -1;
w->minWidth = width; w->minWidth = Display_ScaleX(width);
w->minHeight = height; w->minHeight = Display_ScaleY(height);
w->desc = *desc; w->desc = *desc;
w->base.convertPercents = false; w->base.convertPercents = false;