1 ///////////////////////////////////////////////
3 ///////////////////////
4 // This file belongs to dpmod/darkplaces
5 // AK contains all menu functions (especially the required ones)
6 ///////////////////////////////////////////////
8 float mouseButtonsPressed;
22 draw_setMousePointer("gfx/cursor");
24 main = spawnMainWindow(); main.configureMainWindow(main);
26 main.resizeNotify(main, draw_shift, draw_scale, draw_shift, draw_scale);
31 void(float key, float ascii) m_keyup =
36 main.keyUp(main, key, ascii, menuShiftState);
37 if(key >= K_MOUSE1 && key <= K_MOUSE3)
39 --mouseButtonsPressed;
40 if(!mouseButtonsPressed)
41 main.mouseRelease(main, menuMousePos);
42 if(mouseButtonsPressed < 0)
44 mouseButtonsPressed = 0;
45 print("Warning: released an already released button\n");
48 if(key == K_ALT) menuShiftState -= (menuShiftState & S_ALT);
49 if(key == K_CTRL) menuShiftState -= (menuShiftState & S_CTRL);
50 if(key == K_SHIFT) menuShiftState -= (menuShiftState & S_SHIFT);
53 void(float key, float ascii) m_keydown =
62 e.keyGrabbed(e, key, ascii);
67 if(!main.keyDown(main, key, ascii, menuShiftState))
69 if(gamestatus & (GAME_ISSERVER | GAME_CONNECTED)) // don't back out to console only
70 m_hide(); // disable menu on unhandled ESC
71 if(key >= K_MOUSE1 && key <= K_MOUSE3)
72 if(!mouseButtonsPressed)
73 main.mousePress(main, menuMousePos);
75 if(key >= K_MOUSE1 && key <= K_MOUSE3)
77 ++mouseButtonsPressed;
78 if(mouseButtonsPressed > 10)
80 mouseButtonsPressed = 10;
81 print("Warning: pressed an already pressed button\n");
84 if(key == K_ALT) menuShiftState |= S_ALT;
85 if(key == K_CTRL) menuShiftState |= S_CTRL;
86 if(key == K_SHIFT) menuShiftState |= S_SHIFT;
94 realFrametime = frametime = min(0.2, t - menuPrevTime);
99 if(getkeydest() != KEY_MENU || getmousetarget() != MT_MENU)
102 if(cvar("cl_capturevideo"))
103 frametime = 1 / cvar("cl_capturevideo_fps"); // make capturevideo work smoothly
105 prevMenuAlpha = menuAlpha;
107 menuAlpha = min(1, menuAlpha + frametime * 5);
109 menuAlpha = max(0, menuAlpha - frametime * 5);
113 if(prevMenuAlpha > 0)
114 main.initializeDialog(main, main.firstChild);
121 gamestatus = gamestatus | GAME_ISSERVER;
122 if(clientstate() == CS_CONNECTED)
123 gamestatus = gamestatus | GAME_CONNECTED;
124 if(cvar("developer"))
125 gamestatus = gamestatus | GAME_DEVELOPER;
128 draw_alpha *= menuAlpha;
131 dMouse = getmousepos();
132 dMouse *= frametime / realFrametime; // for capturevideo
133 if(dMouse != '0 0 0')
135 dMouse = globalToBoxSize(dMouse, draw_scale);
136 menuMousePos += dMouse * 1; // TODO use a cvar here
137 menuMousePos_x = bound(0, menuMousePos_x, 1);
138 menuMousePos_y = bound(0, menuMousePos_y, 1);
139 if(mouseButtonsPressed)
140 main.mouseDrag(main, menuMousePos);
142 main.mouseMove(main, menuMousePos);
145 draw_drawMousePointer(menuMousePos);
154 if(mouseButtonsPressed)
155 main.mouseRelease(main, menuMousePos);
156 mouseButtonsPressed = 0;
158 setkeydest(KEY_MENU);
159 setmousetarget(MT_MENU);
161 main.focusEnter(main);
167 setkeydest(KEY_GAME);
168 setmousetarget(MT_CLIENT);
170 main.focusLeave(main);
186 void(string itemname) m_goto =
189 if(itemname == "") // this can be called by GameCommand
195 e = findstring(NULL, name, itemname);
196 if(e && e.parent == main)
198 main.initializeDialog(main, e);