]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/debug.qh
Add strfree to reduce explicit use of strunzone/string_null
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / debug.qh
index cdba3af6e0bd24c4c644e150ea8f6e2b69b26649..983b073b406c8cfb93de92a31002d5dd1359fa56 100644 (file)
@@ -394,14 +394,16 @@ CLASS(DebugText3d, Object)
        // reusing existing fields
        ATTRIB(DebugText3d, origin, vector);
        ATTRIB(DebugText3d, message, string); // the text (i wanted to use the .text field but then this whole macro-based-inheritance thing shat itself)
+       ATTRIB(DebugText3d, health, float); // text alignment (recycled field)
        ATTRIB(DebugText3d, hit_time, float); // when it was created
        ATTRIB(DebugText3d, fade_rate, float); // how fast is should disappear
        ATTRIB(DebugText3d, velocity, vector);
 
-       CONSTRUCTOR(DebugText3d, vector pos, string msg, float fade_rate_, vector vel) {
+       CONSTRUCTOR(DebugText3d, vector pos, string msg, float align, float fade_rate_, vector vel) {
                CONSTRUCT(DebugText3d);
                this.origin = pos;
                this.message = strzone(msg);
+               this.health = align;
                this.hit_time = time;
                this.fade_rate = fade_rate_;
                this.velocity = vel;
@@ -409,7 +411,7 @@ CLASS(DebugText3d, Object)
        }
 
        DESTRUCTOR(DebugText3d) {
-               strunzone(this.message);
+               strfree(this.message);
        }
 
        void DebugText3d_draw2d(DebugText3d this) {
@@ -421,12 +423,15 @@ CLASS(DebugText3d, Object)
                        return;
                }
 
+               int size = 8;
                vector screen_pos = project_3d_to_2d(this.origin) + since_created * this.velocity;
+               float align = this.health;
+               if (align > 0)
+                       screen_pos.x -= stringwidth(this.message, true, size * '1 1 0') * min(1, align);
                if (screen_pos.z < 0) return; // behind camera
                screen_pos.z = 0;
 
                vector rgb = '1 1 0';
-               int size = 8;
                drawcolorcodedstring2_builtin(screen_pos, this.message, size * '1 1 0', rgb, alpha_, DRAWFLAG_NORMAL);
        }
        ATTRIB(DebugText3d, draw2d, void(DebugText3d), DebugText3d_draw2d);
@@ -435,9 +440,10 @@ ENDCLASS(DebugText3d)
 NET_HANDLE(debug_text_3d, bool is_new) {
        vector pos = ReadVector();
        string msg = ReadString();
+       float align = ReadFloat();
        float duration = ReadFloat();
        vector vel = ReadVector();
-       make_impure(NEW(DebugText3d, pos, msg, 1 / duration, vel));
+       make_impure(NEW(DebugText3d, pos, msg, align, 1 / duration, vel));
        return true;
 }
 
@@ -445,26 +451,21 @@ NET_HANDLE(debug_text_3d, bool is_new) {
 
 #ifdef SVQC
 
-AUTOCVAR(debug_text_3d_default_duration, float, 10, "Default duration for debug_text_3d()");
-AUTOCVAR(debug_text_3d_default_velocity, vector, '0 -10 0', "Default velocity for debug_text_3d() in screen coords (X and Y from top left)");
-
-STATIC_INIT(debug_text_3d) {
-       // HACK: these cvars are only used in macros so they give unused warning unless the macros are expanded
-       autocvar_debug_text_3d_default_duration = autocvar_debug_text_3d_default_duration;
-       autocvar_debug_text_3d_default_velocity = autocvar_debug_text_3d_default_velocity;
-}
-
+// can't use autocvars because they give unused warning unless the macros are expanded
 #define debug_text_3d(...) EVAL(OVERLOAD(debug_text_3d, __VA_ARGS__))
-#define debug_text_3d_2(pos, msg) debug_text_3d_3(pos, msg, autocvar_debug_text_3d_default_duration);
-#define debug_text_3d_3(pos, msg, dur) debug_text_3d_4(pos, msg, dur, autocvar_debug_text_3d_default_velocity);
-#define debug_text_3d_4(pos, msg, dur, vel) debug_text_3d_fn(pos, msg, dur, vel);
+#define debug_text_3d_2(pos, msg) debug_text_3d_3(pos, msg, cvar("debug_text_3d_default_align"))
+#define debug_text_3d_3(pos, msg, align) debug_text_3d_4(pos, msg, align, cvar("debug_text_3d_default_duration"))
+#define debug_text_3d_4(pos, msg, align, dur) debug_text_3d_5(pos, msg, align, dur, stov(cvar_string("debug_text_3d_default_velocity")))
+#define debug_text_3d_5(pos, msg, align, dur, vel) debug_text_3d_fn(pos, msg, align, dur, vel)
 
-void debug_text_3d_fn(vector pos, string msg, float duration, vector velocity) {
+ERASEABLE
+void debug_text_3d_fn(vector pos, string msg, float align, float duration, vector vel) {
        WriteHeader(MSG_BROADCAST, debug_text_3d);
        WriteVector(MSG_BROADCAST, pos);
        WriteString(MSG_BROADCAST, msg);
+       WriteFloat(MSG_BROADCAST, align);
        WriteFloat(MSG_BROADCAST, duration);
-       WriteVector(MSG_BROADCAST, velocity);
+       WriteVector(MSG_BROADCAST, vel);
 }
 
 #endif // SVQC