X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fcommon%2Futil.qh;h=05e4a4ea2736b4e5c8e92a9859e58ae870391c7b;hp=a9f3a9ffaad2de6267e5f7bf82c7bec733c0b3da;hb=04d1db2c54a2a0ce8691879076be77a79567e25b;hpb=201f6309c92217b63dc34daf004fbb7424096eca diff --git a/qcsrc/common/util.qh b/qcsrc/common/util.qh index a9f3a9ffa..05e4a4ea2 100644 --- a/qcsrc/common/util.qh +++ b/qcsrc/common/util.qh @@ -1,13 +1,18 @@ -#ifndef COMMON_UTIL_H -#define COMMON_UTIL_H +#pragma once + +#ifdef GAMEQC + +vector real_origin(entity ent); +#endif + +IntrusiveList g_saved_cvars; +STATIC_INIT(g_saved_cvars) { g_saved_cvars = IL_NEW(); } // 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 string wordwrap(string s, float l); -#ifndef MENUQC -#ifndef CSQC -void wordwrap_sprint(string s, float l); -#endif +#ifdef SVQC +void wordwrap_sprint(entity to, string s, float l); #endif void wordwrap_cb(string s, float l, void(string) callback); @@ -23,8 +28,8 @@ void depthfirst(entity start, .entity up, .entity downleft, .entity right, void( float median(float a, float b, float c); // converts a number to a string with the indicated number of decimals -// works for up to 10 decimals! string ftos_decimals(float number, float decimals); +string ftos_mindecimals(float number); bool fexists(string f); @@ -59,11 +64,10 @@ const float TIME_FACTOR = 100; string ScoreString(float vflags, float value); -void compressShortVector_init(); vector decompressShortVector(float data); float compressShortVector(vector vec); -#ifndef MENUQC +#ifdef GAMEQC float CheckWireframeBox(entity forent, vector v0, vector dvx, vector dvy, vector dvz); #endif @@ -76,7 +80,7 @@ float cvar_value_issafe(string s); float cvar_settemp(string pKey, string pValue); float cvar_settemp_restore(); -#ifndef MENUQC +#ifdef GAMEQC // modes: 0 = trust q3map2 (_mini images) // 1 = trust tracebox (_radar images) // in both modes, mapinfo's "size" overrides @@ -99,7 +103,7 @@ float almost_equals(float a, float b); float almost_in_bounds(float a, float b, float c); float power2of(float e); -float log2of(float x); +float log2of(float e); vector rgb_to_hsl(vector rgb); vector hsl_to_rgb(vector hsl); @@ -110,8 +114,8 @@ string rgb_to_hexcolor(vector rgb); float boxesoverlap(vector m1, vector m2, vector m3, vector m4); float boxinsidebox(vector smins, vector smaxs, vector bmins, vector bmaxs); -typedef float(string s, vector size) textLengthUpToWidth_widthFunction_t; -typedef float(string s) textLengthUpToLength_lenFunction_t; +USING(textLengthUpToWidth_widthFunction_t, float(string s, vector size)); +USING(textLengthUpToLength_lenFunction_t, float(string s)); float textLengthUpToWidth(string theText, float maxWidth, vector size, textLengthUpToWidth_widthFunction_t tw); string textShortenToWidth(string theText, float maxWidth, vector size, textLengthUpToWidth_widthFunction_t tw); float textLengthUpToLength(string theText, float maxWidth, textLengthUpToLength_lenFunction_t tw); @@ -121,7 +125,7 @@ string getWrappedLine_remaining; string getWrappedLine(float w, vector size, textLengthUpToWidth_widthFunction_t tw); string getWrappedLineLen(float w, textLengthUpToLength_lenFunction_t tw); -float isGametypeInFilter(float gt, float tp, float ts, string pattern); +float isGametypeInFilter(entity gt, float tp, float ts, string pattern); string swapwords(string str, float i, float j); string shufflewords(string str); @@ -145,18 +149,16 @@ string rankings_reply, ladder_reply, lsmaps_reply, maplist_reply, monsterlist_re string records_reply[10]; #endif -#ifndef MENUQC +#ifdef GAMEQC vector healtharmor_maxdamage(float h, float a, float armorblock, int deathtype); // returns vector: maxdamage, armorideal, 1 if fully armored vector healtharmor_applydamage(float a, float armorblock, int deathtype, float damage); // returns vector: take, save, 0 #endif string getcurrentmod(); -#ifndef MENUQC +#ifdef GAMEQC #ifdef CSQC int ReadInt24_t(); -vector ReadInt48_t(); -vector ReadInt72_t(); #else void WriteInt24_t(float dest, float val); void WriteInt48_t(float dest, vector val); @@ -179,6 +181,7 @@ float get_model_parameters_species; string get_model_parameters_sex; float get_model_parameters_weight; float get_model_parameters_age; +bool get_model_parameters_hidden; string get_model_parameters_description; string get_model_parameters_bone_upperbody; string get_model_parameters_bone_weapon; @@ -189,7 +192,7 @@ float get_model_parameters_fixbone; string get_model_parameters_desc; float get_model_parameters(string mod, float skn); // call with string_null to clear; skin -1 means mod is the filename of the txt file and is to be split -#ifndef MENUQC +#ifdef GAMEQC vector NearestPointOnBox(entity box, vector org); #endif @@ -204,7 +207,7 @@ const float XENCODE_LEN = 5; string xencode(float f); float xdecode(string s); -#ifndef MENUQC +#ifdef GAMEQC string strtolower(string s); #endif @@ -213,7 +216,7 @@ string MakeConsoleSafe(string input); // generic shutdown handler void Shutdown(); -#ifndef MENUQC +#ifdef GAMEQC .float skeleton_bones; void Skeleton_SetBones(entity e); // loops through the tags of model v using counter tagnum @@ -230,23 +233,20 @@ float ReadApproxPastTime(); 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); +float cubic_speedfunc(float startspeedfactor, float endspeedfactor, float spd); // 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; +USING(findNextEntityNearFunction_t, entity(entity cur, entity near, entity pass)); +USING(isConnectedFunction_t, float(entity a, entity b, entity pass)); void FindConnectedComponent(entity e, .entity fld, findNextEntityNearFunction_t nxt, isConnectedFunction_t iscon, entity pass); // expand multiple arguments into one argument by stripping parenthesis @@ -258,7 +258,7 @@ void FindConnectedComponent(entity e, .entity fld, findNextEntityNearFunction_t string CCR(string input); -#ifndef MENUQC +#ifdef GAMEQC #ifdef CSQC #define GENTLE (autocvar_cl_gentle || autocvar_cl_gentle_messages) #else @@ -267,25 +267,21 @@ string CCR(string input); #define normal_or_gentle(normal, gentle) (GENTLE ? ((gentle != "") ? gentle : normal) : normal) #endif -#ifndef MENUQC +#ifdef GAMEQC vector animfixfps(entity e, vector a, vector b); #endif -#ifdef SVQC -void dedicated_print(string input); -#endif - -#ifndef MENUQC +#ifdef GAMEQC const float CNT_NORMAL = 1; const float CNT_GAMESTART = 2; const float CNT_IDLE = 3; const float CNT_KILL = 4; const float CNT_RESPAWN = 5; const float CNT_ROUNDSTART = 6; -float Announcer_PickNumber(float type, float num); +entity Announcer_PickNumber(float type, float num); #endif -#ifndef MENUQC +#ifdef GAMEQC int Mod_Q1BSP_SuperContentsFromNativeContents(int nativecontents); int Mod_Q1BSP_NativeContentsFromSuperContents(int supercontents); #endif @@ -298,4 +294,3 @@ vector bezier_quadratic_getderivative(vector a, vector p, vector b, float t); // Returns the correct difference between two always increasing numbers #define COMPARE_INCREASING(to,from) (to < from ? from + to + 2 : to - from) -#endif