mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-17 11:35:08 -04:00
Show better error messages for some reasons plugins fail to load, fixes #1076
This commit is contained in:
parent
09bfca5217
commit
9bbee1cb8f
@ -221,13 +221,7 @@ static void UseModeEnhanced(void* w) { ChooseMode_Click(false, false); }
|
||||
static void UseModeClassicHax(void* w) { ChooseMode_Click(true, true); }
|
||||
static void UseModeClassic(void* w) { ChooseMode_Click(true, false); }
|
||||
|
||||
static void ChooseModeScreen_Show(struct LScreen* s_) {
|
||||
struct ChooseModeScreen* s = (struct ChooseModeScreen*)s_;
|
||||
|
||||
s->widgets = chooseMode_widgets;
|
||||
s->maxWidgets = Array_Elems(chooseMode_widgets);
|
||||
s->numWidgets = 0;
|
||||
|
||||
static void ChooseModeScreen_AddWidgets(struct ChooseModeScreen* s) {
|
||||
LLine_Init(s, &s->seps[0], 490, mode_seps0);
|
||||
LLine_Init(s, &s->seps[1], 490, mode_seps1);
|
||||
|
||||
@ -254,6 +248,15 @@ static void ChooseModeScreen_Show(struct LScreen* s_) {
|
||||
}
|
||||
}
|
||||
|
||||
static void ChooseModeScreen_Show(struct LScreen* s_) {
|
||||
struct ChooseModeScreen* s = (struct ChooseModeScreen*)s_;
|
||||
|
||||
s->widgets = chooseMode_widgets;
|
||||
s->maxWidgets = Array_Elems(chooseMode_widgets);
|
||||
s->numWidgets = 0;
|
||||
ChooseModeScreen_AddWidgets(s);
|
||||
}
|
||||
|
||||
void ChooseModeScreen_SetActive(cc_bool firstTime) {
|
||||
struct ChooseModeScreen* s = &ChooseModeScreen;
|
||||
LScreen_Reset((struct LScreen*)s);
|
||||
@ -417,8 +420,8 @@ static void ColoursScreen_Init(struct LScreen* s_) {
|
||||
LButton_Init(s, &s->btnBack, 80, 35, "Back",
|
||||
SwitchToThemes, clr_btnBack);
|
||||
|
||||
LCheckbox_Init(s, &s->cbClassic, "Classic style", clr_cbClassic);
|
||||
s->cbClassic.ValueChanged = ColoursScreen_ToggleBG;
|
||||
LCheckbox_Init(s, &s->cbClassic, "Classic style",
|
||||
ColoursScreen_ToggleBG, clr_cbClassic);
|
||||
}
|
||||
|
||||
static void ColoursScreen_Show(struct LScreen* s_) {
|
||||
@ -1401,13 +1404,17 @@ static void SettingsScreen_AddWidgets(struct SettingsScreen* s) {
|
||||
}
|
||||
|
||||
#if defined CC_BUILD_MOBILE
|
||||
LCheckbox_Init(s, &s->cbExtra, "Force landscape", set_cbExtra);
|
||||
LCheckbox_Init(s, &s->cbExtra, "Force landscape",
|
||||
SettingsScreen_LockOrientation, set_cbExtra);
|
||||
#else
|
||||
LCheckbox_Init(s, &s->cbExtra, "Close this after game starts", set_cbExtra);
|
||||
LCheckbox_Init(s, &s->cbExtra, "Close this after game starts",
|
||||
SettingsScreen_AutoClose, set_cbExtra);
|
||||
#endif
|
||||
|
||||
LCheckbox_Init(s, &s->cbEmpty, "Show empty servers in list", set_cbEmpty);
|
||||
LCheckbox_Init(s, &s->cbScale, "Use display scaling", set_cbScale);
|
||||
LCheckbox_Init(s, &s->cbEmpty, "Show empty servers in list",
|
||||
SettingsScreen_ShowEmpty, set_cbEmpty);
|
||||
LCheckbox_Init(s, &s->cbScale, "Use display scaling",
|
||||
SettingsScreen_DPIScaling, set_cbScale);
|
||||
LButton_Init(s, &s->btnBack, 80, 35, "Back",
|
||||
SwitchToMain, set_btnBack);
|
||||
}
|
||||
@ -1421,17 +1428,12 @@ static void SettingsScreen_Show(struct LScreen* s_) {
|
||||
SettingsScreen_AddWidgets(s);
|
||||
|
||||
#if defined CC_BUILD_MOBILE
|
||||
s->cbExtra.ValueChanged = SettingsScreen_LockOrientation;
|
||||
LCheckbox_Set(&s->cbExtra, Options_GetBool(OPT_LANDSCAPE_MODE, false));
|
||||
#else
|
||||
s->cbExtra.ValueChanged = SettingsScreen_AutoClose;
|
||||
LCheckbox_Set(&s->cbExtra, Options_GetBool(LOPT_AUTO_CLOSE, false));
|
||||
#endif
|
||||
|
||||
s->cbEmpty.ValueChanged = SettingsScreen_ShowEmpty;
|
||||
LCheckbox_Set(&s->cbEmpty, Launcher_ShowEmptyServers);
|
||||
|
||||
s->cbScale.ValueChanged = SettingsScreen_DPIScaling;
|
||||
LCheckbox_Set(&s->cbScale, DisplayInfo.DPIScaling);
|
||||
}
|
||||
|
||||
@ -1679,11 +1681,8 @@ static void UpdatesScreen_Rel_1(void* w) { UpdatesScreen_Get(true, 1); }
|
||||
static void UpdatesScreen_Dev_0(void* w) { UpdatesScreen_Get(false, 0); }
|
||||
static void UpdatesScreen_Dev_1(void* w) { UpdatesScreen_Get(false, 1); }
|
||||
|
||||
static void UpdatesScreen_Init(struct LScreen* s_) {
|
||||
struct UpdatesScreen* s = (struct UpdatesScreen*)s_;
|
||||
int builds = Updater_Info.numBuilds;
|
||||
s->widgets = updates_widgets;
|
||||
s->maxWidgets = Array_Elems(updates_widgets);
|
||||
static void UpdatesScreen_AddWidgets(struct UpdatesScreen* s) {
|
||||
int builds = Updater_Info.numBuilds;
|
||||
|
||||
LLine_Init(s, &s->seps[0], 320, upd_seps0);
|
||||
LLine_Init(s, &s->seps[1], 320, upd_seps1);
|
||||
@ -1716,6 +1715,11 @@ static void UpdatesScreen_Show(struct LScreen* s_) {
|
||||
cc_uint64 buildTime;
|
||||
cc_result res;
|
||||
|
||||
s->widgets = updates_widgets;
|
||||
s->maxWidgets = Array_Elems(updates_widgets);
|
||||
s->numWidgets = 0;
|
||||
UpdatesScreen_AddWidgets(s);
|
||||
|
||||
/* Initially fill out with update check result from main menu */
|
||||
if (CheckUpdateTask.Base.completed && CheckUpdateTask.Base.success) {
|
||||
UpdatesScreen_FormatBoth(s);
|
||||
@ -1748,10 +1752,9 @@ static void UpdatesScreen_Free(struct LScreen* s_) {
|
||||
void UpdatesScreen_SetActive(void) {
|
||||
struct UpdatesScreen* s = &UpdatesScreen;
|
||||
LScreen_Reset((struct LScreen*)s);
|
||||
s->Init = UpdatesScreen_Init;
|
||||
s->Show = UpdatesScreen_Show;
|
||||
s->Tick = UpdatesScreen_Tick;
|
||||
s->Free = UpdatesScreen_Free;
|
||||
s->Show = UpdatesScreen_Show;
|
||||
s->Tick = UpdatesScreen_Tick;
|
||||
s->Free = UpdatesScreen_Free;
|
||||
|
||||
s->title = "Update game";
|
||||
s->onEscapeWidget = (struct LWidget*)&s->btnBack;
|
||||
|
@ -147,11 +147,12 @@ static const struct LWidgetVTABLE lcheckbox_VTABLE = {
|
||||
NULL, NULL /* Select */
|
||||
};
|
||||
void LCheckbox_Init(void* screen, struct LCheckbox* w, const char* text,
|
||||
const struct LLayout* layouts) {
|
||||
LCheckboxChanged onChanged, const struct LLayout* layouts) {
|
||||
w->VTABLE = &lcheckbox_VTABLE;
|
||||
w->type = LWIDGET_CHECKBOX;
|
||||
w->layouts = layouts;
|
||||
w->autoSelectable = true;
|
||||
w->ValueChanged = onChanged;
|
||||
|
||||
w->text = String_FromReadonly(text);
|
||||
LBackend_CheckboxInit(w);
|
||||
|
@ -44,7 +44,6 @@ struct LWidgetVTABLE {
|
||||
};
|
||||
|
||||
|
||||
|
||||
#define LWidget_Layout \
|
||||
const struct LWidgetVTABLE* VTABLE; /* General widget functions */ \
|
||||
int x, y, width, height; /* Top left corner and dimensions of this widget */ \
|
||||
@ -78,14 +77,15 @@ CC_NOINLINE void LButton_SetConst(struct LButton* w, const char* text);
|
||||
CC_NOINLINE void LButton_DrawBackground(struct Context2D* ctx, int x, int y, int width, int height, cc_bool active);
|
||||
|
||||
struct LCheckbox;
|
||||
typedef void (*LCheckboxChanged)(struct LCheckbox* cb);
|
||||
struct LCheckbox {
|
||||
LWidget_Layout
|
||||
cc_bool value;
|
||||
cc_string text;
|
||||
void (*ValueChanged)(struct LCheckbox* w);
|
||||
LCheckboxChanged ValueChanged;
|
||||
};
|
||||
CC_NOINLINE void LCheckbox_Init(void* screen, struct LCheckbox* w, const char* text,
|
||||
const struct LLayout* layouts);
|
||||
LCheckboxChanged onChanged, const struct LLayout* layouts);
|
||||
CC_NOINLINE void LCheckbox_Set(struct LCheckbox* w, cc_bool value);
|
||||
|
||||
struct LInput;
|
||||
|
@ -785,9 +785,21 @@ cc_bool DynamicLib_DescribeError(cc_string* dst) {
|
||||
|
||||
/* Plugin may have been compiled to load symbols from ClassiCube.exe, */
|
||||
/* but the user might have renamed it to something else */
|
||||
if (res == ERROR_MOD_NOT_FOUND && loadingPlugin) {
|
||||
if (res == ERROR_MOD_NOT_FOUND && loadingPlugin) {
|
||||
String_AppendConst(dst, "\n Make sure the ClassiCube executable is named ClassiCube.exe");
|
||||
}
|
||||
if (res == ERROR_PROC_NOT_FOUND && loadingPlugin) {
|
||||
String_AppendConst(dst, "\n The plugin or your game may be outdated");
|
||||
}
|
||||
|
||||
/* User might be trying to use 32 bit plugin with 64 bit executable, or vice versa */
|
||||
if (res == ERROR_BAD_EXE_FORMAT && loadingPlugin) {
|
||||
if (sizeof(cc_uintptr) == 4) {
|
||||
String_AppendConst(dst, "\n Try using a 32 bit version of the plugin instead");
|
||||
} else {
|
||||
String_AppendConst(dst, "\n Try using a 64 bit version of the plugin instead");
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user