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_MOUSE10)
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_MOUSE10)
72 if(!mouseButtonsPressed)
73 main.mousePress(main, menuMousePos);
75 if(key >= K_MOUSE1 && key <= K_MOUSE10)
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);
98 if(getkeydest() != KEY_MENU || getmousetarget() != MT_MENU)
101 if(cvar("cl_capturevideo"))
102 frametime = 1 / cvar("cl_capturevideo_fps"); // make capturevideo work smoothly
104 prevMenuAlpha = menuAlpha;
106 menuAlpha = min(1, menuAlpha + frametime * 5);
108 menuAlpha = max(0, menuAlpha - frametime * 5);
112 if(prevMenuAlpha > 0)
113 main.initializeDialog(main, main.firstChild);
120 gamestatus = gamestatus | GAME_ISSERVER;
121 if(clientstate() == CS_CONNECTED)
122 gamestatus = gamestatus | GAME_CONNECTED;
123 if(cvar("developer"))
124 gamestatus = gamestatus | GAME_DEVELOPER;
127 draw_alpha *= menuAlpha;
130 dMouse = getmousepos();
131 dMouse *= frametime / realFrametime; // for capturevideo
132 if(dMouse != '0 0 0')
134 dMouse = globalToBoxSize(dMouse, draw_scale);
135 menuMousePos += dMouse * 1; // TODO use a cvar here
136 menuMousePos_x = bound(0, menuMousePos_x, 1);
137 menuMousePos_y = bound(0, menuMousePos_y, 1);
138 if(mouseButtonsPressed)
139 main.mouseDrag(main, menuMousePos);
141 main.mouseMove(main, menuMousePos);
144 draw_drawMousePointer(menuMousePos);
150 setkeydest(KEY_MENU);
151 setmousetarget(MT_MENU);
153 main.focusEnter(main);
159 setkeydest(KEY_GAME);
160 setmousetarget(MT_CLIENT);
162 main.focusLeave(main);
178 void(string itemname) m_goto =
187 e = findstring(NULL, name, itemname);
188 if(e && e.parent == main)
190 main.initializeDialog(main, e);