]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/menu/xonotic/crosshairpicker.qc
Merge branch 'master' into TimePath/vehicles_cleanup
[xonotic/xonotic-data.pk3dir.git] / qcsrc / menu / xonotic / crosshairpicker.qc
index f79cea51b4ae73c11cf42b603d009a40338c10e9..0ac826a44064cc4752b4c828a2b9c6c119e7a6e0 100644 (file)
@@ -1,13 +1,15 @@
-#ifdef INTERFACE
-CLASS(XonoticCrosshairPicker) EXTENDS(XonoticPicker)
-       METHOD(XonoticCrosshairPicker, configureXonoticCrosshairPicker, void(entity))
+#ifndef CROSSHAIRPICKER_H
+#define CROSSHAIRPICKER_H
+#include "picker.qc"
+CLASS(XonoticCrosshairPicker, 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))
+       METHOD(XonoticCrosshairPicker, cellSelect, void(entity, vector));
+       METHOD(XonoticCrosshairPicker, cellIsValid, bool(entity, vector));
+       METHOD(XonoticCrosshairPicker, cellDraw, void(entity, vector, vector));
 ENDCLASS(XonoticCrosshairPicker)
 entity makeXonoticCrosshairPicker();
 #endif
@@ -16,18 +18,23 @@ entity makeXonoticCrosshairPicker();
 
 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;
 }
@@ -35,11 +42,13 @@ entity makeXonoticCrosshairPicker()
 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)
@@ -49,9 +58,9 @@ 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;
+       vector sz;
        string cross = strcat("/gfx/crosshair", crosshairpicker_cellToCrosshair(me, cell));
        sz = draw_PictureSize(cross);
        sz = globalToBoxSize(sz, me.size);
@@ -61,12 +70,10 @@ void XonoticCrosshairPicker_cellDraw(entity me, vector cell, vector cellPos, flo
        sz.y = sz.x / ar;
        sz = sz * 0.95;
 
-       rgb = '1 1 1';
-
        vector crosshairPos = cellPos + 0.5 * me.realCellSize;
-       draw_Picture(crosshairPos - 0.5 * sz, cross, sz, rgb, me.alpha);
+       draw_Picture(crosshairPos - 0.5 * sz, cross, sz, SKINCOLOR_CROSSHAIRPICKER_CROSSHAIR, SKINALPHA_CROSSHAIRPICKER_CROSSHAIR);
 
        if(cvar("crosshair_dot"))
-               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