Xonotic QuakeC
The free, fast arena FPS with crisp movement and a wide array of weapons
picker.qc
Go to the documentation of this file.
1#include "picker.qh"
2
3.bool pressed;
4
6{
7 entity me;
8 me = NEW(XonoticPicker);
9 me.configureXonoticPicker(me);
10 return me;
11}
12
14{
15 me.realCellSize = eX / me.columns + eY / me.rows;
16}
17
19{
20 vector prevFocusedCell = me.focusedCell;
21 me.focusedCell_x = floor(coords.x * me.columns);
22 me.focusedCell_y = floor(coords.y * me.rows);
23
24 if(me.focusedCell.x < 0 || me.focusedCell.y < 0 ||
25 me.focusedCell.x >= me.columns || me.focusedCell.y >= me.rows)
26 {
27 me.focusedCell = '-1 -1 0';
28 return 0;
29 }
30
31 if(me.focusedCell != prevFocusedCell)
32 me.focusedCellAlpha = SKINALPHA_LISTBOX_FOCUSED;
33
34 return 1;
35}
36
38{
39 return me.mouseMove(me, coords);
40}
41
43{
44 this.mouseMove(this, pos);
45
46 if(this.focusedCell.x >= 0)
47 {
48 this.pressed = 1;
49 this.pressedCell = this.focusedCell;
50 }
51
52 return true;
53}
54
56{
57 if(!me.pressed)
58 return 0;
59
60 me.mouseMove(me, coords);
61
62 if(me.focusedCell == me.pressedCell)
63 me.cellSelect(me, me.focusedCell);
64
65 me.pressed = 0;
66 return 1;
67}
68
69float XonoticPicker_keyDown(entity me, float key, float ascii, float shift)
70{
71 switch(key)
72 {
73 case K_END:
74 case K_KP_END:
75 // lower left cell then left arrow to select the last valid cell
76 me.focusedCell = eY * (me.rows - 1);
77 case K_LEFTARROW:
78 case K_KP_LEFTARROW:
79 me.moveFocus(me, me.focusedCell, '-1 0 0');
80 return 1;
81 case K_HOME:
82 case K_KP_HOME:
83 // upper right cell then right arrow to select the first valid cell
84 me.focusedCell = eX * (me.columns - 1);
85 case K_RIGHTARROW:
86 case K_KP_RIGHTARROW:
87 me.moveFocus(me, me.focusedCell, '1 0 0');
88 return 1;
89 case K_UPARROW:
90 case K_KP_UPARROW:
91 me.moveFocus(me, me.focusedCell, '0 -1 0');
92 return 1;
93 case K_DOWNARROW:
94 case K_KP_DOWNARROW:
95 me.moveFocus(me, me.focusedCell, '0 1 0');
96 return 1;
97 case K_ENTER:
98 case K_KP_ENTER:
99 case K_INS:
100 case K_KP_INS:
101 me.cellSelect(me, me.focusedCell);
102 return 1;
103 }
104 return 0;
105}
106
107void XonoticPicker_moveFocus(entity me, vector initialCell, vector step)
108{
109 me.focusedCell_x = mod(me.focusedCell.x + step.x + me.columns, me.columns);
110 me.focusedCell_y = mod(me.focusedCell.y + step.y + me.rows, me.rows);
111
112 if(me.focusedCell != initialCell) // Recursion break
113 if(!me.cellIsValid(me, me.focusedCell))
114 me.moveFocus(me, initialCell, step);
115
116 me.focusedCellAlpha = SKINALPHA_LISTBOX_FOCUSED;
117}
118
120{
121 me.selectedCell = cell;
122}
123
125{
126 return true;
127}
128
130{
131}
132
134{
135 float save;
136
137 me.focusable = !me.disabled;
138
139 save = draw_alpha;
140 if(me.disabled)
141 draw_alpha *= me.disabledAlpha;
142
143 vector cell, cellPos;
144 cell = '0 0 0';
145 cellPos = '0 0 0';
146
147 for(cell_y = 0; cell.y < me.rows; ++cell.y)
148 {
149 cellPos_y = mod(cell.y, me.rows) / me.rows;
150 for(cell_x = 0; cell.x < me.columns; ++cell.x)
151 {
152 if(!me.cellIsValid(me, cell))
153 continue;
154
155 cellPos_x = mod(cell.x, me.columns) / me.columns;
156
157 if(cell == me.selectedCell)
158 draw_Fill(cellPos, me.realCellSize, SKINCOLOR_LISTBOX_SELECTED, SKINALPHA_LISTBOX_SELECTED);
159 else if(cell == me.focusedCell && me.focused)
160 {
161 if(!me.pressed || me.focusedCell == me.pressedCell)
162 {
163 me.focusedCellAlpha = getFadedAlpha(me.focusedCellAlpha, SKINALPHA_LISTBOX_FOCUSED, SKINFADEALPHA_LISTBOX_FOCUSED);
164 draw_Fill(cellPos, me.realCellSize, SKINCOLOR_LISTBOX_FOCUSED, me.focusedCellAlpha);
165 }
166 }
167
168 me.cellDraw(me, cell, cellPos);
169 }
170 }
171
172 draw_alpha = save;
173
174 SUPER(XonoticPicker).draw(me);
175}
var entity(vector mins, vector maxs,.entity tofield) findbox_tofield_OrFallback
vector pressedCell
Definition picker.qh:29
virtual void mousePress()
Definition picker.qc:42
vector focusedCell
Definition picker.qh:26
virtual void mouseMove()
float K_KP_RIGHTARROW
Definition keycodes.qc:60
float K_UPARROW
Definition keycodes.qc:15
float K_DOWNARROW
Definition keycodes.qc:16
float K_RIGHTARROW
Definition keycodes.qc:18
float K_KP_UPARROW
Definition keycodes.qc:64
float K_KP_LEFTARROW
Definition keycodes.qc:57
float K_ENTER
Definition keycodes.qc:8
float K_KP_HOME
Definition keycodes.qc:62
float K_KP_DOWNARROW
Definition keycodes.qc:53
float K_LEFTARROW
Definition keycodes.qc:17
float K_HOME
Definition keycodes.qc:41
float K_KP_ENTER
Definition keycodes.qc:74
float K_END
Definition keycodes.qc:42
float K_INS
Definition keycodes.qc:37
float K_KP_END
Definition keycodes.qc:51
float K_KP_INS
Definition keycodes.qc:49
void draw_Fill(vector theOrigin, vector theSize, vector theColor, float theAlpha)
Definition draw.qc:97
float draw_alpha
Definition draw.qh:9
float getFadedAlpha(float currentAlpha, float startAlpha, float targetAlpha)
Definition util.qc:816
float mod(float val, float m)
float floor(float f)
#define NEW(cname,...)
Definition oo.qh:117
#define SUPER(cname)
Definition oo.qh:231
#define METHOD(cname, name, prototype)
Definition oo.qh:269
bool pressed
Definition picker.qc:3
entity makeXonoticPicker()
Definition picker.qc:5
void XonoticPicker_cellDraw(entity me, vector cell, vector cellPos)
Definition picker.qc:129
float XonoticPicker_mouseDrag(entity me, vector coords)
Definition picker.qc:37
bool XonoticPicker_cellIsValid(entity me, vector cell)
Definition picker.qc:124
void XonoticPicker_draw(entity me)
Definition picker.qc:133
void XonoticPicker_moveFocus(entity me, vector initialCell, vector step)
Definition picker.qc:107
void XonoticPicker_configureXonoticPicker(entity me)
Definition picker.qc:13
float XonoticPicker_keyDown(entity me, float key, float ascii, float shift)
Definition picker.qc:69
float XonoticPicker_mouseRelease(entity me, vector coords)
Definition picker.qc:55
void XonoticPicker_cellSelect(entity me, vector cell)
Definition picker.qc:119
float XonoticPicker_mouseMove(entity me, vector coords)
Definition picker.qc:18
vector
Definition self.qh:92
const vector eY
Definition vector.qh:45
const vector eX
Definition vector.qh:44