X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Futil.qh;h=2bdaf1f1d034b3fabb161e7bbb074bb2f41edc0d;hb=33c5e35731acb088008db89e456b43a1f5d6af2f;hp=76b2f28d1a71afad3fce9740b3109acde4139848;hpb=bdbce87c90e361d0fbdad2bb30b097d6b7c9ce6b;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/util.qh b/qcsrc/common/util.qh index 76b2f28d1..2bdaf1f1d 100644 --- a/qcsrc/common/util.qh +++ b/qcsrc/common/util.qh @@ -1,7 +1,13 @@ // a dummy macro that prevents the "hanging ;" warning #define ENDS_WITH_CURLY_BRACE -#define ACCUMULATE_FUNCTION(func,otherfunc) \ +#ifdef HAVE_YO_DAWG_CPP +// TODO make ascii art pic of xzibit +// YO DAWG! +// I HERD YO LIEK MACROS +// SO I PUT A MACRO DEFINITION IN YO MACRO DEFINITION +// SO YO CAN EXPAND MACROS WHILE YO EXPAND MACROS +# define ACCUMULATE_FUNCTION(func,otherfunc) \ #ifdef func \ void __merge__##otherfunc() { func(); otherfunc(); } \ #undef func \ @@ -9,6 +15,27 @@ #else \ #define func otherfunc \ #endif +# define CALL_ACCUMULATED_FUNCTION(func) \ + func() +#else +# define ACCUMULATE_FUNCTION(func,otherfunc) \ + .void _ACCUMULATE_##func##__##otherfunc; +void ACCUMULATE_call(string func) +{ + float i; + float n = numentityfields(); + string funcprefix = strcat("_ACCUMULATE_", func, "__"); + float funcprefixlen = strlen(funcprefix); + for(i = 0; i < n; ++i) + { + string name = entityfieldname(i); + if(substring(name, 0, funcprefixlen) == funcprefix) + callfunction(substring(name, funcprefixlen, -1)); + } +} +# define CALL_ACCUMULATED_FUNCTION(func) \ + ACCUMULATE_call(#func) +#endif // this returns a tempstring containing a copy of s with additional \n newlines added, it also replaces \n in the text with a real newline // NOTE: s IS allowed to be a tempstring @@ -18,7 +45,7 @@ string wordwrap(string s, float l); void wordwrap_sprint(string s, float l); #endif #endif -void wordwrap_cb(string s, float l, void(string) callback) +void wordwrap_cb(string s, float l, void(string) callback); #ifndef SVQC string draw_currentSkin; @@ -74,6 +101,7 @@ string mmssss(float t); string ScoreString(float vflags, float value); +float dotproduct(vector a, vector b); vector cross(vector a, vector b); void compressShortVector_init(); @@ -112,8 +140,6 @@ vector mi_pictexcoord3; // texcoords of the image corners (after transforming, t void get_mi_min_max_texcoords(float mode); #endif -#define FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(x) void reference_##x() { x = x; } - float almost_equals(float a, float b); float almost_in_bounds(float a, float b, float c); @@ -163,6 +189,9 @@ vector solve_quadratic(float a, float b, float c); // z = 1 if a real solution exists, 0 if not // if no real solution exists, x contains the real part and y the imaginary part of the complex solutions x+iy and x-iy +vector solve_shotdirection(vector myorg, vector myvel, vector eorg, vector evel, float spd, float newton_style); +vector get_shotvelocity(vector myvel, vector mydir, float spd, float newton_style, float mi, float ma); + void check_unacceptable_compiler_bugs(); float compressShotOrigin(vector v); @@ -195,8 +224,8 @@ void WriteInt24_t(float dest, float val); #endif // the NULL function -const var void func_null(void); FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(func_null) -const var string string_null; +var void func_null(void); +var string string_null; float float2range11(float f); float float2range01(float f); @@ -277,7 +306,7 @@ float xdecode(string s); float lowestbit(float f); #ifdef CSQC -entity ReadCSQCEntity() +entity ReadCSQCEntity(); #endif #ifndef MENUQC @@ -309,3 +338,24 @@ float ReadApproxPastTime(); // execute-stuff-next-frame subsystem void execute_next_frame(); void queue_to_execute_next_frame(string s); + +// for marking written-to values as unused where it's a good idea to do this +noref float unused_float; + + + +// a function f with: +// f(0) = 0 +// f(1) = 1 +// f'(0) = startspeedfactor +// f'(1) = endspeedfactor +float cubic_speedfunc(float startspeedfactor, float endspeedfactor, float x); + +// checks whether f'(x) = 0 anywhere from 0 to 1 +// because if this is the case, the function is not usable for platforms +// as it may exceed 0..1 bounds, or go in reverse +float cubic_speedfunc_is_sane(float startspeedfactor, float endspeedfactor); + +typedef entity(entity cur, entity near, entity pass) findNextEntityNearFunction_t; +typedef float(entity a, entity b, entity pass) isConnectedFunction_t; +void FindConnectedComponent(entity e, .entity fld, findNextEntityNearFunction_t nxt, isConnectedFunction_t iscon, entity pass);