]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/menu/item/dialog.qc
Optimize vehicle impact code by only calling vlen() if damage would be taken
[xonotic/xonotic-data.pk3dir.git] / qcsrc / menu / item / dialog.qc
1 #include "dialog.qh"
2
3 #include "borderimage.qh"
4 #include "button.qh"
5 #include "nexposee.qh"
6
7         void Dialog_Close(entity button, entity me)
8         {
9                 me.close(me);
10         }
11
12         void Dialog_fill(entity me)
13         {}
14
15         void Dialog_addItemSimple(entity me, float row, float col, float rowspan, float colspan, entity e, vector v)
16         {
17                 vector o, s;
18                 o = me.itemOrigin + eX * (col          * me.itemSpacing.x) + eY * (row          * me.itemSpacing.y);
19                 s = me.itemSize   + eX * ((colspan - 1) * me.itemSpacing.x) + eY * ((rowspan - 1) * me.itemSpacing.y);
20                 o.x -= 0.5 * (me.itemSpacing.x - me.itemSize.x) * v.x;
21                 s.x +=       (me.itemSpacing.x - me.itemSize.x) * v.x;
22                 o.y -= 0.5 * (me.itemSpacing.y - me.itemSize.y) * v.y;
23                 s.y +=       (me.itemSpacing.y - me.itemSize.y) * v.y;
24                 me.addItem(me, e, o, s, 1);
25         }
26
27         void Dialog_gotoRC(entity me, float row, float col)
28         {
29                 me.currentRow = row;
30                 me.currentColumn = col;
31         }
32
33         void Dialog_TR(entity me)
34         {
35                 me.currentRow += 1;
36                 me.currentColumn = me.firstColumn;
37         }
38
39         void Dialog_TD(entity me, float rowspan, float colspan, entity e)
40         {
41                 me.addItemSimple(me, me.currentRow, me.currentColumn, rowspan, colspan, e, '0 0 0');
42                 me.currentColumn += colspan;
43         }
44
45         void Dialog_TDNoMargin(entity me, float rowspan, float colspan, entity e, vector v)
46         {
47                 me.addItemSimple(me, me.currentRow, me.currentColumn, rowspan, colspan, e, v);
48                 me.currentColumn += colspan;
49         }
50
51         void Dialog_setFirstColumn(entity me, float col)
52         {
53                 me.firstColumn = col;
54         }
55
56         void Dialog_TDempty(entity me, float colspan)
57         {
58                 me.currentColumn += colspan;
59         }
60
61         void Dialog_configureDialog(entity me)
62         {
63                 float absWidth, absHeight;
64
65                 if (me.isTabRoot)
66                 {
67                         me.frame = NEW(BorderImage);
68                         me.frame.configureBorderImage(me.frame, me.title, me.titleFontSize, me.color, me.backgroundImage, me.borderLines * me.titleHeight);
69                         me.frame.zoomedOutTitleBarPosition = me.zoomedOutTitleBarPosition;
70                         me.frame.zoomedOutTitleBar = me.zoomedOutTitleBar;
71                         me.frame.alpha = me.alpha;
72                         me.addItem(me, me.frame, '0 0 0', '1 1 0', 1);
73                 }
74
75                 if (!me.titleFontSize) me.titleHeight = 0;  // no title bar
76
77                 absWidth = me.intendedWidth * conwidth;
78                 absHeight = me.borderLines * me.titleHeight + me.marginTop + me.rows * me.rowHeight + (me.rows - 1) * me.rowSpacing + me.marginBottom;
79                 me.itemOrigin  = eX * (me.marginLeft / absWidth)
80                     + eY * ((me.borderLines * me.titleHeight + me.marginTop) / absHeight);
81                 me.itemSize    = eX * ((1 - (me.marginLeft + me.marginRight + me.columnSpacing * (me.columns - 1)) / absWidth) / me.columns)
82                     + eY * (me.rowHeight / absHeight);
83                 me.itemSpacing = me.itemSize
84                     + eX * (me.columnSpacing / absWidth)
85                     + eY * (me.rowSpacing / absHeight);
86                 me.intendedHeight = absHeight / conheight;
87                 me.currentRow = -1;
88                 me.currentColumn = -1;
89
90                 me.fill(me);
91
92                 if (me.isTabRoot && me.closable && me.borderLines > 0)
93                 {
94                         entity closebutton;
95                         closebutton = me.closeButton = me.frame.closeButton = NEW(Button);
96                         closebutton.configureButton(closebutton, "", 0, me.closeButtonImage);
97                         closebutton.onClick = Dialog_Close;
98                         closebutton.onClickEntity = me;
99                         closebutton.srcMulti = 0;
100                         me.addItem(me, closebutton, '0 0 0', '1 1 0', 1);  // put it as LAST
101                 }
102         }
103
104         void Dialog_close(entity me)
105         {
106                 if (me.parent.instanceOfNexposee)
107                 {
108                         ExposeeCloseButton_Click(me, me.parent);
109                         if(me.hideMenuOnClose)
110                         {
111                                 me.hideMenuOnClose = false;
112                                 m_hide();
113                         }
114                 }
115                 else if (me.parent.instanceOfModalController)
116                         DialogCloseButton_Click(me, me);
117         }
118
119         float Dialog_keyDown(entity me, float key, float ascii, float shift)
120         {
121                 if (me.closable)
122                 {
123                         if (key == K_ESCAPE)
124                         {
125                                 m_play_click_sound(MENU_SOUND_CLOSE);
126                                 me.close(me);
127                                 return 1;
128                         }
129                 }
130                 float r = SUPER(Dialog).keyDown(me, key, ascii, shift);
131                 if (!me.closable && key == K_ESCAPE)
132                         return 1;
133                 return r;
134         }