Fix maplist overlapping with all / none buttons
[voretournament/voretournament.git] / data / qcsrc / menu / voret / dialog_multiplayer_create.c
1 #ifdef INTERFACE\r
2 CLASS(VoretServerCreateTab) EXTENDS(VoretTab)\r
3         METHOD(VoretServerCreateTab, fill, void(entity))\r
4         METHOD(VoretServerCreateTab, gameTypeChangeNotify, void(entity))\r
5         ATTRIB(VoretServerCreateTab, title, string, "Create")\r
6         ATTRIB(VoretServerCreateTab, intendedWidth, float, 0.9)\r
7         ATTRIB(VoretServerCreateTab, rows, float, 22)\r
8         ATTRIB(VoretServerCreateTab, columns, float, 6.5)\r
9 \r
10         ATTRIB(VoretServerCreateTab, mapListBox, entity, NULL)\r
11         ATTRIB(VoretServerCreateTab, sliderFraglimit, entity, NULL)\r
12         ATTRIB(VoretServerCreateTab, sliderTimelimit, entity, NULL)\r
13         ATTRIB(VoretServerCreateTab, checkboxFraglimit, entity, NULL)\r
14         ATTRIB(VoretServerCreateTab, checkboxFraglimitMapinfo, entity, NULL)\r
15 ENDCLASS(VoretServerCreateTab)\r
16 entity makeVoretServerCreateTab();\r
17 #endif\r
18 \r
19 #ifdef IMPLEMENTATION\r
20 \r
21 entity makeVoretServerCreateTab()\r
22 {\r
23         entity me;\r
24         me = spawnVoretServerCreateTab();\r
25         me.configureDialog(me);\r
26         return me;\r
27 }\r
28 \r
29 void fillVoretServerCreateTab(entity me)\r
30 {\r
31         entity e, e0;\r
32         float n;\r
33 \r
34         me.TR(me);\r
35                 me.TD(me, 1, 0.5, e = makeVoretTextLabel(0, "Single:"));\r
36                 n = 5.5;\r
37                 me.TD(me, 1, me.columns / n, e = makeVoretGametypeButton(1, "g_dm", "DM"));\r
38                         e0 = e;\r
39                 me.TD(me, 1, me.columns / n, e = makeVoretGametypeButton(1, "g_lms", "LMS"));\r
40                         if(e.checked) e0 = NULL;\r
41                 me.TD(me, 1, me.columns / n, e = makeVoretGametypeButton(1, "g_arena", "Arena"));\r
42                         if(e.checked) e0 = NULL;\r
43                 me.TD(me, 1, me.columns / n, e = makeVoretGametypeButton(1, "g_race", "Race"));\r
44                         if(e.checked) e0 = NULL;\r
45                 me.TD(me, 1, me.columns / n, e = makeVoretGametypeButton(1, "g_cts", "Race CTS"));\r
46                         if(e.checked) e0 = NULL;\r
47         me.TR(me);\r
48                 me.TD(me, 1, 0.5, e = makeVoretTextLabel(0, "Team:"));\r
49                 n = 7.7;\r
50                 me.TD(me, 1, me.columns / n, e = makeVoretGametypeButton(1, "g_tdm", "TDM"));\r
51                         if(e.checked) e0 = NULL;\r
52                 me.TD(me, 1, me.columns / n, e = makeVoretGametypeButton(1, "g_ctf", "CTF"));\r
53                         if(e.checked) e0 = NULL;\r
54                 me.TD(me, 1, me.columns / n, e = makeVoretGametypeButton(1, "g_ca", "CA"));\r
55                         if(e.checked) e0 = NULL;\r
56                 me.TD(me, 1, me.columns / n, e = makeVoretGametypeButton(1, "g_domination", "Domination"));\r
57                         if(e.checked) e0 = NULL;\r
58                 me.TD(me, 1, me.columns / n, e = makeVoretGametypeButton(1, "g_keyhunt", "Key Hunt"));\r
59                         if(e.checked) e0 = NULL;\r
60                 me.TD(me, 1, me.columns / n, e = makeVoretGametypeButton(1, "g_assault", "Assault"));\r
61                         if(e.checked) e0 = NULL;\r
62                 me.TD(me, 1, me.columns / n, e = makeVoretGametypeButton(1, "g_onslaught", "Onslaught"));\r
63                         if(e.checked) e0 = NULL;\r
64         me.TR(me);\r
65                 me.TD(me, 1, 0.5, e = makeVoretTextLabel(0, "Other:"));\r
66                 n = 1.1;\r
67                 me.TD(me, 1, me.columns / n, e = makeVoretGametypeButton(1, "g_rpg", "Role Play"));\r
68                         if(e.checked) e0 = NULL;\r
69                 if(e0)\r
70                 {\r
71                         //print("NO CHECK\n");\r
72                         e0.setChecked(e0, 1);\r
73                 }\r
74         me.TR(me);\r
75         me.TR(me);\r
76                 me.mapListBox = makeVoretMapList();\r
77                 me.TD(me, 1, 3, e = makeVoretTextLabel(0, "Map list:"));\r
78                         makeCallback(e, me.mapListBox, me.mapListBox.refilterCallback);\r
79         me.TR(me);\r
80                 me.TD(me, me.rows - 7, 3, me.mapListBox);\r
81         me.gotoRC(me, me.rows - 2, 0);\r
82                 me.TDempty(me, 0.5);\r
83                 me.TD(me, 1, 1, e = makeVoretButton("All", '0 0 0'));\r
84                         e.onClick = MapList_All;\r
85                         e.onClickEntity = me.mapListBox;\r
86                 me.TD(me, 1, 1, e = makeVoretButton("None", '0 0 0'));\r
87                         e.onClick = MapList_None;\r
88                         e.onClickEntity = me.mapListBox;\r
89                 me.TDempty(me, 0.5);\r
90 \r
91         me.gotoRC(me, 4, 3.5); me.setFirstColumn(me, me.currentColumn);\r
92                 me.TD(me, 1, 3, e = makeVoretTextLabel(0, "Match settings:"));\r
93         me.TR(me);\r
94                 me.sliderTimelimit = makeVoretSlider(1.0, 60.0, 0.5, "timelimit_override");\r
95                 me.TD(me, 1, 1, e = makeVoretSliderCheckBox(0, 1, me.sliderTimelimit, "Time limit:"));\r
96                 me.TD(me, 1, 2, me.sliderTimelimit);\r
97         me.TR(me);\r
98                 me.TDempty(me, 0.2);\r
99                 me.TD(me, 1, 2.8, e = makeVoretSliderCheckBox(-1, 0, me.sliderTimelimit, "Use map specified default"));\r
100         me.TR(me);\r
101                 me.sliderFraglimit = makeVoretSlider(1.0, 2000.0, 5, "fraglimit_override");\r
102                 me.TD(me, 1, 1, e = makeVoretSliderCheckBox(0, 1, me.sliderFraglimit, "Point limit:"));\r
103                         me.checkboxFraglimit = e;\r
104                 me.TD(me, 1, 2, me.sliderFraglimit);\r
105         me.TR(me);\r
106                 me.TDempty(me, 0.2);\r
107                 me.TD(me, 1, 2.8, e = makeVoretSliderCheckBox(-1, 0, me.sliderFraglimit, "Use map specified default"));\r
108                         me.checkboxFraglimitMapinfo = e;\r
109         me.TR(me);\r
110         me.TR(me);\r
111                 me.TD(me, 1, 1, e = makeVoretTextLabel(0, "Player slots:"));\r
112                 me.TD(me, 1, 2, makeVoretSlider(1, 32, 1, "menu_maxplayers"));\r
113         me.TR(me);\r
114                 me.TD(me, 1, 1, e = makeVoretTextLabel(0, "Number of bots:"));\r
115                 me.TD(me, 1, 2, makeVoretSlider(0, 9, 1, "bot_number"));\r
116         me.TR(me);\r
117                 me.TDempty(me, 0.2);\r
118                 me.TD(me, 1, 0.8, e = makeVoretTextLabel(0, "Bot skill:"));\r
119                         setDependent(e, "bot_number", 0, -1);\r
120                 me.TD(me, 1, 2, e = makeVoretTextSlider("skill"));\r
121                         e.addValue(e, "(no skill)", "0");\r
122                         e.addValue(e, "Vegetable", "1");\r
123                         e.addValue(e, "Insect", "2");\r
124                         e.addValue(e, "Mouse", "3");\r
125                         e.addValue(e, "Badger", "4");\r
126                         e.addValue(e, "Fox", "5");\r
127                         e.addValue(e, "Tiger", "6");\r
128                         e.addValue(e, "Crocodile", "7");\r
129                         e.addValue(e, "Dinosaur", "8");\r
130                         e.addValue(e, "Dragon", "9");\r
131                         e.addValue(e, "Vore Lord", "10");\r
132                         e.configureVoretTextSliderValues(e);\r
133                         setDependent(e, "bot_number", 0, -1);\r
134         me.TR(me);\r
135                 me.TDempty(me, 0.2);\r
136                 me.TD(me, 1, 0.8, e = makeVoretTextLabel(0, "Bot names:"));\r
137                 me.TD(me, 1, 0.7, e = makeVoretInputBox(1, "bot_prefix"));\r
138                         setDependent(e, "bot_number", 0, -1);\r
139                 me.TD(me, 1, 0.6, e = makeVoretTextLabel(0.5, "Shadow"));\r
140                         setDependent(e, "bot_number", 0, -1);\r
141                 me.TD(me, 1, 0.7, e = makeVoretInputBox(1, "bot_suffix"));\r
142                         setDependent(e, "bot_number", 0, -1);\r
143         me.TR(me);\r
144         me.TR(me);\r
145                 me.TDempty(me, 0.5);\r
146                 me.TD(me, 1, 2, e = makeVoretButton("Advanced settings...", '0 0 0'));\r
147                         e.onClick = DialogOpenButton_Click;\r
148                         e.onClickEntity = main.advancedDialog;\r
149                         main.advancedDialog.refilterEntity = me.mapListBox;\r
150                 me.TR(me);\r
151                 me.TR(me);\r
152                 me.TD(me, 1, 1, e = makeVoretButton("Mutators...", '0 0 0'));\r
153                         e.onClick = DialogOpenButton_Click;\r
154                         e.onClickEntity = main.mutatorsDialog;\r
155                         main.mutatorsDialog.refilterEntity = me.mapListBox;\r
156                 me.TD(me, 1, 2, e0 = makeVoretTextLabel(0, string_null));\r
157                         e0.textEntity = main.mutatorsDialog;\r
158                         e0.allowCut = 1;\r
159 \r
160         me.gotoRC(me, me.rows - 1, 0);\r
161                 me.TD(me, 1, me.columns, e = makeVoretButton("Start Match!", '0 0 0'));\r
162                         e.onClick = MapList_LoadMap;\r
163                         e.onClickEntity = me.mapListBox;\r
164                         me.mapListBox.startButton = e;\r
165 \r
166         me.gameTypeChangeNotify(me);\r
167 }\r
168 \r
169 void GameType_ConfigureSliders(entity e, entity l, entity l2, string pLabel, float pMin, float pMax, float pStep, string pCvar)\r
170 {\r
171         if(pCvar == "")\r
172         {\r
173                 e.configureVoretSlider(e, pMin, pMax, pStep, string_null);\r
174                 l.setText(l, pLabel);\r
175                 e.disabled = l.disabled = l2.disabled = TRUE;\r
176         }\r
177         else\r
178         {\r
179                 e.configureVoretSlider(e, pMin, pMax, pStep, pCvar);\r
180                 l.setText(l, pLabel);\r
181                 e.disabled = l.disabled = l2.disabled = FALSE;\r
182         }\r
183 }\r
184 \r
185 void gameTypeChangeNotifyVoretServerCreateTab(entity me)\r
186 {\r
187         // tell the map list to update\r
188         float gt;\r
189         entity e, l, l2;\r
190         gt = MapInfo_CurrentGametype();\r
191         e = me.sliderFraglimit;\r
192         l = me.checkboxFraglimit;\r
193         l2 = me.checkboxFraglimitMapinfo;\r
194         switch(gt)\r
195         {\r
196                 case MAPINFO_TYPE_CTF:        GameType_ConfigureSliders(e, l, l2, "Capture limit:",   1,   20, 1, "capturelimit_override");     break;\r
197                 case MAPINFO_TYPE_DOMINATION: GameType_ConfigureSliders(e, l, l2, "Point limit:",    50,  500, 10, "g_domination_point_limit"); break;\r
198                 case MAPINFO_TYPE_KEYHUNT:    GameType_ConfigureSliders(e, l, l2, "Point limit:",   200, 1500, 50, "g_keyhunt_point_limit");    break;\r
199                 case MAPINFO_TYPE_LMS:        GameType_ConfigureSliders(e, l, l2, "Lives:",           3,   50,  1, "g_lms_lives_override");     break;\r
200                 case MAPINFO_TYPE_RACE:       GameType_ConfigureSliders(e, l, l2, "Laps:",            1,   25,  1, "g_race_laps_limit");        break;\r
201                 case MAPINFO_TYPE_ASSAULT:    GameType_ConfigureSliders(e, l, l2, "Point limit:",    50,  500, 10, "");                         break;\r
202                 case MAPINFO_TYPE_ONSLAUGHT:  GameType_ConfigureSliders(e, l, l2, "Point limit:",    50,  500, 10, "");                         break;\r
203                 case MAPINFO_TYPE_CTS:        GameType_ConfigureSliders(e, l, l2, "Point limit:",    50,  500, 10, "");                         break;\r
204                 case MAPINFO_TYPE_RPG:        GameType_ConfigureSliders(e, l, l2, "Point limit:",    50,  500, 10, "");                         break;\r
205                 default:                      GameType_ConfigureSliders(e, l, l2, "Frag limit:",      5,  100,  5, "fraglimit_override");       break;\r
206         }\r
207         me.mapListBox.refilter(me.mapListBox);\r
208 }\r
209 \r
210 #endif\r