Added a button for it alongside the 'Instant action' button.
Converted it to a XonoticDialog from a XonoticTab, renamed the class to XonoticGuideDialog.
Renamed the Singleplayer menu to Singleplayer / Guide.
Slightly changed some Singleplayer menu strings.
COLOR_DIALOG_ADVANCED '1 1 1'
COLOR_DIALOG_MUTATORS '1 1 1'
COLOR_DIALOG_MAPINFO '1 1 1'
+COLOR_DIALOG_GUIDE '1 1 1'
COLOR_DIALOG_USERBIND '1 1 1'
COLOR_DIALOG_SINGLEPLAYER '1 1 1'
COLOR_DIALOG_CREDITS '1 1 1'
COLOR_DIALOG_ADVANCED '1 1 1'
COLOR_DIALOG_MUTATORS '1 1 1'
COLOR_DIALOG_MAPINFO '1 1 1'
+COLOR_DIALOG_GUIDE '1 1 1'
COLOR_DIALOG_USERBIND '1 1 1'
COLOR_DIALOG_SINGLEPLAYER '1 1 1'
COLOR_DIALOG_CREDITS '1 1 1'
COLOR_DIALOG_ADVANCED '1 1 1'
COLOR_DIALOG_MUTATORS '1 1 1'
COLOR_DIALOG_MAPINFO '1 1 1'
+COLOR_DIALOG_GUIDE '1 1 1'
COLOR_DIALOG_USERBIND '1 1 1'
COLOR_DIALOG_SINGLEPLAYER '1 1 1'
COLOR_DIALOG_CREDITS '1 1 1'
COLOR_DIALOG_ADVANCED '1 1 1'
COLOR_DIALOG_MUTATORS '1 1 1'
COLOR_DIALOG_MAPINFO '1 1 1'
+COLOR_DIALOG_GUIDE '1 1 1'
COLOR_DIALOG_USERBIND '1 1 1'
COLOR_DIALOG_SINGLEPLAYER '1 1 1'
COLOR_DIALOG_CREDITS '1 1 1'
SKINVECTOR(COLOR_DIALOG_ADVANCED, '0.7 0.7 1');
SKINVECTOR(COLOR_DIALOG_MUTATORS, '0.7 0.7 1');
SKINVECTOR(COLOR_DIALOG_MAPINFO, '0.7 0.7 1');
+ SKINVECTOR(COLOR_DIALOG_GUIDE, '0.7 0.7 1');
SKINVECTOR(COLOR_DIALOG_USERBIND, '0.7 0.7 1');
SKINVECTOR(COLOR_DIALOG_SINGLEPLAYER, '1 1 0.7');
SKINVECTOR(COLOR_DIALOG_CREDITS, '0.7 0.7 1');
#include "dialog_multiplayer_media.qh"
#include "demolist.qh"
-#include "dialog_multiplayer_media_guide.qh"
#include "dialog_multiplayer_media_demo.qh"
#include "dialog_multiplayer_media_screenshot.qh"
#include "dialog_multiplayer_media_musicplayer.qh"
mc = makeXonoticTabController(me.rows - 2);
me.gotoRC(me, 0.5, 0);
- me.TD(me, 1, 1, e = mc.makeTabButton(mc, _("Guide"), NEW(XonoticGuideTab)));
me.TD(me, 1, 1, e = mc.makeTabButton(mc, _("Demos"), makeXonoticDemoBrowserTab()));
me.TD(me, 1, 1, e = mc.makeTabButton(mc, _("Screenshots"), makeXonoticScreenshotBrowserTab()));
me.TD(me, 1, 1, e = mc.makeTabButton(mc, _("Music Player"), makeXonoticMusicPlayerTab()));
METHOD(XonoticMediaTab, fill, void(entity));
ATTRIB(XonoticMediaTab, intendedWidth, float, 0.9);
ATTRIB(XonoticMediaTab, rows, float, 23);
- ATTRIB(XonoticMediaTab, columns, float, 4);
+ ATTRIB(XonoticMediaTab, columns, float, 3);
ATTRIB(XonoticMediaTab, name, string, "Media");
ENDCLASS(XonoticMediaTab)
entity makeXonoticMediaTab();
#include "textlabel.qh"
#include <menu/xonotic/guide/entries.qh>
-void XonoticGuideTab_fill(entity me)
+void XonoticGuideDialog_fill(entity me)
{
entity e;
me.TD(me, 1, width, makeXonoticHeaderLabel(_("Topic")));
me.TR(me);
me.TD(me, me.rows - 1, width, e = me.topicList);
- e.onChange = XonoticGuideTab_topicChangeNotify;
+ e.onChange = XonoticGuideDialog_topicChangeNotify;
e.onChangeEntity = me;
col += width, width = 2;
me.TD(me, 1, width, makeXonoticHeaderLabel(_("Entry")));
me.TR(me);
me.TD(me, me.rows - 1 - 1, width, e = me.entryList);
- e.onChange = XonoticGuideTab_entryChangeNotify;
+ e.onChange = XonoticGuideDialog_entryChangeNotify;
e.onChangeEntity = me;
me.gotoRC(me, me.rows - 1, col);
me.entryList.stringFilterBox = makeXonoticInputBox_T(false, string_null,
me.topicChangeNotify(me.topicList, me);
}
-void XonoticGuideTab_topicChangeNotify(entity, entity me)
+void XonoticGuideDialog_topicChangeNotify(entity, entity me)
{
entity topics = me.topicList;
entity entries = me.entryList;
entries.refilter(entries);
entries.setSelected(entries, 0);
}
-
-void XonoticGuideTab_entryChangeNotify(entity, entity me)
+void XonoticGuideDialog_entryChangeNotify(entity, entity me)
{
entity desc = me.descriptionPane;
entity entries = me.entryList;
#include <menu/xonotic/guide/_mod.qh>
-#include "tab.qh"
-CLASS(XonoticGuideTab, XonoticTab)
- ATTRIB(XonoticGuideTab, rows, float, 21);
- ATTRIB(XonoticGuideTab, columns, float, 6);
- ATTRIB(XonoticGuideTab, intendedWidth, float, 1);
- METHOD(XonoticGuideTab, fill, void(entity));
- METHOD(XonoticGuideTab, topicChangeNotify, void(entity, entity));
- METHOD(XonoticGuideTab, entryChangeNotify, void(entity, entity));
+#include "dialog.qh"
+CLASS(XonoticGuideDialog, XonoticDialog)
+ ATTRIB(XonoticGuideDialog, title, string, _("Guide"));
+ ATTRIB(XonoticGuideDialog, name, string, "guide");
+ ATTRIB(XonoticGuideDialog, color, vector, SKINCOLOR_DIALOG_GUIDE);
+ ATTRIB(XonoticGuideDialog, rows, float, 21);
+ ATTRIB(XonoticGuideDialog, columns, float, 6);
+ ATTRIB(XonoticGuideDialog, intendedWidth, float, 0.9);
+ METHOD(XonoticGuideDialog, fill, void(entity));
+ METHOD(XonoticGuideDialog, topicChangeNotify, void(entity, entity));
+ METHOD(XonoticGuideDialog, entryChangeNotify, void(entity, entity));
- ATTRIB(XonoticGuideTab, controlledTextbox, entity);
- ATTRIB(XonoticGuideTab, topicList, entity, NEW(XonoticTopicList, NEW(TopicSource)));
- ATTRIB(XonoticGuideTab, entryList, entity, NEW(XonoticEntryList, NULL));
- ATTRIB(XonoticGuideTab, descriptionPane, entity, NEW(XonoticGuideDescription));
-
- INIT(XonoticGuideTab) {
- this.configureDialog(this);
- }
-ENDCLASS(XonoticGuideTab)
+ ATTRIB(XonoticGuideDialog, topicList, entity, NEW(XonoticTopicList, NEW(TopicSource)));
+ ATTRIB(XonoticGuideDialog, entryList, entity, NEW(XonoticEntryList, NULL));
+ ATTRIB(XonoticGuideDialog, descriptionPane, entity, NEW(XonoticGuideDescription));
+ENDCLASS(XonoticGuideDialog)
#include "leavematchbutton.qh"
#include "radiobutton.qh"
#include "textlabel.qh"
+#include "mainwindow.qh"
#include "campaign.qh"
void InstantAction_LoadMap(entity btn, entity dummy)
entity e, btnPrev, btnNext, lblTitle;
me.TR(me);
- me.TDempty(me, (me.columns - 3) / 2);
- me.TD(me, 2, 3, e = makeXonoticBigButton(_("Instant action! (random map with bots)"), '0 0 0'));
+ me.TDempty(me, (me.columns / 2) - 2);
+ me.TD(me, 2, 2, e = makeXonoticBigButton(_("Instant action with bots!"), '0 0 0'));
e.onClick = InstantAction_LoadMap;
e.onClickEntity = NULL;
+ me.TD(me, 2, 2, e = makeXonoticBigButton(_("Guide"), '0 0 0'));
+ e.onClick = DialogOpenButton_Click;
+ e.onClickEntity = main.guideDialog;
me.TR(me);
me.TR(me);
me.TR(me);
#include "dialog.qh"
CLASS(XonoticSingleplayerDialog, XonoticDialog)
METHOD(XonoticSingleplayerDialog, fill, void(entity));
- ATTRIB(XonoticSingleplayerDialog, title, string, _("Singleplayer"));
- ATTRIB(XonoticSingleplayerDialog, tooltip, string, _("Play the singleplayer campaign or instant action matches against bots"));
+ ATTRIB(XonoticSingleplayerDialog, title, string, _("Singleplayer / Guide"));
+ ATTRIB(XonoticSingleplayerDialog, tooltip, string, _("Play the singleplayer campaign or instant action matches against bots, or read the guide"));
ATTRIB(XonoticSingleplayerDialog, color, vector, SKINCOLOR_DIALOG_SINGLEPLAYER);
ATTRIB(XonoticSingleplayerDialog, intendedWidth, float, 0.80);
ATTRIB(XonoticSingleplayerDialog, rows, float, 24);
#include "dialog_settings_game_hudconfirm.qh"
#include "dialog_singleplayer_winner.qh"
#include "dialog_multiplayer_join_serverinfo.qh"
+#include "dialog_multiplayer_media_guide.qh"
#include "dialog_multiplayer_media_demo_startconfirm.qh"
#include "dialog_multiplayer_media_demo_timeconfirm.qh"
#include "dialog_multiplayer_media_screenshot_viewer.qh"
me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
- // dialog used by singleplayer
+ // dialog used by singleplayer / guide
me.winnerDialog = i = NEW(XonoticWinnerDialog);
i.configureDialog(i);
me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
+ me.guideDialog = i = NEW(XonoticGuideDialog);
+ i.configureDialog(i);
+ me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
+
// dialog used by multiplayer/join
me.serverInfoDialog = i = NEW(XonoticServerInfoDialog);
ATTRIB(MainWindow, advancedDialog, entity);
ATTRIB(MainWindow, mutatorsDialog, entity);
ATTRIB(MainWindow, mapInfoDialog, entity);
+ ATTRIB(MainWindow, guideDialog, entity);
ATTRIB(MainWindow, userbindEditDialog, entity);
ATTRIB(MainWindow, bindingsResetDialog, entity);
ATTRIB(MainWindow, winnerDialog, entity);