-#ifdef INTERFACE
-CLASS(XonoticCrosshairPicker) EXTENDS(XonoticPicker)
- METHOD(XonoticCrosshairPicker, configureXonoticCrosshairPicker, void(entity))
-
- ATTRIB(XonoticCrosshairPicker, rows, float, 3)
- ATTRIB(XonoticCrosshairPicker, columns, float, 12)
-
- METHOD(XonoticCrosshairPicker, cellSelect, void(entity))
- METHOD(XonoticCrosshairPicker, cellIsValid, bool(entity, vector))
- METHOD(XonoticCrosshairPicker, cellDraw, void(entity, vector, vector, float))
-ENDCLASS(XonoticCrosshairPicker)
-entity makeXonoticCrosshairPicker();
-#endif
-
-#ifdef IMPLEMENTATION
+#include "crosshairpicker.qh"
string crosshairpicker_cellToCrosshair(entity me, vector cell)
{
- float crosshair = 31 + cell.y * me.columns + cell.x;
-
- if (crosshair >= 31 && crosshair < 31 + me.columns * me.rows)
- return ftos(crosshair);
- else
+ if(cell.x < 0 || cell.x >= me.columns || cell.y < 0 || cell.y >= me.rows)
return "";
+ return ftos(31 + cell.y * me.columns + cell.x);
+}
+
+vector crosshairpicker_crosshairToCell(entity me, string crosshair_str)
+{
+ float crosshair = stof(crosshair_str) - 31;
+ if(crosshair - floor(crosshair) > 0)
+ return '-1 -1 0';
+ return mod(crosshair, me.columns) * eX + floor(crosshair / me.columns) * eY;
}
entity makeXonoticCrosshairPicker()
{
entity me;
- me = spawnXonoticCrosshairPicker();
+ me = NEW(XonoticCrosshairPicker);
me.configureXonoticCrosshairPicker(me);
return me;
}
void XonoticCrosshairPicker_configureXonoticCrosshairPicker(entity me)
{
me.configureXonoticPicker(me);
+ SUPER(XonoticCrosshairPicker).cellSelect(me, crosshairpicker_crosshairToCell(me, cvar_string("crosshair")));
}
-void XonoticCrosshairPicker_cellSelect(entity me)
+void XonoticCrosshairPicker_cellSelect(entity me, vector cell)
{
cvar_set("crosshair", crosshairpicker_cellToCrosshair(me, me.focusedCell));
+ SUPER(XonoticCrosshairPicker).cellSelect(me, me.focusedCell);
}
bool XonoticCrosshairPicker_cellIsValid(entity me, vector cell)
return true;
}
-void XonoticCrosshairPicker_cellDraw(entity me, vector cell, vector cellPos, float highlightedTime)
+void XonoticCrosshairPicker_cellDraw(entity me, vector cell, vector cellPos)
{
- vector sz, rgb;
- string cross = strcat("/gfx/crosshair", crosshairpicker_cellToCrosshair(me, cell));
- sz = draw_PictureSize(cross);
+ string s = strcat("/gfx/crosshair", crosshairpicker_cellToCrosshair(me, cell));
+ vector sz = draw_PictureSize(s);
sz = globalToBoxSize(sz, me.size);
float ar = sz.x / sz.y;
sz.x = me.realCellSize.x;
sz.y = sz.x / ar;
- sz = sz * 0.95;
-
- rgb = '1 1 1';
+ sz *= 0.95;
vector crosshairPos = cellPos + 0.5 * me.realCellSize;
- draw_Picture(crosshairPos - 0.5 * sz, cross, sz, rgb, me.alpha);
+ draw_Picture(crosshairPos - 0.5 * sz, s, sz, SKINCOLOR_CROSSHAIRPICKER_CROSSHAIR, SKINALPHA_CROSSHAIRPICKER_CROSSHAIR);
if(cvar("crosshair_dot"))
- {
- if(cvar("crosshair_dot_color_custom") && (cvar_string("crosshair_dot_color") != "0"))
- rgb = stov(cvar_string("crosshair_dot_color"));
-
- draw_Picture(crosshairPos - 0.5 * sz * cvar("crosshair_dot_size"), "/gfx/crosshairdot", sz * cvar("crosshair_dot_size"), rgb, me.alpha);
- }
+ draw_Picture(crosshairPos - 0.5 * sz * cvar("crosshair_dot_size"), "/gfx/crosshairdot", sz * cvar("crosshair_dot_size"), SKINCOLOR_CROSSHAIRPICKER_CROSSHAIR, SKINALPHA_CROSSHAIRPICKER_CROSSHAIR);
}
-#endif