summaryrefslogtreecommitdiffstats
path: root/TemplePushing.c4s/Misc.c4d/SetupMenu.c4d
diff options
context:
space:
mode:
authorMarkus Mittendrein <git@maxmitti.tk>2019-04-09 18:57:19 +0200
committerMarkus Mittendrein <git@maxmitti.tk>2019-04-09 18:57:19 +0200
commite20d50e7cdcf7222534a3ff9ea154034c9160f28 (patch)
tree548fcf5416fe05d7e97d8336c1d43c2cf0d9727f /TemplePushing.c4s/Misc.c4d/SetupMenu.c4d
parenta3835b2fbd60b07e820a8116810aefb777d9938d (diff)
downloadtempelschubsen-e20d50e7cdcf7222534a3ff9ea154034c9160f28.tar.gz
tempelschubsen-e20d50e7cdcf7222534a3ff9ea154034c9160f28.zip
Add menu to disable certain modes when random mode choice is chosen
Diffstat (limited to 'TemplePushing.c4s/Misc.c4d/SetupMenu.c4d')
-rw-r--r--TemplePushing.c4s/Misc.c4d/SetupMenu.c4d/Script.c80
1 files changed, 73 insertions, 7 deletions
diff --git a/TemplePushing.c4s/Misc.c4d/SetupMenu.c4d/Script.c b/TemplePushing.c4s/Misc.c4d/SetupMenu.c4d/Script.c
index a453b2f..d8987b9 100644
--- a/TemplePushing.c4s/Misc.c4d/SetupMenu.c4d/Script.c
+++ b/TemplePushing.c4s/Misc.c4d/SetupMenu.c4d/Script.c
@@ -11,6 +11,8 @@ static const
local Sections, Modes;
local clonk, setupPlayer;
+local disabledRandomModes;
+
// Selected values
local section, mode;
local selectRandomSection, selectRandomMode;
@@ -34,6 +36,8 @@ protected func Initialize()
if (DefinitionCall(def, "ModeName")) Modes[GetLength(Modes)] = def;
}
mode = Modes[0];
+
+ disabledRandomModes = [];
}
private func ShowSetup()
@@ -98,10 +102,34 @@ private func SelectMode(id selectedMode)
ModeSelectionDone();
}
+private func ShowRandomModeMenu(id selection)
+{
+ CreateMenu(GetID(), clonk, 0, C4MN_Extra_None, 0, 0, C4MN_Style_Context);
+
+ var menuItemIndex = 0;
+ for (var m in Modes)
+ {
+ AddOptionMenuItem(Format("{{%i}} %s", m, m->ModeName()), !disabledRandomModes[menuItemIndex], Format("ToggleRandomMode(%d, %i)", menuItemIndex, m), [SDNE, SDSD][disabledRandomModes[menuItemIndex]]);
+ CheckPreselect(m == selection, menuItemIndex++);
+ }
+
+ clonk->AddMenuItem("$Done$", "ModeSelectionDone()", SDNE);
+ CheckPreselect(!selection, menuItemIndex++);
+ clonk->AddMenuItem("$Back$", "ShowModeMenu()", SBCK);
+}
+
+func ToggleRandomMode(int index, id mode)
+{
+ disabledRandomModes[index] ^= true;
+ ShowMessage();
+ ShowRandomModeMenu(mode);
+}
+
private func SelectRandomMode()
{
selectRandomMode = true;
- ModeSelectionDone();
+ ShowMessage();
+ ShowRandomModeMenu();
}
private func ModeSelectionDone()
@@ -119,15 +147,15 @@ private func ShowSettingsMenu(bool preselect, int selectedSetting)
// Deathmatch entry
AddOptionMenuItem(GetName(0, DTHM), deathmatchEnabled, "SelectSetting(SETTING_Deathmatch)", DTHM);
CheckPreselect(preselect && selectedSetting == SETTING_Deathmatch, menuItemIndex++);
-
+
// Sudden Death entry
AddOptionMenuItem(GetName(0, SDDT), suddendeathEnabled, "SelectSetting(SETTING_SuddenDeath)", SDDT);
CheckPreselect(preselect && selectedSetting == SETTING_SuddenDeath, menuItemIndex++);
-
+
// "Turn in jump" entry
AddOptionMenuItem(GetName(0, RIJP), rotateInJumpEnabled, "SelectSetting(SETTING_RotateInJump)", RIJP);
CheckPreselect(preselect && selectedSetting == SETTING_RotateInJump, menuItemIndex++);
-
+
// Ambience entry
AddOptionMenuItem("$Ambience$", ambienceEnabled, "SelectSetting(SETTING_Ambience)", SABC);
CheckPreselect(preselect && selectedSetting == SETTING_Ambience, menuItemIndex++);
@@ -149,7 +177,7 @@ private func ShowSettingsMenu(bool preselect, int selectedSetting)
clonk->AddMenuItem("$Done$", "SetupDone()", SDNE);
CheckPreselect(!preselect, menuItemIndex++);
- clonk->AddMenuItem("$Back$", "ShowModeMenu()", SBCK);
+ clonk->AddMenuItem("$Back$", ["ShowModeMenu()", "ShowRandomModeMenu()"][selectRandomMode], SBCK);
}
private func SelectSetting(int selectedSetting)
@@ -196,7 +224,26 @@ private func SetupDone()
{
// Apply random selection
if (selectRandomSection) section = Sections[Random(GetLength(Sections))];
- if (selectRandomMode) mode = Modes[Random(GetLength(Modes))];
+ if (selectRandomMode)
+ {
+ var enabledModes = [];
+ var i = 0;
+ for(var m in Modes)
+ {
+ if(!disabledRandomModes[i])
+ {
+ enabledModes[GetLength(enabledModes)] = m;
+ }
+ ++i;
+ }
+
+ if(GetLength(enabledModes) <= 0)
+ {
+ enabledModes = Modes;
+ }
+
+ mode = enabledModes[Random(GetLength(enabledModes))];
+ }
selectRandomSection = selectRandomMode = false;
// Show final setup message and start the game
ShowMessage();
@@ -256,7 +303,26 @@ private func GetMessage()
var msgMode;
if (selectRandomMode)
{
- msgMode = Format("$Mode$: {{SRND}} $Random$");
+ var i = 0, enabledCount = 0;
+ var modesString = "";
+ for(var m in Modes)
+ {
+ if(disabledRandomModes[i++])
+ {
+ continue;
+ }
+ if(modesString != "")
+ {
+ modesString = Format("%s, ", modesString);
+ if(enabledCount == 2)
+ {
+ modesString = Format("%s|", modesString);
+ }
+ }
+ modesString = Format("%s%s", modesString, m->ModeName());
+ ++enabledCount;
+ }
+ msgMode = Format("$Mode$: {{SRND}} $Random$: %s", modesString);
}
else
{