X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fcommon%2Ftriggers%2Ftriggers.qc;h=2a76d80c41a7a7f41675d9a06826b2e236683d28;hp=849d3e8acb27ef9efba748c6ab5bab0b14178ab7;hb=d865de7a9a17c5a1d9286aec40f68c3530697660;hpb=cff3504ad5e8ace014ea44de7ad04ad6e246a277 diff --git a/qcsrc/common/triggers/triggers.qc b/qcsrc/common/triggers/triggers.qc index 849d3e8acb..2a76d80c41 100644 --- a/qcsrc/common/triggers/triggers.qc +++ b/qcsrc/common/triggers/triggers.qc @@ -1,3 +1,4 @@ +#include "triggers.qh" void SUB_DontUseTargets(entity this, entity actor, entity trigger) { } void SUB_UseTargets(entity this, entity actor, entity trigger); @@ -21,22 +22,28 @@ void FixSize(entity e) #ifdef SVQC +bool autocvar_g_triggers_debug = true; + void trigger_init(entity this) { string m = this.model; EXACTTRIGGER_INIT; - if(m != "") - { - precache_model(m); - _setmodel(this, m); // no precision needed + if(autocvar_g_triggers_debug) + { + if(m != "") + { + precache_model(m); + _setmodel(this, m); // no precision needed + } + setorigin(this, this.origin); + if(this.scale) + setsize(this, this.mins * this.scale, this.maxs * this.scale); + else + setsize(this, this.mins, this.maxs); } - setorigin(this, this.origin); - if(this.scale) - setsize(this, this.mins * this.scale, this.maxs * this.scale); - else - setsize(this, this.mins, this.maxs); - BITSET_ASSIGN(this.effects, EF_NODEPTHTEST); + if(autocvar_g_triggers_debug) + BITSET_ASSIGN(this.effects, EF_NODEPTHTEST); } void trigger_link(entity this, bool(entity this, entity to, int sendflags) sendfunc) @@ -163,6 +170,7 @@ void trigger_remove_generic(entity this) } #endif + /* ============================== SUB_UseTargets @@ -182,7 +190,8 @@ match (string)this.target and call their .use function ============================== */ -void SUB_UseTargets(entity this, entity actor, entity trigger) + +void SUB_UseTargets_Ex(entity this, entity actor, entity trigger, bool preventReuse) { // // check for a delay @@ -200,6 +209,7 @@ void SUB_UseTargets(entity this, entity actor, entity trigger) t.target2 = this.target2; t.target3 = this.target3; t.target4 = this.target4; + t.antiwall_flag = this.antiwall_flag; return; } @@ -253,11 +263,11 @@ void SUB_UseTargets(entity this, entity actor, entity trigger) int aw_flag = this.antiwall_flag; for(entity t = NULL; (t = find(t, targetname, s)); ) { - if(t.use) + if(t.use && (t.sub_target_used != time || !preventReuse)) { if(this.target_random) { - RandomSelection_Add(t, 0, string_null, 1, 0); + RandomSelection_AddEnt(t, 1, 0); } else { @@ -265,6 +275,8 @@ void SUB_UseTargets(entity this, entity actor, entity trigger) t.antiwall_flag = aw_flag; t.use(t, actor, this); + if(preventReuse) + t.sub_target_used = time; } } } @@ -272,9 +284,16 @@ void SUB_UseTargets(entity this, entity actor, entity trigger) } if(this.target_random && RandomSelection_chosen_ent) + { RandomSelection_chosen_ent.use(RandomSelection_chosen_ent, actor, this); + if(preventReuse) + RandomSelection_chosen_ent.sub_target_used = time; + } } +void SUB_UseTargets(entity this, entity actor, entity trigger) { SUB_UseTargets_Ex(this, actor, trigger, false); } +void SUB_UseTargets_PreventReuse(entity this, entity actor, entity trigger) { SUB_UseTargets_Ex(this, actor, trigger, true); } + void SUB_UseTargets_self(entity this) { SUB_UseTargets(this, NULL, NULL);