Mobile: Now touch controls scale partially works

This commit is contained in:
UnknownShadow200 2020-12-17 20:50:12 +11:00
parent edae243721
commit 14de95774d
4 changed files with 60 additions and 45 deletions

View File

@ -3934,7 +3934,6 @@ static void TouchCtrlsScreen_Init(void* screen) {
Menu_InitButtons(s->btns, 195, touchCtrls_btns, 4); Menu_InitButtons(s->btns, 195, touchCtrls_btns, 4);
Menu_InitButtons(s->btns + 4, 400, touchCtrls_btns + 4, 1); Menu_InitButtons(s->btns + 4, 400, touchCtrls_btns + 4, 1);
Menu_InitBack(&s->back, TouchCtrls_More); Menu_InitBack(&s->back, TouchCtrls_More);
s->btns[3].disabled = true;
} }
static const struct ScreenVTABLE TouchCtrlsScreen_VTABLE = { static const struct ScreenVTABLE TouchCtrlsScreen_VTABLE = {

View File

@ -229,6 +229,7 @@ static void HUDScreen_Layout(void* screen) {
line2->yOffset = posY + s->posAtlas.tex.Height; line2->yOffset = posY + s->posAtlas.tex.Height;
} }
s->hotbar.scale = Gui_GetHotbarScale();
Widget_Layout(&s->hotbar); Widget_Layout(&s->hotbar);
Widget_Layout(line2); Widget_Layout(line2);
} }
@ -1396,6 +1397,7 @@ static void InventoryScreen_Render(void* screen, double delta) {
static void InventoryScreen_Layout(void* screen) { static void InventoryScreen_Layout(void* screen) {
struct InventoryScreen* s = (struct InventoryScreen*)screen; struct InventoryScreen* s = (struct InventoryScreen*)screen;
s->table.scale = Gui_GetInventoryScale();
Widget_Layout(&s->table); Widget_Layout(&s->table);
} }
@ -1905,10 +1907,11 @@ void DisconnectScreen_Show(const cc_string* title, const cc_string* message) {
*--------------------------------------------------------TouchScreen------------------------------------------------------* *--------------------------------------------------------TouchScreen------------------------------------------------------*
*#########################################################################################################################*/ *#########################################################################################################################*/
#ifdef CC_BUILD_TOUCH #ifdef CC_BUILD_TOUCH
#define TOUCH_MAX_BTNS (ONSCREEN_MAX_BTNS + 3) #define TOUCH_EXTRA_BTNS 2
#define TOUCH_MAX_BTNS (ONSCREEN_MAX_BTNS + TOUCH_EXTRA_BTNS + 1)
struct TouchButtonDesc { struct TouchButtonDesc {
const char* text; const char* text;
cc_uint8 bind, x, y, size; cc_uint8 bind, x, y;
Widget_LeftClick OnClick; Widget_LeftClick OnClick;
cc_bool* enabled; cc_bool* enabled;
}; };
@ -1921,13 +1924,12 @@ static struct TouchScreen {
struct ThumbstickWidget thumbstick; struct ThumbstickWidget thumbstick;
const struct TouchButtonDesc* onscreenDescs[ONSCREEN_MAX_BTNS]; const struct TouchButtonDesc* onscreenDescs[ONSCREEN_MAX_BTNS];
struct ButtonWidget onscreen[ONSCREEN_MAX_BTNS]; struct ButtonWidget onscreen[ONSCREEN_MAX_BTNS];
struct ButtonWidget btns[3]; struct ButtonWidget btns[TOUCH_EXTRA_BTNS], more;
} TouchScreen; } TouchScreen;
static struct Widget* touch_widgets[1 + TOUCH_MAX_BTNS] = { static struct Widget* touch_widgets[ONSCREEN_MAX_BTNS + TOUCH_EXTRA_BTNS + 2] = {
NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL, NULL,
NULL, NULL,NULL, (struct Widget*)&TouchScreen.thumbstick, (struct Widget*)&TouchScreen.more
NULL,NULL,NULL, (struct Widget*)&TouchScreen.thumbstick
}; };
#define TOUCH_MAX_VERTICES (THUMBSTICKWIDGET_MAX + TOUCH_MAX_BTNS * BUTTONWIDGET_MAX) #define TOUCH_MAX_VERTICES (THUMBSTICKWIDGET_MAX + TOUCH_MAX_BTNS * BUTTONWIDGET_MAX)
@ -1961,31 +1963,30 @@ static void TouchScreen_BindClick(void* screen, void* widget) {
} }
static const struct TouchButtonDesc onscreenDescs[ONSCREEN_MAX_BTNS] = { static const struct TouchButtonDesc onscreenDescs[ONSCREEN_MAX_BTNS] = {
{ "Chat", 0,0,0,0, TouchScreen_ChatClick }, { "Chat", 0,0,0, TouchScreen_ChatClick },
{ "Tablist", 0,0,0,0, TouchScreen_TabClick }, { "Tablist", 0,0,0, TouchScreen_TabClick },
{ "Respawn", 0,0,0,0, TouchScreen_RespawnClick, &LocalPlayer_Instance.Hacks.CanRespawn }, { "Respawn", 0,0,0, TouchScreen_RespawnClick, &LocalPlayer_Instance.Hacks.CanRespawn },
{ "Set spawn", 0,0,0,0, TouchScreen_SetSpawnClick, &LocalPlayer_Instance.Hacks.CanRespawn }, { "Set spawn", 0,0,0, TouchScreen_SetSpawnClick, &LocalPlayer_Instance.Hacks.CanRespawn },
{ "Fly", 0,0,0,0, TouchScreen_FlyClick, &LocalPlayer_Instance.Hacks.CanFly }, { "Fly", 0,0,0, TouchScreen_FlyClick, &LocalPlayer_Instance.Hacks.CanFly },
{ "Noclip", 0,0,0,0, TouchScreen_NoclipClick, &LocalPlayer_Instance.Hacks.CanNoclip }, { "Noclip", 0,0,0, TouchScreen_NoclipClick, &LocalPlayer_Instance.Hacks.CanNoclip },
{ "Speed", KEYBIND_SPEED, 0,0,0, TouchScreen_OnscreenClick, &LocalPlayer_Instance.Hacks.CanSpeed }, { "Speed", KEYBIND_SPEED, 0,0, TouchScreen_OnscreenClick, &LocalPlayer_Instance.Hacks.CanSpeed },
{ "\xabSpeed", KEYBIND_HALF_SPEED, 0,0,0, TouchScreen_OnscreenClick, &LocalPlayer_Instance.Hacks.CanSpeed }, { "\xabSpeed", KEYBIND_HALF_SPEED, 0,0, TouchScreen_OnscreenClick, &LocalPlayer_Instance.Hacks.CanSpeed },
{ "Camera", 0,0,0,0, TouchScreen_CameraClick, &LocalPlayer_Instance.Hacks.CanUseThirdPerson } { "Camera", 0,0,0, TouchScreen_CameraClick, &LocalPlayer_Instance.Hacks.CanUseThirdPerson }
}; };
static const struct TouchButtonDesc normDescs[2] = { static const struct TouchButtonDesc normDescs[1] = {
{ "...", KEYBIND_COUNT, 0, 0, 40, TouchScreen_MoreClick }, { "\x1E", KEYBIND_JUMP, 50, 10, TouchScreen_BindClick }
{ "\x1E", KEYBIND_JUMP, 50, 10, 60, TouchScreen_BindClick }
}; };
static const struct TouchButtonDesc hackDescs[3] = { static const struct TouchButtonDesc hackDescs[2] = {
{ "...", KEYBIND_COUNT, 0, 0, 40, TouchScreen_MoreClick }, { "\x1E", KEYBIND_FLY_UP, 50, 70, TouchScreen_BindClick },
{ "\x1E", KEYBIND_FLY_UP, 50, 70, 60, TouchScreen_BindClick }, { "\x1F", KEYBIND_FLY_DOWN, 50, 10, TouchScreen_BindClick }
{ "\x1F", KEYBIND_FLY_DOWN, 50, 10, 60, TouchScreen_BindClick }
}; };
#define TOUCHSCREEN_BTN_COL PackedCol_Make(255, 255, 255, 220)
static void TouchScreen_InitButtons(struct TouchScreen* s) { static void TouchScreen_InitButtons(struct TouchScreen* s) {
struct HacksComp* hacks = &LocalPlayer_Instance.Hacks; struct HacksComp* hacks = &LocalPlayer_Instance.Hacks;
const struct TouchButtonDesc* desc; const struct TouchButtonDesc* desc;
int i, j; int i, j;
for (i = 0; i < TOUCH_MAX_BTNS; i++) s->widgets[i] = NULL; for (i = 0; i < ONSCREEN_MAX_BTNS + TOUCH_EXTRA_BTNS; i++) s->widgets[i] = NULL;
for (i = 0, j = 0; i < ONSCREEN_MAX_BTNS; i++) { for (i = 0, j = 0; i < ONSCREEN_MAX_BTNS; i++) {
if (!(Gui._onscreenButtons & (1 << i))) continue; if (!(Gui._onscreenButtons & (1 << i))) continue;
@ -2009,11 +2010,8 @@ static void TouchScreen_InitButtons(struct TouchScreen* s) {
for (i = 0; i < s->numBtns; i++) { for (i = 0; i < s->numBtns; i++) {
s->widgets[i + ONSCREEN_MAX_BTNS] = (struct Widget*)&s->btns[i]; s->widgets[i + ONSCREEN_MAX_BTNS] = (struct Widget*)&s->btns[i];
desc = &s->descs[i]; ButtonWidget_Init(&s->btns[i], 60, s->descs[i].OnClick);
ButtonWidget_Init(&s->btns[i], desc->size, desc->OnClick); s->btns[i].col = TOUCHSCREEN_BTN_COL;
s->btns[i].minHeight = Display_ScaleY(desc->size);
s->btns[i].col = PackedCol_Make(255, 255, 255, 220);
} }
} }
@ -2048,6 +2046,7 @@ static void TouchScreen_ContextRecreated(void* screen) {
desc = &s->descs[i]; desc = &s->descs[i];
ButtonWidget_SetConst(&s->btns[i], desc->text, &s->font); ButtonWidget_SetConst(&s->btns[i], desc->text, &s->font);
} }
ButtonWidget_SetConst(&s->more, "...", &s->font);
} }
static void TouchScreen_Render(void* screen, double delta) { static void TouchScreen_Render(void* screen, double delta) {
@ -2074,6 +2073,7 @@ static int TouchScreen_PointerUp(void* screen, int id, int x, int y) {
int i; int i;
//Chat_Add1("POINTER UP: %i", &id); //Chat_Add1("POINTER UP: %i", &id);
s->thumbstick.active &= ~id; s->thumbstick.active &= ~id;
s->more.active &= ~id;
for (i = 0; i < s->numBtns; i++) { for (i = 0; i < s->numBtns; i++) {
if (!(s->btns[i].active & id)) continue; if (!(s->btns[i].active & id)) continue;
@ -2090,26 +2090,32 @@ static int TouchScreen_PointerUp(void* screen, int id, int x, int y) {
static void TouchScreen_Layout(void* screen) { static void TouchScreen_Layout(void* screen) {
struct TouchScreen* s = (struct TouchScreen*)screen; struct TouchScreen* s = (struct TouchScreen*)screen;
const struct TouchButtonDesc* desc; const struct TouchButtonDesc* desc;
float scale = Gui.RawTouchScale;
int i, height; int i, height;
for (i = 0; i < s->numOnscreen; i++) { for (i = 0; i < s->numOnscreen; i++) {
Widget_SetLocation(&s->onscreen[i], ANCHOR_MAX, ANCHOR_MIN, 10, 10 + i * 40); Widget_SetLocation(&s->onscreen[i], ANCHOR_MAX, ANCHOR_MIN, 10, 10 + i * 40);
} }
Widget_SetLocation(&s->btns[0], ANCHOR_CENTRE, ANCHOR_MIN, 0, 10); Widget_SetLocation(&s->more, ANCHOR_CENTRE, ANCHOR_MIN, 0, 10);
/* Need to align these relative to the hotbar */ /* Need to align these relative to the hotbar */
HUDScreen_Layout(Gui_HUD); HUDScreen_Layout(Gui_HUD);
height = Gui_HUD->hotbar.height; height = Gui_HUD->hotbar.height;
for (i = 1; i < s->numBtns; i++) { for (i = 0; i < s->numBtns; i++) {
desc = &s->descs[i]; desc = &s->descs[i];
Widget_SetLocation(&s->btns[i], ANCHOR_MAX, ANCHOR_MAX, desc->x, desc->y); Widget_SetLocation(&s->btns[i], ANCHOR_MAX, ANCHOR_MAX, desc->x, desc->y);
s->btns[i].yOffset += height; s->btns[i].yOffset += height;
/* TODO: Maybe move scaling to be part of button instead */
s->btns[i].minWidth = Display_ScaleX(60 * scale);
s->btns[i].minHeight = Display_ScaleY(60 * scale);
Widget_Layout(&s->btns[i]); Widget_Layout(&s->btns[i]);
} }
Widget_SetLocation(&s->thumbstick, ANCHOR_MIN, ANCHOR_MAX, 30, 5); Widget_SetLocation(&s->thumbstick, ANCHOR_MIN, ANCHOR_MAX, 30, 5);
s->thumbstick.yOffset += height; s->thumbstick.yOffset += height;
s->thumbstick.scale = scale;
Widget_Layout(&s->thumbstick); Widget_Layout(&s->thumbstick);
} }
@ -2128,6 +2134,9 @@ static void TouchScreen_Init(void* screen) {
Event_Register_(&UserEvents.HackPermsChanged, screen, TouchScreen_HacksChanged); Event_Register_(&UserEvents.HackPermsChanged, screen, TouchScreen_HacksChanged);
TouchScreen_InitButtons(s); TouchScreen_InitButtons(s);
ButtonWidget_Init(&s->more, 40, TouchScreen_MoreClick);
s->more.col = TOUCHSCREEN_BTN_COL;
ThumbstickWidget_Init(&s->thumbstick); ThumbstickWidget_Init(&s->thumbstick);
touchInput.GetMovement = TouchScreen_GetMovement; touchInput.GetMovement = TouchScreen_GetMovement;
LocalPlayer_Instance.input.next = &touchInput; LocalPlayer_Instance.input.next = &touchInput;

View File

@ -108,8 +108,10 @@ static void ButtonWidget_Free(void* widget) {
static void ButtonWidget_Reposition(void* widget) { static void ButtonWidget_Reposition(void* widget) {
struct ButtonWidget* w = (struct ButtonWidget*)widget; struct ButtonWidget* w = (struct ButtonWidget*)widget;
Widget_CalcPosition(w); w->width = max(w->tex.Width, w->minWidth);
w->height = max(w->tex.Height, w->minHeight);
Widget_CalcPosition(w);
w->tex.X = w->x + (w->width / 2 - w->tex.Width / 2); w->tex.X = w->x + (w->width / 2 - w->tex.Width / 2);
w->tex.Y = w->y + (w->height / 2 - w->tex.Height / 2); w->tex.Y = w->y + (w->height / 2 - w->tex.Height / 2);
} }
@ -236,9 +238,6 @@ void ButtonWidget_Set(struct ButtonWidget* w, const cc_string* text, struct Font
DrawTextArgs_Make(&args, text, font, true); DrawTextArgs_Make(&args, text, font, true);
Drawer2D_MakeTextTexture(&w->tex, &args); Drawer2D_MakeTextTexture(&w->tex, &args);
} }
w->width = max(w->tex.Width, w->minWidth);
w->height = max(w->tex.Height, w->minHeight);
Widget_Layout(w); Widget_Layout(w);
} }
@ -440,9 +439,8 @@ static int HotbarWidget_ScrolledIndex(struct HotbarWidget* w, float delta, int i
static void HotbarWidget_Reposition(void* widget) { static void HotbarWidget_Reposition(void* widget) {
struct HotbarWidget* w = (struct HotbarWidget*)widget; struct HotbarWidget* w = (struct HotbarWidget*)widget;
float scale = Gui_GetHotbarScale(); float scaleX = w->scale * DisplayInfo.ScaleX;
float scaleX = scale * DisplayInfo.ScaleX; float scaleY = w->scale * DisplayInfo.ScaleY;
float scaleY = scale * DisplayInfo.ScaleY;
int y; int y;
w->width = (int)(182 * scaleX); w->width = (int)(182 * scaleX);
@ -571,6 +569,7 @@ void HotbarWidget_Create(struct HotbarWidget* w) {
w->VTABLE = &HotbarWidget_VTABLE; w->VTABLE = &HotbarWidget_VTABLE;
w->horAnchor = ANCHOR_CENTRE; w->horAnchor = ANCHOR_CENTRE;
w->verAnchor = ANCHOR_MAX; w->verAnchor = ANCHOR_MAX;
w->scale = 1;
} }
void HotbarWidget_SetFont(struct HotbarWidget* w, struct FontDesc* font) { void HotbarWidget_SetFont(struct HotbarWidget* w, struct FontDesc* font) {
@ -769,7 +768,7 @@ void TableWidget_Recreate(struct TableWidget* w) {
static void TableWidget_Reposition(void* widget) { static void TableWidget_Reposition(void* widget) {
struct TableWidget* w = (struct TableWidget*)widget; struct TableWidget* w = (struct TableWidget*)widget;
float scale = Gui_GetInventoryScale(); float scale = w->scale;
int cellSize; int cellSize;
cellSize = (int)(50 * Math_SqrtF(scale)); cellSize = (int)(50 * Math_SqrtF(scale));
@ -914,6 +913,7 @@ void TableWidget_Create(struct TableWidget* w) {
w->horAnchor = ANCHOR_CENTRE; w->horAnchor = ANCHOR_CENTRE;
w->verAnchor = ANCHOR_CENTRE; w->verAnchor = ANCHOR_CENTRE;
w->lastX = -20; w->lastY = -20; w->lastX = -20; w->lastY = -20;
w->scale = 1;
w->paddingX = Display_ScaleX(15); w->paddingX = Display_ScaleX(15);
w->paddingTopY = Display_ScaleY(15 + 20); w->paddingTopY = Display_ScaleY(15 + 20);
@ -2590,8 +2590,15 @@ static int ThumbstickWidget_Render2(void* widget, int offset) {
return offset + THUMBSTICKWIDGET_MAX; return offset + THUMBSTICKWIDGET_MAX;
} }
static void ThumbstickWidget_Reposition(void* widget) {
struct ThumbstickWidget* w = (struct ThumbstickWidget*)widget;
w->width = Display_ScaleX(128 * w->scale);
w->height = Display_ScaleY(128 * w->scale);
Widget_CalcPosition(w);
}
static const struct WidgetVTABLE ThumbstickWidget_VTABLE = { static const struct WidgetVTABLE ThumbstickWidget_VTABLE = {
NULL, Screen_NullFunc, Widget_CalcPosition, NULL, Screen_NullFunc, ThumbstickWidget_Reposition,
Widget_Key, Widget_Key, Widget_MouseScroll, Widget_Key, Widget_Key, Widget_MouseScroll,
Widget_Pointer, Widget_Pointer, Widget_PointerMove, Widget_Pointer, Widget_Pointer, Widget_PointerMove,
ThumbstickWidget_BuildMesh, ThumbstickWidget_Render2 ThumbstickWidget_BuildMesh, ThumbstickWidget_Render2
@ -2599,8 +2606,7 @@ static const struct WidgetVTABLE ThumbstickWidget_VTABLE = {
void ThumbstickWidget_Init(struct ThumbstickWidget* w) { void ThumbstickWidget_Init(struct ThumbstickWidget* w) {
Widget_Reset(w); Widget_Reset(w);
w->VTABLE = &ThumbstickWidget_VTABLE; w->VTABLE = &ThumbstickWidget_VTABLE;
w->width = Display_ScaleX(128); w->scale = 1;
w->height = Display_ScaleY(128);
} }
void ThumbstickWidget_GetMovement(struct ThumbstickWidget* w, float* xMoving, float* zMoving) { void ThumbstickWidget_GetMovement(struct ThumbstickWidget* w, float* xMoving, float* zMoving) {

View File

@ -68,7 +68,7 @@ struct HotbarWidget {
struct Texture selTex, backTex; struct Texture selTex, backTex;
float slotWidth, selWidth; float slotWidth, selWidth;
float slotXOffset, elemSize; float slotXOffset, elemSize;
float scrollAcc; float scrollAcc, scale;
cc_bool altHandled; cc_bool altHandled;
struct Texture ellipsisTex; struct Texture ellipsisTex;
}; };
@ -87,6 +87,7 @@ struct TableWidget {
float selBlockExpand; float selBlockExpand;
GfxResourceID vb; GfxResourceID vb;
cc_bool pendingClose; cc_bool pendingClose;
float scale;
BlockID blocks[BLOCK_COUNT]; BlockID blocks[BLOCK_COUNT];
struct ScrollbarWidget scroll; struct ScrollbarWidget scroll;
@ -284,7 +285,7 @@ CC_NOINLINE void SpecialInputWidget_UpdateCols(struct SpecialInputWidget* w);
CC_NOINLINE void SpecialInputWidget_SetActive(struct SpecialInputWidget* w, cc_bool active); CC_NOINLINE void SpecialInputWidget_SetActive(struct SpecialInputWidget* w, cc_bool active);
#ifdef CC_BUILD_TOUCH #ifdef CC_BUILD_TOUCH
struct ThumbstickWidget { Widget_Body }; struct ThumbstickWidget { Widget_Body; float scale; };
#define THUMBSTICKWIDGET_PER (4 * 4) #define THUMBSTICKWIDGET_PER (4 * 4)
#define THUMBSTICKWIDGET_MAX (THUMBSTICKWIDGET_PER * 2) #define THUMBSTICKWIDGET_MAX (THUMBSTICKWIDGET_PER * 2)