1 ///////////////////////////////////////////////
3 ///////////////////////
4 // This file belongs to dpmod/darkplaces
5 // AK contains all menu functions (especially the required ones)
6 ///////////////////////////////////////////////
8 float mouseButtonsPressed;
14 float menuLoadedMaplist;
22 menuLoadedMaplist = 0;
24 if(!MapInfo_FilterGametype(MAPINFO_TYPE_ALL))
26 menuLoadedMaplist = 1;
30 if(cvar("developer") == 42)
31 draw_currentSkin = "qcsrc/menu-div0test/xawskin";
33 draw_currentSkin = "qcsrc/menu-div0test/defaultskin";
34 // TODO load SKIN constants from file later
36 draw_setMousePointer("cursor");
38 main = spawnMainWindow(); main.configureMainWindow(main);
40 main.resizeNotify(main, draw_shift, draw_scale, draw_shift, draw_scale);
45 m_display(); // delayed menu display
48 void(float key, float ascii) m_keyup =
50 if(!menuLoadedMaplist)
55 main.keyUp(main, key, ascii, menuShiftState);
56 if(key >= K_MOUSE1 && key <= K_MOUSE3)
58 --mouseButtonsPressed;
59 if(!mouseButtonsPressed)
60 main.mouseRelease(main, menuMousePos);
61 if(mouseButtonsPressed < 0)
63 mouseButtonsPressed = 0;
64 print("Warning: released an already released button\n");
67 if(key == K_ALT) menuShiftState -= (menuShiftState & S_ALT);
68 if(key == K_CTRL) menuShiftState -= (menuShiftState & S_CTRL);
69 if(key == K_SHIFT) menuShiftState -= (menuShiftState & S_SHIFT);
72 void(float key, float ascii) m_keydown =
74 if(!menuLoadedMaplist)
83 e.keyGrabbed(e, key, ascii);
88 if(!main.keyDown(main, key, ascii, menuShiftState))
90 if(gamestatus & (GAME_ISSERVER | GAME_CONNECTED)) // don't back out to console only
91 m_hide(); // disable menu on unhandled ESC
92 if(key >= K_MOUSE1 && key <= K_MOUSE3)
93 if(!mouseButtonsPressed)
94 main.mousePress(main, menuMousePos);
96 if(key >= K_MOUSE1 && key <= K_MOUSE3)
98 ++mouseButtonsPressed;
99 if(mouseButtonsPressed > 10)
101 mouseButtonsPressed = 10;
102 print("Warning: pressed an already pressed button\n");
105 if(key == K_ALT) menuShiftState |= S_ALT;
106 if(key == K_CTRL) menuShiftState |= S_CTRL;
107 if(key == K_SHIFT) menuShiftState |= S_SHIFT;
114 if(!menuLoadedMaplist)
120 realFrametime = frametime = min(0.2, t - menuPrevTime);
125 if(getkeydest() != KEY_MENU || getmousetarget() != MT_MENU)
128 if(cvar("cl_capturevideo"))
129 frametime = 1 / cvar("cl_capturevideo_fps"); // make capturevideo work smoothly
131 prevMenuAlpha = menuAlpha;
133 menuAlpha = min(1, menuAlpha + frametime * 5);
135 menuAlpha = max(0, menuAlpha - frametime * 5);
139 if(prevMenuAlpha > 0)
140 main.initializeDialog(main, main.firstChild);
147 gamestatus = gamestatus | GAME_ISSERVER;
148 if(clientstate() == CS_CONNECTED)
149 gamestatus = gamestatus | GAME_CONNECTED;
150 if(cvar("developer"))
151 gamestatus = gamestatus | GAME_DEVELOPER;
154 draw_alpha *= menuAlpha;
157 dMouse = getmousepos();
158 dMouse *= frametime / realFrametime; // for capturevideo
159 if(dMouse != '0 0 0')
161 dMouse = globalToBoxSize(dMouse, draw_scale);
162 menuMousePos += dMouse * 1; // TODO use a cvar here
163 menuMousePos_x = bound(0, menuMousePos_x, 1);
164 menuMousePos_y = bound(0, menuMousePos_y, 1);
165 if(mouseButtonsPressed)
166 main.mouseDrag(main, menuMousePos);
168 main.mouseMove(main, menuMousePos);
171 draw_drawMousePointer(menuMousePos);
179 setkeydest(KEY_MENU);
180 setmousetarget(MT_MENU);
182 if(!menuLoadedMaplist)
185 if(mouseButtonsPressed)
186 main.mouseRelease(main, menuMousePos);
187 mouseButtonsPressed = 0;
189 main.focusEnter(main);
190 main.showNotify(main);
196 setkeydest(KEY_GAME);
197 setmousetarget(MT_CLIENT);
199 if(!menuLoadedMaplist)
202 main.focusLeave(main);
203 main.hideNotify(main);
219 void(string itemname) m_goto =
222 if(!menuLoadedMaplist)
224 if(itemname == "") // this can be called by GameCommand
226 if(gamestatus & (GAME_ISSERVER | GAME_CONNECTED))
230 main.initializeDialog(main, main.firstChild);
236 e = findstring(NULL, name, itemname);
237 if(e && e.parent == main)
240 main.initializeDialog(main, e);