Control menus appear, redesign overlays to use new init/contextrecreated stuff

This commit is contained in:
UnknownShadow200 2019-08-18 19:15:55 +10:00
parent 3cca3ea61d
commit b95834a340
5 changed files with 158 additions and 183 deletions

View File

@ -193,9 +193,10 @@ void Gui_RefreshAll(void) {
Gui_ContextRecreated(NULL);
}
void Gui_RefreshHud(void) {
Gui_HUD->VTABLE->ContextLost(Gui_HUD);
Gui_HUD->VTABLE->ContextRecreated(Gui_HUD);
void Gui_RefreshHud(void) { Gui_Refresh(Gui_HUD); }
void Gui_Refresh(struct Screen* s) {
s->VTABLE->ContextLost(s);
s->VTABLE->ContextRecreated(s);
}
int Gui_Index(struct Screen* s) {

View File

@ -157,6 +157,8 @@ struct Screen* Gui_GetClosable(void);
void Gui_RefreshAll(void);
void Gui_RefreshHud(void);
void Gui_Refresh(struct Screen* s);
/* Returns index of the given screen in the overlays list, -1 if not */
int Gui_IndexOverlay(const void* screen);
/* Removes given screen from the overlays list */

View File

@ -229,12 +229,12 @@ static void Menu_SwitchOptions(void* a, void* b) { OptionsGroupScreen_Sho
static void Menu_SwitchPause(void* a, void* b) { PauseScreen_Show(); }
static void Menu_SwitchClassicOptions(void* a, void* b) { Menu_ReplaceActive(ClassicOptionsScreen_MakeInstance()); }
static void Menu_SwitchKeysClassic(void* a, void* b) { Menu_ReplaceActive(ClassicKeyBindingsScreen_MakeInstance()); }
static void Menu_SwitchKeysClassicHacks(void* a, void* b) { Menu_ReplaceActive(ClassicHacksKeyBindingsScreen_MakeInstance()); }
static void Menu_SwitchKeysNormal(void* a, void* b) { Menu_ReplaceActive(NormalKeyBindingsScreen_MakeInstance()); }
static void Menu_SwitchKeysHacks(void* a, void* b) { Menu_ReplaceActive(HacksKeyBindingsScreen_MakeInstance()); }
static void Menu_SwitchKeysOther(void* a, void* b) { Menu_ReplaceActive(OtherKeyBindingsScreen_MakeInstance()); }
static void Menu_SwitchKeysMouse(void* a, void* b) { Menu_ReplaceActive(MouseKeyBindingsScreen_MakeInstance()); }
static void Menu_SwitchKeysClassic(void* a, void* b) { ClassicKeyBindingsScreen_Show(); }
static void Menu_SwitchKeysClassicHacks(void* a, void* b) { ClassicHacksKeyBindingsScreen_Show(); }
static void Menu_SwitchKeysNormal(void* a, void* b) { NormalKeyBindingsScreen_Show(); }
static void Menu_SwitchKeysHacks(void* a, void* b) { HacksKeyBindingsScreen_Show(); }
static void Menu_SwitchKeysOther(void* a, void* b) { OtherKeyBindingsScreen_Show(); }
static void Menu_SwitchKeysMouse(void* a, void* b) { MouseKeyBindingsScreen_Show(); }
static void Menu_SwitchMisc(void* a, void* b) { Menu_ReplaceActive(MiscOptionsScreen_MakeInstance()); }
static void Menu_SwitchGui(void* a, void* b) { Menu_ReplaceActive(GuiOptionsScreen_MakeInstance()); }
@ -1679,13 +1679,13 @@ static void ClassicKeyBindingsScreen_ContextRecreated(void* screen) {
}
}
struct Screen* ClassicKeyBindingsScreen_MakeInstance(void) {
void ClassicKeyBindingsScreen_Show(void) {
static uint8_t binds[10] = { KEYBIND_FORWARD, KEYBIND_BACK, KEYBIND_JUMP, KEYBIND_CHAT, KEYBIND_SET_SPAWN, KEYBIND_LEFT, KEYBIND_RIGHT, KEYBIND_INVENTORY, KEYBIND_FOG, KEYBIND_RESPAWN };
static const char* descs[10] = { "Forward", "Back", "Jump", "Chat", "Save loc", "Left", "Right", "Build", "Toggle fog", "Load loc" };
struct KeyBindingsScreen* s = KeyBindingsScreen_Make(Array_Elems(binds), binds, descs, ClassicKeyBindingsScreen_ContextRecreated);
if (Game_ClassicHacks) s->rightPage = Menu_SwitchKeysClassicHacks;
return (struct Screen*)s;
Gui_Replace((struct Screen*)s, GUI_PRIORITY_MENU);
}
@ -1697,13 +1697,13 @@ static void ClassicHacksKeyBindingsScreen_ContextRecreated(void* screen) {
KeyBindingsScreen_MakeWidgets(s, -90, -40, 3, "Hacks controls", 260);
}
struct Screen* ClassicHacksKeyBindingsScreen_MakeInstance(void) {
void ClassicHacksKeyBindingsScreen_Show(void) {
static uint8_t binds[6] = { KEYBIND_SPEED, KEYBIND_NOCLIP, KEYBIND_HALF_SPEED, KEYBIND_FLY, KEYBIND_FLY_UP, KEYBIND_FLY_DOWN };
static const char* descs[6] = { "Speed", "Noclip", "Half speed", "Fly", "Fly up", "Fly down" };
struct KeyBindingsScreen* s = KeyBindingsScreen_Make(Array_Elems(binds), binds, descs, ClassicHacksKeyBindingsScreen_ContextRecreated);
s->leftPage = Menu_SwitchKeysClassic;
return (struct Screen*)s;
Gui_Replace((struct Screen*)s, GUI_PRIORITY_MENU);
}
@ -1715,13 +1715,13 @@ static void NormalKeyBindingsScreen_ContextRecreated(void* screen) {
KeyBindingsScreen_MakeWidgets(s, -140, 10, 6, "Normal controls", 260);
}
struct Screen* NormalKeyBindingsScreen_MakeInstance(void) {
void NormalKeyBindingsScreen_Show(void) {
static uint8_t binds[12] = { KEYBIND_FORWARD, KEYBIND_BACK, KEYBIND_JUMP, KEYBIND_CHAT, KEYBIND_SET_SPAWN, KEYBIND_PLAYER_LIST, KEYBIND_LEFT, KEYBIND_RIGHT, KEYBIND_INVENTORY, KEYBIND_FOG, KEYBIND_RESPAWN, KEYBIND_SEND_CHAT };
static const char* descs[12] = { "Forward", "Back", "Jump", "Chat", "Set spawn", "Player list", "Left", "Right", "Inventory", "Toggle fog", "Respawn", "Send chat" };
struct KeyBindingsScreen* s = KeyBindingsScreen_Make(Array_Elems(binds), binds, descs, NormalKeyBindingsScreen_ContextRecreated);
s->rightPage = Menu_SwitchKeysHacks;
return (struct Screen*)s;
Gui_Replace((struct Screen*)s, GUI_PRIORITY_MENU);
}
@ -1733,14 +1733,14 @@ static void HacksKeyBindingsScreen_ContextRecreated(void* screen) {
KeyBindingsScreen_MakeWidgets(s, -40, 10, 4, "Hacks controls", 260);
}
struct Screen* HacksKeyBindingsScreen_MakeInstance(void) {
void HacksKeyBindingsScreen_Show(void) {
static uint8_t binds[8] = { KEYBIND_SPEED, KEYBIND_NOCLIP, KEYBIND_HALF_SPEED, KEYBIND_ZOOM_SCROLL, KEYBIND_FLY, KEYBIND_FLY_UP, KEYBIND_FLY_DOWN, KEYBIND_THIRD_PERSON };
static const char* descs[8] = { "Speed", "Noclip", "Half speed", "Scroll zoom", "Fly", "Fly up", "Fly down", "Third person" };
struct KeyBindingsScreen* s = KeyBindingsScreen_Make(Array_Elems(binds), binds, descs, HacksKeyBindingsScreen_ContextRecreated);
s->leftPage = Menu_SwitchKeysNormal;
s->rightPage = Menu_SwitchKeysOther;
return (struct Screen*)s;
Gui_Replace((struct Screen*)s, GUI_PRIORITY_MENU);
}
@ -1752,14 +1752,14 @@ static void OtherKeyBindingsScreen_ContextRecreated(void* screen) {
KeyBindingsScreen_MakeWidgets(s, -140, 10, 6, "Other controls", 260);
}
struct Screen* OtherKeyBindingsScreen_MakeInstance(void) {
void OtherKeyBindingsScreen_Show(void) {
static uint8_t binds[12] = { KEYBIND_EXT_INPUT, KEYBIND_HIDE_FPS, KEYBIND_HIDE_GUI, KEYBIND_HOTBAR_SWITCH, KEYBIND_DROP_BLOCK,KEYBIND_SCREENSHOT, KEYBIND_FULLSCREEN, KEYBIND_AXIS_LINES, KEYBIND_AUTOROTATE, KEYBIND_SMOOTH_CAMERA, KEYBIND_IDOVERLAY, KEYBIND_BREAK_LIQUIDS };
static const char* descs[12] = { "Show ext input", "Hide FPS", "Hide gui", "Hotbar switching", "Drop block", "Screenshot", "Fullscreen", "Show axis lines", "Auto-rotate", "Smooth camera", "ID overlay", "Breakable liquids" };
struct KeyBindingsScreen* s = KeyBindingsScreen_Make(Array_Elems(binds), binds, descs, OtherKeyBindingsScreen_ContextRecreated);
s->leftPage = Menu_SwitchKeysHacks;
s->rightPage = Menu_SwitchKeysMouse;
return (struct Screen*)s;
Gui_Replace((struct Screen*)s, GUI_PRIORITY_MENU);
}
@ -1776,14 +1776,14 @@ static void MouseKeyBindingsScreen_ContextRecreated(void* screen) {
ANCHOR_CENTRE, ANCHOR_CENTRE, 0, 100);
}
struct Screen* MouseKeyBindingsScreen_MakeInstance(void) {
void MouseKeyBindingsScreen_Show(void) {
static uint8_t binds[3] = { KEYBIND_MOUSE_LEFT, KEYBIND_MOUSE_MIDDLE, KEYBIND_MOUSE_RIGHT };
static const char* descs[3] = { "Left", "Middle", "Right" };
struct KeyBindingsScreen* s = KeyBindingsScreen_Make(Array_Elems(binds), binds, descs, MouseKeyBindingsScreen_ContextRecreated);
s->leftPage = Menu_SwitchKeysOther;
s->numWidgets++; /* Extra text widget for 'right click' message */
return (struct Screen*)s;
Gui_Replace((struct Screen*)s, GUI_PRIORITY_MENU);
}
@ -2788,47 +2788,33 @@ struct Screen* NostalgiaScreen_MakeInstance(void) {
/*########################################################################################################################*
*---------------------------------------------------------Overlay---------------------------------------------------------*
*#########################################################################################################################*/
static void Overlay_Free(void* screen) {
MenuScreen_Free(screen);
Gui_RemoveOverlay(screen);
}
static bool Overlay_KeyDown(void* screen, Key key) { return true; }
static void Overlay_MakeLabels(void* menu, struct TextWidget* labels, const String* lines) {
static void Overlay_MakeLabels(void* menu, struct TextWidget* labels) {
struct MenuScreen* s = (struct MenuScreen*)menu;
PackedCol col = PACKEDCOL_CONST(224, 224, 224, 255);
int i;
Menu_OldLabel(s, 0, &labels[0], &lines[0], &s->titleFont,
ANCHOR_CENTRE, ANCHOR_CENTRE, 0, -120);
Menu_Label(s, 0, &labels[0], ANCHOR_CENTRE, ANCHOR_CENTRE, 0, -120);
for (i = 1; i < 4; i++) {
if (!lines[i].length) continue;
Menu_OldLabel(s, i, &labels[i], &lines[i], &s->textFont,
ANCHOR_CENTRE, ANCHOR_CENTRE, 0, -70 + 20 * i);
Menu_Label(s, i, &labels[i], ANCHOR_CENTRE, ANCHOR_CENTRE, 0, -70 + 20 * i);
labels[i].col = col;
}
}
static void WarningOverlay_MakeButtons(void* menu, struct ButtonWidget* btns, bool always, Widget_LeftClick yesClick, Widget_LeftClick noClick) {
static const String yes = String_FromConst("Yes");
static const String no = String_FromConst("No");
static const String alwaysYes = String_FromConst("Always yes");
static const String alwaysNo = String_FromConst("Always no");
struct MenuScreen* s = (struct MenuScreen*)menu;
Menu_OldButton(s, 4, &btns[0], 160, &yes, &s->titleFont, yesClick,
static void Overlay_MakeMainButtons(void* s, struct ButtonWidget* btns) {
Menu_Button(s, 4, &btns[0], 160, NULL,
ANCHOR_CENTRE, ANCHOR_CENTRE, -110, 30);
Menu_OldButton(s, 5, &btns[1], 160, &no, &s->titleFont, noClick,
Menu_Button(s, 5, &btns[1], 160, NULL,
ANCHOR_CENTRE, ANCHOR_CENTRE, 110, 30);
if (!always) return;
Menu_OldButton(s, 6, &btns[2], 160, &alwaysYes, &s->titleFont, yesClick,
}
static void Overlay_MakeExtraButtons(void* s, struct ButtonWidget* btns) {
Menu_Button(s, 6, &btns[2], 160, NULL,
ANCHOR_CENTRE, ANCHOR_CENTRE, -110, 85);
Menu_OldButton(s, 7, &btns[3], 160, &alwaysNo, &s->titleFont, noClick,
Menu_Button(s, 7, &btns[3], 160, NULL,
ANCHOR_CENTRE, ANCHOR_CENTRE, 110, 85);
}
static bool WarningOverlay_IsAlways(void* screen, void* w) { return Menu_Index(screen, w) >= 6; }
@ -2976,7 +2962,7 @@ static bool TexIdsOverlay_KeyPress(void* screen, char keyChar) { return false; }
static bool TexIdsOverlay_KeyUp(void* screen, Key key) { return false; }
static struct ScreenVTABLE TexIdsOverlay_VTABLE = {
TexIdsOverlay_Init, TexIdsOverlay_Render, Overlay_Free,
TexIdsOverlay_Init, TexIdsOverlay_Render, MenuScreen_Free,
TexIdsOverlay_KeyDown, TexIdsOverlay_KeyUp, TexIdsOverlay_KeyPress,
Menu_MouseDown, Menu_MouseUp, Menu_MouseMove, MenuScreen_MouseScroll,
Menu_OnResize, TexIdsOverlay_ContextLost, TexIdsOverlay_ContextRecreated
@ -3000,7 +2986,6 @@ void TexIdsOverlay_Show(void) {
*#########################################################################################################################*/
static struct UrlWarningOverlay {
MenuScreen_Layout
bool openingUrl;
String url;
struct ButtonWidget buttons[2];
struct TextWidget labels[4];
@ -3009,60 +2994,55 @@ static struct UrlWarningOverlay {
static void UrlWarningOverlay_OpenUrl(void* screen, void* b) {
struct UrlWarningOverlay* s = (struct UrlWarningOverlay*)screen;
if (s->openingUrl) return;
/* On windows, Process_StartOpen may end up calling our window procedure. */
/* If a mouse click message is delivered (e.g. user spam clicking), then */
/* UrlWarningOverlay_OpenUrl ends up getting called multiple times. */
/* This will cause a crash as Elem_Free gets called multiple times. */
/* (which attempts to unregister event handlers multiple times) */
s->openingUrl = true;
Process_StartOpen(&s->url);
s->openingUrl = false;
Elem_Free(s);
Gui_Remove((struct Screen*)s);
}
static void UrlWarningOverlay_AppendUrl(void* screen, void* b) {
struct UrlWarningOverlay* s = (struct UrlWarningOverlay*)screen;
if (Gui_ClickableChat) HUDScreen_AppendInput(&s->url);
Elem_Free(s);
Gui_Remove((struct Screen*)s);
}
static void UrlWarningOverlay_ContextRecreated(void* screen) {
static String lines[4] = {
String_FromConst("&eAre you sure you want to open this link?"),
String_FromConst(""),
String_FromConst("Be careful - links from strangers may be websites that"),
String_FromConst(" have viruses, or things you may not want to open/see."),
};
struct UrlWarningOverlay* s = (struct UrlWarningOverlay*)screen;
lines[1] = s->url;
Overlay_MakeLabels(s, s->labels, lines);
TextWidget_SetConst(&s->labels[0], "&eAre you sure you want to open this link?", &s->titleFont);
TextWidget_Set(&s->labels[1], &s->url, &s->textFont);
TextWidget_SetConst(&s->labels[2], "Be careful - links from strangers may be websites that", &s->textFont);
TextWidget_SetConst(&s->labels[3], " have viruses, or things you may not want to open/see.", &s->textFont);
WarningOverlay_MakeButtons((struct MenuScreen*)s, s->buttons, false,
UrlWarningOverlay_OpenUrl, UrlWarningOverlay_AppendUrl);
ButtonWidget_SetConst(&s->buttons[0], "Yes", &s->titleFont);
ButtonWidget_SetConst(&s->buttons[1], "No", &s->titleFont);
}
static void UrlWarningOverlay_Init(void* screen) {
static struct Widget* widgets[6];
struct UrlWarningOverlay* s = (struct UrlWarningOverlay*)screen;
s->widgets = widgets;
s->numWidgets = Array_Elems(widgets);
MenuScreen_Init(screen);
Overlay_MakeLabels(s, s->labels);
Overlay_MakeMainButtons(s, s->buttons);
s->buttons[0].MenuClick = UrlWarningOverlay_OpenUrl;
s->buttons[1].MenuClick = UrlWarningOverlay_AppendUrl;
}
static struct ScreenVTABLE UrlWarningOverlay_VTABLE = {
MenuScreen_Init, MenuScreen_Render, Overlay_Free,
Overlay_KeyDown, Menu_KeyUp, Menu_KeyPress,
Menu_MouseDown, Menu_MouseUp, Menu_MouseMove, MenuScreen_MouseScroll,
Menu_OnResize, Menu_ContextLost, UrlWarningOverlay_ContextRecreated
UrlWarningOverlay_Init, MenuScreen_Render, MenuScreen_Free,
Overlay_KeyDown, Menu_KeyUp, Menu_KeyPress,
Menu_MouseDown, Menu_MouseUp, Menu_MouseMove, MenuScreen_MouseScroll,
Menu_OnResize, Menu_ContextLost, UrlWarningOverlay_ContextRecreated
};
void UrlWarningOverlay_Show(const String* url) {
static struct Widget* widgets[6];
struct UrlWarningOverlay* s = &UrlWarningOverlay_Instance;
s->grabsInput = true;
s->closable = true;
s->widgets = widgets;
s->numWidgets = Array_Elems(widgets);
s->VTABLE = &UrlWarningOverlay_VTABLE;
String_InitArray(s->url, s->_urlBuffer);
String_Copy(&s->url, url);
s->VTABLE = &UrlWarningOverlay_VTABLE;
Gui_Replace((struct Screen*)s, GUI_PRIORITY_URLWARNING);
}
@ -3072,9 +3052,9 @@ void UrlWarningOverlay_Show(const String* url) {
*#########################################################################################################################*/
static struct TexPackOverlay {
MenuScreen_Layout
bool showingDeny, alwaysDeny;
bool deny, alwaysDeny;
uint32_t contentLength;
String identifier;
String url, identifier;
struct ButtonWidget buttons[4];
struct TextWidget labels[4];
char _identifierBuffer[STRING_SIZE + 4];
@ -3082,37 +3062,61 @@ static struct TexPackOverlay {
static void TexPackOverlay_YesClick(void* screen, void* widget) {
struct TexPackOverlay* s = (struct TexPackOverlay*)screen;
String url = String_UNSAFE_SubstringAt(&s->identifier, 3);
World_ApplyTexturePack(&url);
if (WarningOverlay_IsAlways(s, widget)) TextureCache_Accept(&url);
Elem_Free(s);
World_ApplyTexturePack(&s->url);
if (WarningOverlay_IsAlways(s, widget)) TextureCache_Accept(&s->url);
Gui_Remove((struct Screen*)s);
}
static void TexPackOverlay_NoClick(void* screen, void* widget) {
struct TexPackOverlay* s = (struct TexPackOverlay*)screen;
s->alwaysDeny = WarningOverlay_IsAlways(s, widget);
s->showingDeny = true;
s->VTABLE->ContextLost(s);
s->VTABLE->ContextRecreated(s);
s->alwaysDeny = WarningOverlay_IsAlways(s, widget);
s->deny = true;
Gui_Refresh((struct Screen*)s);
}
static void TexPackOverlay_ConfirmNoClick(void* screen, void* b) {
struct TexPackOverlay* s = (struct TexPackOverlay*)screen;
String url;
url = String_UNSAFE_SubstringAt(&s->identifier, 3);
if (s->alwaysDeny) TextureCache_Deny(&url);
Elem_Free(s);
if (s->alwaysDeny) TextureCache_Deny(&s->url);
Gui_Remove((struct Screen*)s);
}
static void TexPackOverlay_GoBackClick(void* screen, void* b) {
struct TexPackOverlay* s = (struct TexPackOverlay*)screen;
s->showingDeny = false;
s->deny = false;
Gui_Refresh((struct Screen*)s);
}
s->VTABLE->ContextLost(s);
s->VTABLE->ContextRecreated(s);
static void TexPackOverlay_UpdateLine2(struct TexPackOverlay* s) {
static const String https = String_FromConst("https://");
static const String http = String_FromConst("http://");
String url = String_Empty;
if (!s->deny) {
url = s->url;
if (String_CaselessStarts(&url, &https)) {
url = String_UNSAFE_SubstringAt(&url, https.length);
}
if (String_CaselessStarts(&url, &http)) {
url = String_UNSAFE_SubstringAt(&url, http.length);
}
}
TextWidget_Set(&s->labels[2], &url, &s->textFont);
}
static void TexPackOverlay_UpdateLine3(struct TexPackOverlay* s) {
String contents; char contentsBuffer[STRING_SIZE];
float contentLengthMB;
if (s->deny) {
TextWidget_SetConst(&s->labels[3], "Sure you don't want to download the texture pack?", &s->textFont);
} else if (s->contentLength) {
String_InitArray(contents, contentsBuffer);
contentLengthMB = s->contentLength / (1024.0f * 1024.0f);
String_Format1(&contents, "Download size: %f3 MB", &contentLengthMB);
TextWidget_Set(&s->labels[3], &contents, &s->textFont);
} else {
TextWidget_SetConst(&s->labels[3], "Download size: Determining...", &s->textFont);
}
}
static void TexPackOverlay_Render(void* screen, double delta) {
@ -3122,95 +3126,63 @@ static void TexPackOverlay_Render(void* screen, double delta) {
MenuScreen_Render(s, delta);
if (!Http_GetResult(&s->identifier, &item)) return;
s->contentLength = item.ContentLength;
if (!s->contentLength || Gfx.LostContext) return;
s->VTABLE->ContextLost(s);
s->VTABLE->ContextRecreated(s);
}
static void TexPackOverlay_MakeNormalElements(struct TexPackOverlay* s) {
static String lines[4] = {
String_FromConst("Do you want to download the server's texture pack?"),
String_FromConst("Texture pack url:"),
String_FromConst(""),
String_FromConst(""),
};
static const String defCL = String_FromConst("Download size: Determining...");
static const String https = String_FromConst("https://");
static const String http = String_FromConst("http://");
String contents; char contentsBuffer[STRING_SIZE];
float contentLengthMB;
String url;
url = String_UNSAFE_SubstringAt(&s->identifier, 3);
if (String_CaselessStarts(&url, &https)) {
url = String_UNSAFE_SubstringAt(&url, https.length);
}
if (String_CaselessStarts(&url, &http)) {
url = String_UNSAFE_SubstringAt(&url, http.length);
}
lines[2] = url;
if (s->contentLength) {
String_InitArray(contents, contentsBuffer);
contentLengthMB = s->contentLength / (1024.0f * 1024.0f);
String_Format1(&contents, "Download size: %f3 MB", &contentLengthMB);
lines[3] = contents;
} else { lines[3] = defCL; }
Overlay_MakeLabels(s, s->labels, lines);
WarningOverlay_MakeButtons((struct MenuScreen*)s, s->buttons, true,
TexPackOverlay_YesClick, TexPackOverlay_NoClick);
}
static void TexPackOverlay_MakeDenyElements(struct TexPackOverlay* s) {
static String lines[4] = {
String_FromConst("&eYou might be missing out."),
String_FromConst("Texture packs can play a vital role in the look and feel of maps."),
String_FromConst(""),
String_FromConst("Sure you don't want to download the texture pack?")
};
static const String imSure = String_FromConst("I'm sure");
static const String goBack = String_FromConst("Go back");
Overlay_MakeLabels(s, s->labels, lines);
Menu_OldButton(s, 4, &s->buttons[0], 160, &imSure, &s->titleFont, TexPackOverlay_ConfirmNoClick,
ANCHOR_CENTRE, ANCHOR_CENTRE, -110, 30);
Menu_OldButton(s, 5, &s->buttons[1], 160, &goBack, &s->titleFont, TexPackOverlay_GoBackClick,
ANCHOR_CENTRE, ANCHOR_CENTRE, 110, 30);
TexPackOverlay_UpdateLine3(s);
}
static void TexPackOverlay_ContextRecreated(void* screen) {
struct TexPackOverlay* s = (struct TexPackOverlay*)screen;
if (s->showingDeny) {
TexPackOverlay_MakeDenyElements(s);
} else {
TexPackOverlay_MakeNormalElements(s);
TextWidget_SetConst(&s->labels[0], s->deny ? "&eYou might be missing out."
: "Do you want to download the server's texture pack?", &s->titleFont);
TextWidget_SetConst(&s->labels[1], !s->deny ? "Texture pack url:"
: "Texture packs can play a vital role in the look and feel of maps.", &s->textFont);
TexPackOverlay_UpdateLine2(s);
TexPackOverlay_UpdateLine3(s);
ButtonWidget_SetConst(&s->buttons[0], s->deny ? "I'm sure" : "Yes", &s->titleFont);
ButtonWidget_SetConst(&s->buttons[1], s->deny ? "Go back" : "No", &s->titleFont);
s->buttons[0].MenuClick = s->deny ? TexPackOverlay_ConfirmNoClick : TexPackOverlay_YesClick;
s->buttons[1].MenuClick = s->deny ? TexPackOverlay_GoBackClick : TexPackOverlay_NoClick;
if (!s->deny) {
ButtonWidget_SetConst(&s->buttons[2], "Always yes", &s->titleFont);
ButtonWidget_SetConst(&s->buttons[3], "Always no", &s->titleFont);
s->buttons[2].MenuClick = TexPackOverlay_YesClick;
s->buttons[3].MenuClick = TexPackOverlay_NoClick;
}
s->numWidgets = s->showingDeny ? 6 : 8;
s->numWidgets = s->deny ? 6 : 8;
}
static void TexPackOverlay_Init(void* screen) {
static struct Widget* widgets[8];
struct TexPackOverlay* s = (struct TexPackOverlay*)screen;
s->widgets = widgets;
s->numWidgets = Array_Elems(widgets);
MenuScreen_Init(screen);
s->contentLength = 0;
s->deny = false;
Overlay_MakeLabels(s, s->labels);
Overlay_MakeMainButtons(s, s->buttons);
Overlay_MakeExtraButtons(s, s->buttons);
}
static struct ScreenVTABLE TexPackOverlay_VTABLE = {
MenuScreen_Init, TexPackOverlay_Render, Overlay_Free,
Overlay_KeyDown, Menu_KeyUp, Menu_KeyPress,
Menu_MouseDown, Menu_MouseUp, Menu_MouseMove, MenuScreen_MouseScroll,
Menu_OnResize, Menu_ContextLost, TexPackOverlay_ContextRecreated
TexPackOverlay_Init, TexPackOverlay_Render, MenuScreen_Free,
Overlay_KeyDown, Menu_KeyUp, Menu_KeyPress,
Menu_MouseDown, Menu_MouseUp, Menu_MouseMove, MenuScreen_MouseScroll,
Menu_OnResize, Menu_ContextLost, TexPackOverlay_ContextRecreated
};
void TexPackOverlay_Show(const String* url) {
static struct Widget* widgets[8];
struct TexPackOverlay* s = &TexPackOverlay_Instance;
s->showingDeny = false;
s->grabsInput = true;
s->closable = true;
s->widgets = widgets;
s->numWidgets = Array_Elems(widgets);
s->grabsInput = true;
s->closable = true;
s->VTABLE = &TexPackOverlay_VTABLE;
String_InitArray(s->identifier, s->_identifierBuffer);
String_Format1(&s->identifier, "CL_%s", url);
s->contentLength = 0;
s->url = String_UNSAFE_SubstringAt(&s->identifier, 3);
Http_AsyncGetHeaders(url, true, &s->identifier);
s->VTABLE = &TexPackOverlay_VTABLE;
Gui_Replace((struct Screen*)s, GUI_PRIORITY_TEXPACK);
}

View File

@ -11,12 +11,12 @@ void PauseScreen_Show(void);
void OptionsGroupScreen_Show(void);
struct Screen* ClassicOptionsScreen_MakeInstance(void);
struct Screen* ClassicKeyBindingsScreen_MakeInstance(void);
struct Screen* ClassicHacksKeyBindingsScreen_MakeInstance(void);
struct Screen* NormalKeyBindingsScreen_MakeInstance(void);
struct Screen* HacksKeyBindingsScreen_MakeInstance(void);
struct Screen* OtherKeyBindingsScreen_MakeInstance(void);
struct Screen* MouseKeyBindingsScreen_MakeInstance(void);
void ClassicKeyBindingsScreen_Show(void);
void ClassicHacksKeyBindingsScreen_Show(void);
void NormalKeyBindingsScreen_Show(void);
void HacksKeyBindingsScreen_Show(void);
void OtherKeyBindingsScreen_Show(void);
void MouseKeyBindingsScreen_Show(void);
void GenLevelScreen_Show(void);
void ClassicGenScreen_Show(void);

View File

@ -105,8 +105,8 @@ static int Program_Run(int argc, char** argv) {
int argsCount = Platform_GetCommandLineArgs(argc, argv, args);
/* NOTE: Make sure to comment this out before pushing a commit */
/* String rawArgs = String_FromConst("UnknownShadow200 fffff 127.0.0.1 25565"); */
String rawArgs = String_FromConst("UnknownShadow200");
String rawArgs = String_FromConst("UnknownShadow200 fffff 127.0.0.1 25565");
//String rawArgs = String_FromConst("UnknownShadow200");
argsCount = String_UNSAFE_Split(&rawArgs, ' ', args, 4);
if (argsCount == 0) {