X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fdebug.qh;h=41c5d3017eada07992e8ba6ae102827da85525d4;hb=69eda62d02bc02ff50547bad514af3f7ce487413;hp=e05d67fcd16a2aa5d25e505be0557761b4b53443;hpb=4f7ec68c9a21f078e92d213813cc05ab36b49145;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/debug.qh b/qcsrc/common/debug.qh index e05d67fcd..41c5d3017 100644 --- a/qcsrc/common/debug.qh +++ b/qcsrc/common/debug.qh @@ -1,5 +1,9 @@ #pragma once +#ifdef CSQC +#include +#endif + // This includes some functions useful for debugging. // Some more bot-specific ones are in server/pathlib/debug.qc. @@ -394,14 +398,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); + SetResourceAmount(this, RESOURCE_HEALTH, align); this.hit_time = time; this.fade_rate = fade_rate_; this.velocity = vel; @@ -409,7 +415,7 @@ CLASS(DebugText3d, Object) } DESTRUCTOR(DebugText3d) { - strunzone(this.message); + strfree(this.message); } void DebugText3d_draw2d(DebugText3d this) { @@ -421,12 +427,15 @@ CLASS(DebugText3d, Object) return; } + int size = 8; vector screen_pos = project_3d_to_2d(this.origin) + since_created * this.velocity; + float align = GetResourceAmount(this, RESOURCE_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 +444,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; } @@ -447,16 +457,19 @@ NET_HANDLE(debug_text_3d, bool is_new) { // 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, cvar("debug_text_3d_default_duration")) -#define debug_text_3d_3(pos, msg, dur) debug_text_3d_4(pos, msg, dur, stov(cvar_string("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