]> icculus.org git repositories - divverent/nexuiz.git/blob - data/qcsrc/menu-div0test/menu.qc
adding qcsrc/menu-div0test with a test menu.dat source... may or may not replace...
[divverent/nexuiz.git] / data / qcsrc / menu-div0test / menu.qc
1 ///////////////////////////////////////////////
2 // Menu Source File
3 ///////////////////////
4 // This file belongs to dpmod/darkplaces
5 // AK contains all menu functions (especially the required ones)
6 ///////////////////////////////////////////////
7
8 entity main;
9 float mouseButtonsPressed;
10 vector mousePos;
11 float shiftState;
12 float prevTime;
13 float menuAlpha;
14
15 void SUB_Null() { };
16
17 void() m_init =
18 {
19         dprint_load();
20         GameCommand_Init();
21         
22         draw_setMousePointer("gfx/cursor");
23
24         main = spawnMainWindow(); main.configureMainWindow(main);
25         draw_reset();
26         main.resizeNotify(main, draw_shift, draw_scale, draw_shift, draw_scale);
27         shiftState = 0;
28 };
29
30 void(float key, float ascii) m_keyup =
31 {
32         if(!Menu_Active)
33                 return;
34         draw_reset();
35         main.keyUp(main, key, ascii, shiftState);
36         if(key >= K_MOUSE1 && key <= K_MOUSE10)
37         {
38                 --mouseButtonsPressed;
39                 if(!mouseButtonsPressed)
40                         main.mouseRelease(main, mousePos);
41                 if(mouseButtonsPressed < 0)
42                 {
43                         mouseButtonsPressed = 0;
44                         print("Warning: released an already released button\n");
45                 }
46         }
47         if(key == K_ALT) shiftState -= (shiftState & S_ALT);
48         if(key == K_CTRL) shiftState -= (shiftState & S_CTRL);
49         if(key == K_SHIFT) shiftState -= (shiftState & S_SHIFT);
50 };
51
52 void(float key, float ascii) m_keydown =
53 {
54         if(!Menu_Active)
55                 return;
56         draw_reset();
57         if(!main.keyDown(main, key, ascii, shiftState))
58                 if(key == K_ESCAPE)
59                         if(gamestatus & (GAME_ISSERVER | GAME_CONNECTED)) // don't back out to console only
60                                 m_hide(); // disable menu on unhandled ESC
61         if(key >= K_MOUSE1 && key <= K_MOUSE10)
62         {
63                 if(!mouseButtonsPressed)
64                         main.mousePress(main, mousePos);
65                 ++mouseButtonsPressed;
66                 if(mouseButtonsPressed > 10)
67                 {
68                         mouseButtonsPressed = 10;
69                         print("Warning: pressed an already pressed button\n");
70                 }
71         }
72         if(key == K_ALT) shiftState |= S_ALT;
73         if(key == K_CTRL) shiftState |= S_CTRL;
74         if(key == K_SHIFT) shiftState |= S_SHIFT;
75 };
76
77 void() m_draw =
78 {
79         float t;
80         float realFrametime;
81         t = gettime();
82         realFrametime = frametime = min(0.2, t - prevTime);
83         prevTime = t;
84
85         if(cvar("cl_capturevideo"))
86                 frametime = 1 / cvar("cl_capturevideo_fps"); // make capturevideo work smoothly
87
88         if(Menu_Active)
89                 menuAlpha = min(1, menuAlpha + frametime * 5);
90         else
91                 menuAlpha = max(0, menuAlpha - frametime * 5);
92
93         if(menuAlpha <= 0)
94                 return;
95
96         dprint_load();
97         gamestatus = 0;
98         if(isserver())
99                 gamestatus = gamestatus | GAME_ISSERVER;
100         if(clientstate() == CS_CONNECTED)
101                 gamestatus = gamestatus | GAME_CONNECTED;
102         if(cvar("developer"))
103                 gamestatus = gamestatus | GAME_DEVELOPER;
104
105         draw_reset();
106         draw_alpha *= menuAlpha;
107
108         vector dMouse;
109         dMouse = getmousepos();
110         dMouse *= frametime / realFrametime; // for capturevideo
111         if(dMouse != '0 0 0')
112         {
113                 dMouse = globalToBoxSize(dMouse, draw_scale);
114                 mousePos += dMouse * 1; // TODO use a cvar here
115                 mousePos_x = bound(0, mousePos_x, 1);
116                 mousePos_y = bound(0, mousePos_y, 1);
117                 if(mouseButtonsPressed)
118                         main.mouseDrag(main, mousePos);
119                 else
120                         main.mouseMove(main, mousePos);
121         }
122         main.draw(main);
123         draw_drawMousePointer(mousePos);
124 };
125
126 void() m_display =
127 {
128         Menu_Active = true;
129         setkeydest(KEY_MENU);
130         setmousetarget(MT_MENU);
131
132         main.focusEnter(main);
133 };
134
135 void() m_hide =
136 {
137         Menu_Active = false;
138         setkeydest(KEY_GAME);
139         setmousetarget(MT_CLIENT);
140
141         main.focusLeave(main);
142 };
143
144 void() m_toggle =
145 {
146         if(Menu_Active)
147                 m_hide();
148         else
149                 m_display();
150 };
151
152 void() m_shutdown =
153 {
154         m_hide();
155 };