]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/menu/xonotic/dialog_multiplayer_profile.qc
Header police
[xonotic/xonotic-data.pk3dir.git] / qcsrc / menu / xonotic / dialog_multiplayer_profile.qc
1 #include "dialog_multiplayer_profile.qh"
2 #ifndef DIALOG_MULTIPLAYER_PROFILE_H
3 #define DIALOG_MULTIPLAYER_PROFILE_H
4 #include "tab.qc"
5 CLASS(XonoticProfileTab, XonoticTab)
6         METHOD(XonoticProfileTab, fill, void(entity));
7         METHOD(XonoticProfileTab, draw, void(entity));
8         ATTRIB(XonoticProfileTab, intendedWidth, float, 0.9)
9         ATTRIB(XonoticProfileTab, rows, float, 23)
10         ATTRIB(XonoticProfileTab, columns, float, 6.1) // added extra .2 for center space
11         ATTRIB(XonoticProfileTab, playerNameLabel, entity, NULL)
12         ATTRIB(XonoticProfileTab, playerNameLabelAlpha, float, SKINALPHA_HEADER)
13 ENDCLASS(XonoticProfileTab)
14 entity makeXonoticProfileTab();
15 #endif
16
17 #ifdef IMPLEMENTATION
18 entity makeXonoticProfileTab()
19 {
20         entity me;
21         me = NEW(XonoticProfileTab);
22         me.configureDialog(me);
23         return me;
24 }
25 void XonoticProfileTab_draw(entity me)
26 {
27         if(cvar_string("_cl_name") == "Player")
28                 me.playerNameLabel.alpha = ((mod(time * 2, 2) < 1) ? 1 : 0);
29         else
30                 me.playerNameLabel.alpha = me.playerNameLabelAlpha;
31         SUPER(XonoticProfileTab).draw(me);
32 }
33 void XonoticProfileTab_fill(entity me)
34 {
35         entity e, pms, label, box;
36         float i;
37         entity profileApplyButton = makeXonoticCommandButton(_("Apply immediately"), '0 0 0',
38                 "color -1 -1;"
39                 "name \"$_cl_name\";"
40                 "playermodel $_cl_playermodel;"
41                 "playerskin $_cl_playerskin;"
42                 "sendcvar cl_allow_uidtracking;"
43                 "sendcvar cl_allow_uid2name;"
44                 , COMMANDBUTTON_APPLY);
45         profileApplyButton.disableOnClick = true;
46
47         // ==============
48         //  NAME SECTION
49         // ==============
50         me.gotoRC(me, 0.5, 0);
51                 me.TD(me, 1, 3, me.playerNameLabel = makeXonoticHeaderLabel(_("Name")));
52
53         me.gotoRC(me, 1.5, 0);
54                 me.TD(me, 1, 3, label = makeXonoticTextLabel(0.5, string_null));
55                         label.allowCut = 1;
56                         label.allowColors = 1;
57                         label.alpha = 1;
58                         label.isBold = true;
59                         label.fontSize = SKINFONTSIZE_TITLE;
60
61         me.gotoRC(me, 2.5, 0);
62                 me.TD(me, 1, 3.0, box = makeXonoticInputBox_T(1, "_cl_name",
63                         _("Name under which you will appear in the game")));
64                         box.forbiddenCharacters = "\r\n\\\"$"; // don't care, isn't getting saved
65                         box.maxLength = -127; // negative means encoded length in bytes
66                         box.saveImmediately = 0;  // Sorry, can't do this, it spams "name" commands.
67                         box.enableClearButton = 0;
68                         box.applyButton = profileApplyButton;
69                         label.textEntity = box;
70         me.TR(me);
71                 me.TD(me, 5, 1, e = makeXonoticColorpicker(box));
72                 me.TD(me, 5, 2, e = makeXonoticCharmap(box));
73
74         // ===============
75         //  MODEL SECTION
76         // ===============
77         //me.gotoRC(me, 0.5, 3.1); me.setFirstColumn(me, me.currentColumn); // TOP RIGHT
78         //me.gotoRC(me, 9, 3.1); me.setFirstColumn(me, me.currentColumn); // BOTTOM RIGHT
79         me.gotoRC(me, 9, 0); me.setFirstColumn(me, me.currentColumn); // BOTTOM LEFT
80                 me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Model")));
81
82         me.TR(me);
83                 //me.TDempty(me, 0); // MODEL LEFT, COLOR RIGHT
84                 me.TDempty(me, 1); // MODEL RIGHT, COLOR LEFT
85                 pms = makeXonoticPlayerModelSelector();
86                 me.TD(me, 1, 0.3, e = makeXonoticButton("<<", '0 0 0'));
87                         e.onClick = PlayerModelSelector_Prev_Click;
88                         e.onClickEntity = pms;
89                         e.applyButton = profileApplyButton;
90                 me.TD(me, 11.5, 1.4, pms);
91                 me.TD(me, 1, 0.3, e = makeXonoticButton(">>", '0 0 0'));
92                         e.onClick = PlayerModelSelector_Next_Click;
93                         e.onClickEntity = pms;
94                         e.applyButton = profileApplyButton;
95
96         //me.setFirstColumn(me, me.currentColumn + 2); // MODEL LEFT, COLOR RIGHT
97         me.gotoRC(me, me.currentRow, 0); me.setFirstColumn(me, me.currentColumn); // MODEL RIGHT, COLOR LEFT
98         me.TR(me);
99                 me.TD(me, 1, 1, e = makeXonoticHeaderLabel(_("Glowing color")));
100                 for(i = 0; i < 15; ++i)
101                 {
102                         if(mod(i, 5) == 0)
103                                 me.TR(me);
104                         me.TDNoMargin(me, 1, 0.2, e = makeXonoticColorButton(1, 0, i), '0 1 0');
105                                 e.applyButton = profileApplyButton;
106                 }
107         me.TR(me);
108         me.TR(me);
109                 me.TD(me, 1, 1, e = makeXonoticHeaderLabel(_("Detail color")));
110                 for(i = 0; i < 15; ++i)
111                 {
112                         if(mod(i, 5) == 0)
113                                 me.TR(me);
114                         me.TDNoMargin(me, 1, 0.2, e = makeXonoticColorButton(2, 1, i), '0 1 0');
115                                 e.applyButton = profileApplyButton;
116                 }
117
118         // ====================
119         //  STATISTICS SECTION
120         // ====================
121         me.gotoRC(me, 0.5, 3.1); me.setFirstColumn(me, me.currentColumn); // TOP RIGHT
122         //me.gotoRC(me, 9, 3.1); me.setFirstColumn(me, me.currentColumn); // BOTTOM RIGHT
123         //me.gotoRC(me, 9, 0); me.setFirstColumn(me, me.currentColumn); // BOTTOM LEFT
124                 me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Statistics")));
125
126         me.TR(me);
127                 me.TDempty(me, 0.25);
128                 me.TD(me, 1, 2.5, e = makeXonoticCheckBox(0, "cl_allow_uidtracking", _("Allow player statistics to track your client")));
129                         e.applyButton = profileApplyButton;
130         me.TR(me);
131                 me.TDempty(me, 0.25);
132                 me.TD(me, 1, 2.5, e = makeXonoticCheckBox(0, "cl_allow_uid2name", _("Allow player statistics to use your nickname")));
133                         e.applyButton = profileApplyButton;
134                         setDependent(e, "cl_allow_uidtracking", 1, 1);
135         me.gotoRC(me, 4, 3.1); // TOP RIGHT
136         //me.gotoRC(me, 12.5, 3.1); // BOTTOM RIGHT
137         //me.gotoRC(me, 12.5, 0); // BOTTOM LEFT
138                 me.TDempty(me, 0.25);
139                 me.TD(me, 9, 2.5, statslist = makeXonoticStatsList());
140                 //setDependent(statslist, "cl_allow_uidtracking", 1, 1);
141
142         // =================
143         //  COUNTRY SECTION
144         // =================
145         me.gotoRC(me, 16, 3.1); me.setFirstColumn(me, me.currentColumn); // BOTTOM SECTION, TOP POS
146         //me.gotoRC(me, 13.5, 3.1); me.setFirstColumn(me, me.currentColumn); // BOTTOM SECTION, TOP POS
147         //me.gotoRC(me, 0.5, 3.1); me.setFirstColumn(me, me.currentColumn); // TOP SECTION, TOP POS
148                 me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Country")));
149
150         me.TR(me);
151                 me.TDempty(me, 0.5);
152                 me.TD(me, 4.5, 2, e = makeXonoticLanguageList()); // todo: cl_country: create proper country list
153
154
155         // ================
156         //  GENDER SECTION
157         // ================
158         me.gotoRC(me, 13.5, 3.1); me.setFirstColumn(me, me.currentColumn); // BOTTOM SECTION, TOP POS
159         //me.gotoRC(me, 19.5, 3.1); me.setFirstColumn(me, me.currentColumn); // BOTTOM SECTION, BOTTOM POS
160         //me.gotoRC(me, 6.5, 3.1); me.setFirstColumn(me, me.currentColumn); // TOP SECTION, BOTTOM POS
161         #if 0
162                 me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Gender:")));
163                 me.TD(me, 1, 2, e = makeXonoticTextSlider("_cl_gender"));
164                         e.addValue(e, _("Undisclosed"), "0");
165                         e.addValue(e, _("Female"), "1");
166                         e.addValue(e, _("Male"), "2");
167                         e.configureXonoticTextSliderValues(e);
168         #else
169                         me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Gender")));
170                 me.TR(me);
171                         #define GENDERWIDTH_OFFSET 0.25
172                         #define GENDERWIDTH_LENGTH 2.5
173                         #define GENDERWIDTH_ITEM (GENDERWIDTH_LENGTH / 3)
174                         me.TDempty(me, GENDERWIDTH_OFFSET);
175                         me.TD(me, 1, GENDERWIDTH_ITEM, e = makeXonoticRadioButton(3, "_cl_gender", "2", _("Female")));
176                         me.TD(me, 1, GENDERWIDTH_ITEM, e = makeXonoticRadioButton(3, "_cl_gender", "1", _("Male")));
177                         me.TD(me, 1, GENDERWIDTH_ITEM, e = makeXonoticRadioButton(3, "_cl_gender", "0", _("Undisclosed")));
178         #endif
179
180         me.gotoRC(me, me.rows - 1, 0);
181                 me.TD(me, 1, me.columns, profileApplyButton);
182 }
183 #endif