From bced74712c2573a10eaab21d95af70d08f8fef88 Mon Sep 17 00:00:00 2001 From: Rudolf Polzer Date: Tue, 18 Jan 2011 07:07:23 +0100 Subject: [PATCH] before I do a language selector: a first-run dialog that asks for player name --- qcsrc/menu/classes.c | 1 + qcsrc/menu/skin-customizables.inc | 1 + qcsrc/menu/xonotic/dialog_firstrun.c | 53 ++++++++++++++++++++++++++++ qcsrc/menu/xonotic/mainwindow.c | 20 +++++++++++ 4 files changed, 75 insertions(+) create mode 100644 qcsrc/menu/xonotic/dialog_firstrun.c diff --git a/qcsrc/menu/classes.c b/qcsrc/menu/classes.c index bc7368d095..db01a6ae60 100644 --- a/qcsrc/menu/classes.c +++ b/qcsrc/menu/classes.c @@ -27,6 +27,7 @@ #include "xonotic/bigbutton.c" #include "xonotic/commandbutton.c" #include "xonotic/bigcommandbutton.c" +#include "xonotic/dialog_firstrun.c" #include "xonotic/dialog_teamselect.c" #include "xonotic/dialog_settings.c" #include "xonotic/dialog_settings_video.c" diff --git a/qcsrc/menu/skin-customizables.inc b/qcsrc/menu/skin-customizables.inc index 0a0de3d277..30ea052006 100644 --- a/qcsrc/menu/skin-customizables.inc +++ b/qcsrc/menu/skin-customizables.inc @@ -51,6 +51,7 @@ SKINBEGIN SKINVECTOR(AVOID_TOOLTIP, '8 8 0'); // the individual dialog background colors + SKINVECTOR(COLOR_DIALOG_FIRSTRUN, '0.7 0.7 1'); SKINVECTOR(COLOR_DIALOG_MULTIPLAYER, '0.7 0.7 1'); SKINVECTOR(COLOR_DIALOG_SETTINGS, '0.7 0.7 1'); SKINVECTOR(COLOR_DIALOG_TEAMSELECT, '1 1 1'); diff --git a/qcsrc/menu/xonotic/dialog_firstrun.c b/qcsrc/menu/xonotic/dialog_firstrun.c new file mode 100644 index 0000000000..5b3e0d1077 --- /dev/null +++ b/qcsrc/menu/xonotic/dialog_firstrun.c @@ -0,0 +1,53 @@ +#ifdef INTERFACE +CLASS(XonoticFirstRunDialog) EXTENDS(XonoticRootDialog) + METHOD(XonoticFirstRunDialog, fill, void(entity)) // to be overridden by user to fill the dialog with controls + ATTRIB(XonoticFirstRunDialog, title, string, _("Welcome")) + ATTRIB(XonoticFirstRunDialog, color, vector, SKINCOLOR_DIALOG_FIRSTRUN) + ATTRIB(XonoticFirstRunDialog, intendedWidth, float, 0.6) + ATTRIB(XonoticFirstRunDialog, rows, float, 11) + ATTRIB(XonoticFirstRunDialog, columns, float, 3) + ATTRIB(XonoticFirstRunDialog, name, string, "FirstRun") + ATTRIB(XonoticFirstRunDialog, playerNameLabel, entity, NULL) + ATTRIB(XonoticFirstRunDialog, playerNameLabelAlpha, float, 0) + + ATTRIB(XonoticFirstRunDialog, closable, float, 0) +ENDCLASS(XonoticFirstRunDialog) +#endif + +#ifdef IMPLEMENTATION +void XonoticFirstRunDialog_fill(entity me) +{ + entity e; + entity label, box; + me.TR(me); + me.TD(me, 2, 3, e = makeXonoticTextLabel(0, _("Please answer a few initial questions to enhance the game experience."))); + e.allowWrap = 1; + me.TR(me); + me.TR(me); + me.TD(me, 1, 0.5, me.playerNameLabel = makeXonoticTextLabel(0, _("Name:"))); + me.playerNameLabelAlpha = me.playerNameLabel.alpha; + me.TD(me, 1, 2.5, label = makeXonoticTextLabel(0, string_null)); + label.allowCut = 1; + label.allowColors = 1; + label.alpha = 1; + me.TR(me); + me.TD(me, 1, 3.0, box = makeXonoticInputBox(1, "_cl_name")); + box.forbiddenCharacters = "\r\n\\\"$"; // don't care, isn't getting saved + box.maxLength = -127; // negative means encoded length in bytes + label.textEntity = box; + me.TR(me); + me.TD(me, 5, 1, e = makeXonoticColorpicker(box)); + me.TD(me, 5, 2, e = makeXonoticCharmap(box)); + me.TR(me); + me.TR(me); + me.TR(me); + me.TR(me); + me.TR(me); + me.TR(me); + + // because of the language selector, this is a menu_restart! + me.gotoRC(me, me.rows - 1, 0); + me.TD(me, 1, me.columns, e = makeXonoticCommandButton(_("Save settings"), '0 0 0', "saveconfig; menu_restart; togglemenu", COMMANDBUTTON_APPLY)); + setDependentStringNotEqual(e, "_cl_name", "Player"); +} +#endif diff --git a/qcsrc/menu/xonotic/mainwindow.c b/qcsrc/menu/xonotic/mainwindow.c index 18fdcf5c08..bd15150a8c 100644 --- a/qcsrc/menu/xonotic/mainwindow.c +++ b/qcsrc/menu/xonotic/mainwindow.c @@ -1,6 +1,8 @@ #ifdef INTERFACE CLASS(MainWindow) EXTENDS(ModalController) METHOD(MainWindow, configureMainWindow, void(entity)) + METHOD(MainWindow, draw, void(entity)) + ATTRIB(MainWindow, firstRunDialog, entity, NULL) ATTRIB(MainWindow, advancedDialog, entity, NULL) ATTRIB(MainWindow, mutatorsDialog, entity, NULL) ATTRIB(MainWindow, weaponsDialog, entity, NULL) @@ -12,10 +14,21 @@ CLASS(MainWindow) EXTENDS(ModalController) ATTRIB(MainWindow, cvarsDialog, entity, NULL) ATTRIB(MainWindow, mainNexposee, entity, NULL) ATTRIB(MainWindow, fadedAlpha, float, SKINALPHA_BEHIND) + ATTRIB(MainWindow, dialogToShow, entity, NULL) ENDCLASS(MainWindow) #endif #ifdef IMPLEMENTATION +void MainWindow_draw(entity me) +{ + SUPER(MainWindow).draw(me); + + if(me.dialogToShow) + { + DialogOpenButton_Click_withCoords(world, me.dialogToShow, '0 0 0', eX * conwidth + eY * conheight); + me.dialogToShow = NULL; + } +} void DemoButton_Click(entity me, entity other) { @@ -29,6 +42,10 @@ void MainWindow_configureMainWindow(entity me) { entity n, i; + me.firstRunDialog = i = spawnXonoticFirstRunDialog(); + i.configureDialog(i); + me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z); + i = spawnXonoticTeamSelectDialog(); i.configureDialog(i); me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z); @@ -173,6 +190,9 @@ void MainWindow_configureMainWindow(entity me) me.moveItemAfter(me, n, NULL); me.initializeDialog(me, n); + + if(cvar_string("_cl_name") == "Player") + me.dialogToShow = me.firstRunDialog; } #endif -- 2.39.2