X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fmenu%2Fxonotic%2Fdialog_multiplayer_create.c;h=8ae9107a9af0d53c4c02968e5fe599099890b281;hp=3fc6f31fe322e47bd208a0bdc1384754498defa7;hb=81a2ea6d51caecebfd69945e447ab48c275a7c80;hpb=7ba1f46ba161d21ffd81e032f35c49b9da9f4d63 diff --git a/qcsrc/menu/xonotic/dialog_multiplayer_create.c b/qcsrc/menu/xonotic/dialog_multiplayer_create.c index 3fc6f31fe3..8ae9107a9a 100644 --- a/qcsrc/menu/xonotic/dialog_multiplayer_create.c +++ b/qcsrc/menu/xonotic/dialog_multiplayer_create.c @@ -2,22 +2,57 @@ CLASS(XonoticServerCreateTab) EXTENDS(XonoticTab) METHOD(XonoticServerCreateTab, fill, void(entity)) METHOD(XonoticServerCreateTab, gameTypeChangeNotify, void(entity)) + METHOD(XonoticServerCreateTab, gameTypeSelectNotify, void(entity)) ATTRIB(XonoticServerCreateTab, title, string, _("Create")) ATTRIB(XonoticServerCreateTab, intendedWidth, float, 0.9) - ATTRIB(XonoticServerCreateTab, rows, float, 22) - ATTRIB(XonoticServerCreateTab, columns, float, 6.2) // added extra .2 for center space + ATTRIB(XonoticServerCreateTab, rows, float, 23) + ATTRIB(XonoticServerCreateTab, columns, float, 6.2) // added extra .2 for center space ATTRIB(XonoticServerCreateTab, mapListBox, entity, NULL) ATTRIB(XonoticServerCreateTab, sliderFraglimit, entity, NULL) + ATTRIB(XonoticServerCreateTab, sliderTeams, entity, NULL) ATTRIB(XonoticServerCreateTab, sliderTimelimit, entity, NULL) - ATTRIB(XonoticServerCreateTab, checkboxFraglimit, entity, NULL) - ATTRIB(XonoticServerCreateTab, checkboxFraglimitMapinfo, entity, NULL) + ATTRIB(XonoticServerCreateTab, labelFraglimit, entity, NULL) + ATTRIB(XonoticServerCreateTab, labelTeams, entity, NULL) ENDCLASS(XonoticServerCreateTab) entity makeXonoticServerCreateTab(); #endif #ifdef IMPLEMENTATION +void GameType_ConfigureSliders(entity e, entity l, string pLabel, float pMin, float pMax, float pStep, string pCvar) +{ + if(pCvar == "") + { + e.configureXonoticTextSlider(e, string_null); + l.setText(l, pLabel); + e.disabled = l.disabled = TRUE; + } + else + { + e.configureXonoticTextSlider(e, pCvar); + + // clear old values + float i; + for(i = 0; i <= e.nValues; ++i); + { + if(e.(valueStrings[i])) { strunzone(e.(valueStrings[i])); } + if(e.(valueIdentifiers[i])) { strunzone(e.(valueIdentifiers[i])); } + } + e.clearValues(e); + + // set new values + e.addValue(e, strzone(_("Default")), strzone("-1")); + for(i = pMin; i <= pMax; i += pStep) { e.addValue(e, strzone(ftos(i)), strzone(ftos(i))); } + e.addValue(e, strzone(_("Unlimited")), strzone("0")); + e.configureXonoticTextSliderValues(e); + + // set text field + l.setText(l, pLabel); + e.disabled = l.disabled = FALSE; + } +} + entity makeXonoticServerCreateTab() { entity me; @@ -30,35 +65,47 @@ void XonoticServerCreateTab_fill(entity me) { entity e, e0; + me.gotoRC(me, 0.5, 0); + me.TD(me, 1, 3, makeXonoticHeaderLabel(_("Gametype"))); me.TR(me); - me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Game type:"))); - me.TR(me); - me.TD(me, 8, 3, e = makeXonoticGametypeList()); - me.TR(me); - me.TR(me); - me.TR(me); - me.TR(me); - me.TR(me); - me.TR(me); - me.TR(me); - me.TR(me); - //me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Match settings:"))); // pointless, overcrowds the dialog imo - me.TR(me); - me.sliderTimelimit = makeXonoticSlider(1.0, 60.0, 1, "timelimit_override"); - me.TD(me, 1, 1, e = makeXonoticSliderCheckBox(0, 1, me.sliderTimelimit, _("Time limit:"))); - me.TD(me, 1, 2, me.sliderTimelimit); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 2.8, e = makeXonoticSliderCheckBox(-1, 0, me.sliderTimelimit, _("Use map specified default"))); - me.TR(me); - me.sliderFraglimit = makeXonoticSlider(1.0, 2000.0, 5, "fraglimit_override"); - me.TD(me, 1, 1, e = makeXonoticSliderCheckBox(0, 1, me.sliderFraglimit, _("Point limit:"))); - me.checkboxFraglimit = e; - me.TD(me, 1, 2, me.sliderFraglimit); + me.TD(me, 10.5, 3, e = makeXonoticGametypeList()); + + me.gotoRC(me, 12.5, 0); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Time limit:"))); + me.TD(me, 1, 2, e = makeXonoticTextSlider("timelimit_override")); + e.addValue(e, ZCTX(_("TIMLIM^Default")), "-1"); + e.addValue(e, ZCTX(_("TIMLIM^1 minute")), "1"); + e.addValue(e, ZCTX(_("TIMLIM^2 minutes")), "2"); + e.addValue(e, ZCTX(_("TIMLIM^3 minutes")), "3"); + e.addValue(e, ZCTX(_("TIMLIM^4 minutes")), "4"); + e.addValue(e, ZCTX(_("TIMLIM^5 minutes")), "5"); + e.addValue(e, ZCTX(_("TIMLIM^6 minutes")), "6"); + e.addValue(e, ZCTX(_("TIMLIM^7 minutes")), "7"); + e.addValue(e, ZCTX(_("TIMLIM^8 minutes")), "8"); + e.addValue(e, ZCTX(_("TIMLIM^9 minutes")), "9"); + e.addValue(e, ZCTX(_("TIMLIM^10 minutes")), "10"); + e.addValue(e, ZCTX(_("TIMLIM^15 minutes")), "15"); + e.addValue(e, ZCTX(_("TIMLIM^20 minutes")), "20"); + e.addValue(e, ZCTX(_("TIMLIM^25 minutes")), "25"); + e.addValue(e, ZCTX(_("TIMLIM^30 minutes")), "30"); + e.addValue(e, ZCTX(_("TIMLIM^40 minutes")), "40"); + e.addValue(e, ZCTX(_("TIMLIM^50 minutes")), "50"); + e.addValue(e, ZCTX(_("TIMLIM^60 minutes")), "60"); + e.addValue(e, ZCTX(_("TIMLIM^Infinite")), "0"); + e.configureXonoticTextSliderValues(e); me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 2.8, e = makeXonoticSliderCheckBox(-1, 0, me.sliderFraglimit, _("Use map specified default"))); - me.checkboxFraglimitMapinfo = e; + me.TD(me, 1, 1, me.labelFraglimit = makeXonoticTextLabel(0, _("Frag limit:"))); + me.TD(me, 1, 2, me.sliderFraglimit = makeXonoticTextSlider("fraglimit_override")); + GameType_ConfigureSliders(me.sliderFraglimit, me.labelFraglimit, _("Frag limit:"), 5, 100, 5, "fraglimit_override"); + + me.gotoRC(me, 15, 0); + me.TD(me, 1, 1, me.labelTeams = makeXonoticTextLabel(0, _("Teams:"))); + me.TD(me, 1, 2, e = me.sliderTeams = makeXonoticTextSlider(string_null)); + e.addValue(e, _("Default"), "0"); + e.addValue(e, _("2 teams"), "2"); + e.addValue(e, _("3 teams"), "3"); + e.addValue(e, _("4 teams"), "4"); + e.configureXonoticTextSliderValues(e); me.TR(me); me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Player slots:"))); me.TD(me, 1, 2, makeXonoticSlider(1, 32, 1, "menu_maxplayers")); @@ -82,37 +129,33 @@ void XonoticServerCreateTab_fill(entity me) e.addValue(e, _("Godlike"), "10"); e.configureXonoticTextSliderValues(e); setDependent(e, "bot_number", 0, -1); - me.TR(me); - me.TR(me); - me.TD(me, 1, 1, e = makeXonoticButton(_("Mutators..."), '0 0 0')); - e.onClick = DialogOpenButton_Click; - e.onClickEntity = main.mutatorsDialog; - main.mutatorsDialog.refilterEntity = me.mapListBox; - me.TD(me, 1, 2, e0 = makeXonoticTextLabel(0, string_null)); + + me.gotoRC(me, me.rows - 3.5, 0); + me.TD(me, 1, 3, e0 = makeXonoticTextLabel(0.5, string_null)); e0.textEntity = main.mutatorsDialog; e0.allowCut = 1; + //e0.allowWrap = 1; me.TR(me); me.TDempty(me, 0.5); - me.TD(me, 1, 2, e = makeXonoticButton(_("Advanced settings..."), '0 0 0')); + me.TD(me, 1, 2, e = makeXonoticButton(_("Mutators"), '0 0 0')); e.onClick = DialogOpenButton_Click; - e.onClickEntity = main.advancedDialog; - main.advancedDialog.refilterEntity = me.mapListBox; + e.onClickEntity = main.mutatorsDialog; + main.mutatorsDialog.refilterEntity = me.mapListBox; - me.gotoRC(me, 0, 3.2); me.setFirstColumn(me, me.currentColumn); + me.gotoRC(me, 0.5, 3.2); me.setFirstColumn(me, me.currentColumn); me.mapListBox = makeXonoticMapList(); - me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Map list:"))); + me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Maplist"))); makeCallback(e, me.mapListBox, me.mapListBox.refilterCallback); me.TR(me); me.TD(me, me.rows - 4, 3, me.mapListBox); - me.gotoRC(me, me.rows - 3, 3.5); - me.TDempty(me, 0.25); + me.gotoRC(me, me.rows - 2.5, 3.2); + me.TDempty(me, 0.375); me.TD(me, 1, 1.125, e = makeXonoticButton(_("Select all"), '0 0 0')); e.onClick = MapList_All; e.onClickEntity = me.mapListBox; me.TD(me, 1, 1.125, e = makeXonoticButton(_("Select none"), '0 0 0')); e.onClick = MapList_None; e.onClickEntity = me.mapListBox; - me.TDempty(me, 0.25); me.gotoRC(me, me.rows - 1, 0); me.TD(me, 1, me.columns, e = makeXonoticButton(_("Start Multiplayer!"), '0 0 0')); @@ -123,45 +166,53 @@ void XonoticServerCreateTab_fill(entity me) me.gameTypeChangeNotify(me); } -void GameType_ConfigureSliders(entity e, entity l, entity l2, string pLabel, float pMin, float pMax, float pStep, string pCvar) -{ - if(pCvar == "") - { - e.configureXonoticSlider(e, pMin, pMax, pStep, string_null); - l.setText(l, pLabel); - e.disabled = l.disabled = l2.disabled = TRUE; - } - else - { - e.configureXonoticSlider(e, pMin, pMax, pStep, pCvar); - l.setText(l, pLabel); - e.disabled = l.disabled = l2.disabled = FALSE; - } -} - void XonoticServerCreateTab_gameTypeChangeNotify(entity me) { // tell the map list to update float gt; - entity e, l, l2; + entity e, l; gt = MapInfo_CurrentGametype(); e = me.sliderFraglimit; - l = me.checkboxFraglimit; - l2 = me.checkboxFraglimitMapinfo; + l = me.labelFraglimit; + + switch(gt) + { + case MAPINFO_TYPE_CTF: GameType_ConfigureSliders(e, l, _("Capture limit:"), 1, 20, 1, "capturelimit_override"); break; + case MAPINFO_TYPE_DOMINATION: GameType_ConfigureSliders(e, l, _("Point limit:"), 50, 500, 10, "g_domination_point_limit"); break; + case MAPINFO_TYPE_KEYHUNT: GameType_ConfigureSliders(e, l, _("Point limit:"), 200, 1500, 50, "g_keyhunt_point_limit"); break; + case MAPINFO_TYPE_LMS: GameType_ConfigureSliders(e, l, _("Lives:"), 3, 50, 1, "g_lms_lives_override"); break; + case MAPINFO_TYPE_RACE: GameType_ConfigureSliders(e, l, _("Laps:"), 1, 25, 1, "g_race_laps_limit"); break; + case MAPINFO_TYPE_NEXBALL: GameType_ConfigureSliders(e, l, _("Goals:"), 1, 50, 1, "g_nexball_goallimit"); break; + case MAPINFO_TYPE_ASSAULT: GameType_ConfigureSliders(e, l, _("Point limit:"), 50, 500, 10, ""); break; + case MAPINFO_TYPE_ONSLAUGHT: GameType_ConfigureSliders(e, l, _("Point limit:"), 50, 500, 10, ""); break; + case MAPINFO_TYPE_CTS: GameType_ConfigureSliders(e, l, _("Point limit:"), 50, 500, 10, ""); break; + case MAPINFO_TYPE_INVASION: GameType_ConfigureSliders(e, l, _("Point limit:"), 5, 0, 5, ""); break; + default: GameType_ConfigureSliders(e, l, _("Frag limit:"), 5, 100, 5, "fraglimit_override"); break; + } + + float x = FALSE; + e = me.sliderTeams; switch(gt) { - case MAPINFO_TYPE_CTF: GameType_ConfigureSliders(e, l, l2, _("Capture limit:"), 1, 20, 1, "capturelimit_override"); break; - case MAPINFO_TYPE_DOMINATION: GameType_ConfigureSliders(e, l, l2, _("Point limit:"), 50, 500, 10, "g_domination_point_limit"); break; - case MAPINFO_TYPE_KEYHUNT: GameType_ConfigureSliders(e, l, l2, _("Point limit:"), 200, 1500, 50, "g_keyhunt_point_limit"); break; - case MAPINFO_TYPE_LMS: GameType_ConfigureSliders(e, l, l2, _("Lives:"), 3, 50, 1, "g_lms_lives_override"); break; - case MAPINFO_TYPE_RACE: GameType_ConfigureSliders(e, l, l2, _("Laps:"), 1, 25, 1, "g_race_laps_limit"); break; - case MAPINFO_TYPE_NEXBALL: GameType_ConfigureSliders(e, l, l2, _("Goals:"), 1, 50, 1, "g_nexball_goallimit"); break; - case MAPINFO_TYPE_ASSAULT: GameType_ConfigureSliders(e, l, l2, _("Point limit:"), 50, 500, 10, ""); break; - case MAPINFO_TYPE_ONSLAUGHT: GameType_ConfigureSliders(e, l, l2, _("Point limit:"), 50, 500, 10, ""); break; - case MAPINFO_TYPE_CTS: GameType_ConfigureSliders(e, l, l2, _("Point limit:"), 50, 500, 10, ""); break; - default: GameType_ConfigureSliders(e, l, l2, _("Frag limit:"), 5, 100, 5, "fraglimit_override"); break; + case MAPINFO_TYPE_CA: x = TRUE; e.configureXonoticTextSlider(e, "g_ca_teams_override"); break; + case MAPINFO_TYPE_DOMINATION: x = TRUE; e.configureXonoticTextSlider(e, "g_domination_teams_override"); break; + case MAPINFO_TYPE_FREEZETAG: x = TRUE; e.configureXonoticTextSlider(e, "g_freezetag_teams_override"); break; + case MAPINFO_TYPE_KEEPAWAY: x = TRUE; e.configureXonoticTextSlider(e, "g_keepaway_teams_override"); break; + case MAPINFO_TYPE_KEYHUNT: x = TRUE; e.configureXonoticTextSlider(e, "g_keyhunt_teams_override"); break; + case MAPINFO_TYPE_TEAM_DEATHMATCH: x = TRUE; e.configureXonoticTextSlider(e, "g_tdm_teams_override"); break; + + default: x = FALSE; e.configureXonoticTextSlider(e, string_null); break; } + e.configureXonoticTextSliderValues(e); + e.value = 0; + me.sliderTeams.disabled = me.labelTeams.disabled = !x; + me.mapListBox.refilter(me.mapListBox); } +void XonoticServerCreateTab_gameTypeSelectNotify(entity me) +{ + me.setFocus(me, me.mapListBox); +} + #endif