From cd3002e17e5c551061b196c13a5ceee73c477fa7 Mon Sep 17 00:00:00 2001 From: ricardo Date: Mon, 15 Apr 2024 22:04:13 -0600 Subject: [PATCH] Added an option to modify the crosshair scale on gui options --- src/Gui.c | 6 ++++++ src/Gui.h | 3 ++- src/Menus.c | 10 ++++++++-- src/Options.h | 1 + src/Screens.c | 2 +- 5 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/Gui.c b/src/Gui.c index f712cee74..02385726d 100644 --- a/src/Gui.c +++ b/src/Gui.c @@ -62,6 +62,11 @@ float Gui_GetChatScale(void) { return Gui.RawChatScale; } +float Gui_GetCrosshairScale(void) { + return Gui_Scale((Window_Main.Height / 480.0f)) * Gui.RawCrosshairScale; +} + + void Gui_MakeTitleFont(struct FontDesc* font) { Font_Make(font, 16, FONT_FLAGS_BOLD); } void Gui_MakeBodyFont(struct FontDesc* font) { Font_Make(font, 16, FONT_FLAGS_NONE); } @@ -119,6 +124,7 @@ static void LoadOptions(void) { Gui.RawInventoryScale = Options_GetFloat(OPT_INVENTORY_SCALE, 0.25f, 5.0f, 1.0f); Gui.RawHotbarScale = Options_GetFloat(OPT_HOTBAR_SCALE, 0.25f, 5.0f, 1.0f); Gui.RawChatScale = Options_GetFloat(OPT_CHAT_SCALE, 0.25f, 5.0f, 1.0f); + Gui.RawCrosshairScale = Options_GetFloat(OPT_CROSSHAIR_SCALE, 0.25f, 5.0f, 1.0f); Gui.RawTouchScale = Options_GetFloat(OPT_TOUCH_SCALE, 0.25f, 5.0f, 1.0f); Gui.AutoScaleChat = Options_GetBool(OPT_CHAT_AUTO_SCALE, true); diff --git a/src/Gui.h b/src/Gui.h index dd704a4b5..360a165bf 100644 --- a/src/Gui.h +++ b/src/Gui.h @@ -42,7 +42,7 @@ CC_VAR extern struct _GuiData { cc_bool ShowFPS; /* Whether classic-style inventory is used */ cc_bool ClassicInventory; - float RawHotbarScale, RawChatScale, RawInventoryScale; + float RawHotbarScale, RawChatScale, RawInventoryScale, RawCrosshairScale; GfxResourceID GuiTex, GuiClassicTex, IconsTex, TouchTex; int DefaultLines; /* (internal) Bitmask of on-screen buttons, see Input.h */ @@ -60,6 +60,7 @@ float Gui_Scale(float value); float Gui_GetHotbarScale(void); float Gui_GetInventoryScale(void); float Gui_GetChatScale(void); +float Gui_GetCrosshairScale(void); CC_NOINLINE void Gui_MakeTitleFont(struct FontDesc* font); CC_NOINLINE void Gui_MakeBodyFont(struct FontDesc* font); diff --git a/src/Menus.c b/src/Menus.c index 138c93f6f..97c703b34 100644 --- a/src/Menus.c +++ b/src/Menus.c @@ -3065,6 +3065,9 @@ static void GuiOptionsScreen_SetHotbar(const cc_string* v) { ChatOptionsScreen_S static void GuiOptionsScreen_GetInventory(cc_string* v) { String_AppendFloat(v, Gui.RawInventoryScale, 1); } static void GuiOptionsScreen_SetInventory(const cc_string* v) { ChatOptionsScreen_SetScale(v, &Gui.RawInventoryScale, OPT_INVENTORY_SCALE); } +static void GuiOptionsScreen_GetCrosshair(cc_string* v) { String_AppendFloat(v, Gui.RawCrosshairScale, 1); } +static void GuiOptionsScreen_SetCrosshair(const cc_string* v) { ChatOptionsScreen_SetScale(v, &Gui.RawCrosshairScale, OPT_CROSSHAIR_SCALE); } + static void GuiOptionsScreen_GetTabAuto(cc_string* v) { Menu_GetBool(v, Gui.TabAutocomplete); } static void GuiOptionsScreen_SetTabAuto(const cc_string* v) { Gui.TabAutocomplete = Menu_SetBool(v, OPT_TAB_AUTOCOMPLETE); } @@ -3084,6 +3087,8 @@ static void GuiOptionsScreen_InitWidgets(struct MenuOptionsScreen* s) { GuiOptionsScreen_GetHotbar, GuiOptionsScreen_SetHotbar }, { -1, 50, "Inventory scale", MenuOptionsScreen_Input, GuiOptionsScreen_GetInventory, GuiOptionsScreen_SetInventory }, + { -1, 100, "Crosshair scale", MenuOptionsScreen_Input, + GuiOptionsScreen_GetCrosshair, GuiOptionsScreen_SetCrosshair }, { 1, -50, "Tab auto-complete", MenuOptionsScreen_Bool, GuiOptionsScreen_GetTabAuto, GuiOptionsScreen_SetTabAuto }, @@ -3093,14 +3098,15 @@ static void GuiOptionsScreen_InitWidgets(struct MenuOptionsScreen* s) { NULL, NULL } }; - s->numCore = 7; - s->maxVertices += 7 * BUTTONWIDGET_MAX; + s->numCore = 8; + s->maxVertices += 8 * BUTTONWIDGET_MAX; MenuOptionsScreen_InitButtons(s, buttons, Array_Elems(buttons), Menu_SwitchOptions); } void GuiOptionsScreen_Show(void) { MenuInput_Float(menuOpts_descs[2], 0.25f, 4.00f, 1); MenuInput_Float(menuOpts_descs[3], 0.25f, 4.00f, 1); + MenuInput_Float(menuOpts_descs[4], 0.25f, 4.00f, 1); MenuOptionsScreen_Show(GuiOptionsScreen_InitWidgets); } diff --git a/src/Options.h b/src/Options.h index 62672a86f..4620f6423 100644 --- a/src/Options.h +++ b/src/Options.h @@ -49,6 +49,7 @@ Copyright 2014-2023 ClassiCube | Licensed under BSD-3 #define OPT_INVENTORY_SCALE "gui-inventoryscale" #define OPT_CHAT_SCALE "gui-chatscale" #define OPT_CHAT_AUTO_SCALE "gui-autoscalechat" +#define OPT_CROSSHAIR_SCALE "gui-crosshairscale" #define OPT_SHOW_FPS "gui-showfps" #define OPT_FONT_NAME "gui-fontname" #define OPT_BLACK_TEXT "gui-blacktextshadows" diff --git a/src/Screens.c b/src/Screens.c index 779fa8740..f2a8ad748 100644 --- a/src/Screens.c +++ b/src/Screens.c @@ -351,7 +351,7 @@ static void HUDScreen_BuildCrosshairsMesh(struct VertexTextured** ptr) { static struct Texture tex = { 0, Tex_Rect(0,0,0,0), Tex_UV(0.0f,0.0f, 15/256.0f,15/64.0f) }; int extent; - extent = (int)(CH_EXTENT * Gui_Scale(Window_Main.Height / 480.0f)); + extent = (int)(CH_EXTENT * Gui_GetCrosshairScale()); tex.x = (Window_Main.Width / 2) - extent; tex.y = (Window_Main.Height / 2) - extent;