X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Futil.qc;h=a087c9faa07851db1bb0134161223772de880381;hb=923c8fc119df8210450991c59b8567e2352e9412;hp=3e380ca696d06e0a66b0d3bde2423c997fccaa93;hpb=e9f30b97435c6afe3d6911f21e1f4fd1b97e93da;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/util.qc b/qcsrc/common/util.qc index 3e380ca69..a087c9faa 100644 --- a/qcsrc/common/util.qc +++ b/qcsrc/common/util.qc @@ -6,7 +6,7 @@ #include "../client/mutators/events.qh" #include "mapinfo.qh" #include "notifications.qh" - #include "deathtypes/all.qh" + #include #elif defined(MENUQC) #elif defined(SVQC) #include "constants.qh" @@ -14,10 +14,30 @@ #include "../server/defs.qh" #include "../server/mutators/events.qh" #include "notifications.qh" - #include "deathtypes/all.qh" + #include #include "mapinfo.qh" #endif +#ifndef MENUQC +/* +* Get "real" origin, in worldspace, even if ent is attached to something else. +*/ +vector real_origin(entity ent) +{ + entity e; + vector v = ((ent.absmin + ent.absmax) * 0.5); + + e = ent.tag_entity; + while(e) + { + v = v + ((e.absmin + e.absmax) * 0.5); + e = e.tag_entity; + } + + return v; +} +#endif + string wordwrap_buffer; void wordwrap_buffer_put(string s) @@ -564,7 +584,6 @@ void get_mi_min_max_texcoords(float mode) float cvar_settemp(string tmp_cvar, string tmp_value) { float created_saved_value; - entity e; created_saved_value = 0; @@ -580,14 +599,16 @@ float cvar_settemp(string tmp_cvar, string tmp_value) return 0; } - for(e = world; (e = find(e, classname, "saved_cvar_value")); ) - if(e.netname == tmp_cvar) - created_saved_value = -1; // skip creation + FOREACH_ENTITY_CLASS("saved_cvar_value", it.netname == tmp_cvar, + { + created_saved_value = -1; // skip creation + break; // no need to continue + }); if(created_saved_value != -1) { // creating a new entity to keep track of this cvar - e = new(saved_cvar_value); + entity e = new(saved_cvar_value); make_pure(e); e.netname = strzone(tmp_cvar); e.message = strzone(cvar_string(tmp_cvar)); @@ -600,9 +621,26 @@ float cvar_settemp(string tmp_cvar, string tmp_value) return created_saved_value; } -float cvar_settemp_restore() +int cvar_settemp_restore() { - float i = 0; + int j = 0; + // FIXME this new-style loop fails! +#if 0 + FOREACH_ENTITY_CLASS("saved_cvar_value", true, + { + if(cvar_type(it.netname)) + { + cvar_set(it.netname, it.message); + strunzone(it.netname); + strunzone(it.message); + remove(it); + ++j; + } + else + LOG_INFOF("Error: cvar %s doesn't exist anymore! It can still be restored once it's manually recreated.\n", it.netname); + }); + +#else entity e = world; while((e = find(e, classname, "saved_cvar_value"))) { @@ -610,13 +648,14 @@ float cvar_settemp_restore() { cvar_set(e.netname, e.message); remove(e); - ++i; + ++j; } else - LOG_INFOF("Error: cvar %s doesn't exist anymore! It can still be restored once it's manually recreated.\n", e.netname); + print(sprintf("Error: cvar %s doesn't exist anymore! It can still be restored once it's manually recreated.\n", e.netname)); } +#endif - return i; + return j; } float textLengthUpToWidth(string theText, float maxWidth, vector theSize, textLengthUpToWidth_widthFunction_t w) @@ -1340,6 +1379,7 @@ void m_shutdown() { shutdown_running = 1; Shutdown(); + shutdownhooks(); } cvar_settemp_restore(); // this must be done LAST, but in any case } @@ -1428,14 +1468,13 @@ vector animfixfps(entity e, vector a, vector b) // multi-frame anim: keep as-is if(a.y == 1) { - float dur; - dur = frameduration(e.modelindex, a.x); - if(dur <= 0 && b.y) + float dur = frameduration(e.modelindex, a.x); + if (dur <= 0 && b.y) { a = b; dur = frameduration(e.modelindex, a.x); } - if(dur > 0) + if (dur > 0) a.z = 1.0 / dur; } return a;