X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fcommon%2Futil.qh;h=8bc78fcdc7635cfe4703523c0b49f872fe36fcec;hp=1b4eebb3d6773915e55b4c4bbd8c9dcbf8a6c2de;hb=41e9b002169cd742d5eadd4c540f55164af7f120;hpb=fbcbf08f083a9ab14b947849342f495f05ac9b56 diff --git a/qcsrc/common/util.qh b/qcsrc/common/util.qh index 1b4eebb3d6..8bc78fcdc7 100644 --- a/qcsrc/common/util.qh +++ b/qcsrc/common/util.qh @@ -1,6 +1,11 @@ // a dummy macro that prevents the "hanging ;" warning #define ENDS_WITH_CURLY_BRACE +// 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(); } \ @@ -20,6 +25,11 @@ void wordwrap_sprint(string s, float l); #endif void wordwrap_cb(string s, float l, void(string) callback) +#ifndef SVQC +string draw_currentSkin; +string draw_UseSkinFor(string pic); +#endif + // iterative depth-first search, with fields that go "up", "down left" and "right" in a tree // for each element, funcPre is called first, then funcPre and funcPost for all its children, and funcPost last void depthfirst(entity start, .entity up, .entity downleft, .entity right, void(entity, entity) funcPre, void(entity, entity) funcPost, entity pass); @@ -158,13 +168,18 @@ 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); vector decompressShotOrigin(float f); +#ifdef SVQC string rankings_reply, ladder_reply, lsmaps_reply, lsnewmaps_reply, maplist_reply; // cached replies string records_reply[10]; +#endif float RandomSelection_totalweight; float RandomSelection_best_priority; @@ -286,3 +301,37 @@ float InterpretBoolean(string input); // generic shutdown handler void Shutdown(); + +#ifndef MENUQC +.float skeleton_bones; +void Skeleton_SetBones(entity e); +// loops through the tags of model v using counter tagnum +#define FOR_EACH_TAG(v) float tagnum; Skeleton_SetBones(v); for(tagnum = 0; tagnum < v.skeleton_bones; tagnum++, gettaginfo(v, tagnum)) +#endif +#ifdef SVQC +void WriteApproxPastTime(float dst, float t); +#endif +#ifdef CSQC +float ReadApproxPastTime(); +#endif + +// 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);