X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fcommon%2Ftriggers%2Ftriggers.qc;h=fbd20c84011596a6bd110e9f96e51f270413e4b8;hp=54e1e09919f06666bb6ff1b22c379b5f7577bc0c;hb=95a5a2479a35e264473e8ba3fc4e584553da42b3;hpb=e424ba544c41fc40b241b17bd7c1d9c2fc930705;ds=sidebyside diff --git a/qcsrc/common/triggers/triggers.qc b/qcsrc/common/triggers/triggers.qc index 54e1e0991..fbd20c840 100644 --- a/qcsrc/common/triggers/triggers.qc +++ b/qcsrc/common/triggers/triggers.qc @@ -22,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) @@ -53,41 +59,52 @@ void trigger_common_write(entity this, bool withtarget) BITSET_ASSIGN(f, 1); if(this.origin != '0 0 0') BITSET_ASSIGN(f, 4); + if(this.movedir != '0 0 0') + BITSET_ASSIGN(f, 8); + if(this.angles != '0 0 0') + BITSET_ASSIGN(f, 16); WriteByte(MSG_ENTITY, f); if(withtarget) { - WriteString(MSG_ENTITY, this.target); - WriteString(MSG_ENTITY, this.target2); - WriteString(MSG_ENTITY, this.target3); - WriteString(MSG_ENTITY, this.target4); - WriteString(MSG_ENTITY, this.targetname); - WriteString(MSG_ENTITY, this.killtarget); + // probably some way to clean this up... + int targbits = 0; + if(this.target && this.target != "") targbits |= BIT(0); + if(this.target2 && this.target2 != "") targbits |= BIT(1); + if(this.target3 && this.target3 != "") targbits |= BIT(2); + if(this.target4 && this.target4 != "") targbits |= BIT(3); + if(this.targetname && this.targetname != "") targbits |= BIT(4); + if(this.killtarget && this.killtarget != "") targbits |= BIT(5); + + WriteByte(MSG_ENTITY, targbits); + + if(targbits & BIT(0)) + WriteString(MSG_ENTITY, this.target); + if(targbits & BIT(1)) + WriteString(MSG_ENTITY, this.target2); + if(targbits & BIT(2)) + WriteString(MSG_ENTITY, this.target3); + if(targbits & BIT(3)) + WriteString(MSG_ENTITY, this.target4); + if(targbits & BIT(4)) + WriteString(MSG_ENTITY, this.targetname); + if(targbits & BIT(5)) + WriteString(MSG_ENTITY, this.killtarget); } if(f & 4) - { - WriteCoord(MSG_ENTITY, this.origin.x); - WriteCoord(MSG_ENTITY, this.origin.y); - WriteCoord(MSG_ENTITY, this.origin.z); - } + WriteVector(MSG_ENTITY, this.origin); - WriteShort(MSG_ENTITY, this.modelindex); - WriteCoord(MSG_ENTITY, this.mins.x); - WriteCoord(MSG_ENTITY, this.mins.y); - WriteCoord(MSG_ENTITY, this.mins.z); - WriteCoord(MSG_ENTITY, this.maxs.x); - WriteCoord(MSG_ENTITY, this.maxs.y); - WriteCoord(MSG_ENTITY, this.maxs.z); - WriteByte(MSG_ENTITY, bound(1, this.scale * 16, 255)); + if(f & 8) + WriteVector(MSG_ENTITY, this.movedir); - WriteCoord(MSG_ENTITY, this.movedir_x); - WriteCoord(MSG_ENTITY, this.movedir_y); - WriteCoord(MSG_ENTITY, this.movedir_z); + if(f & 16) + WriteVector(MSG_ENTITY, this.angles); - WriteCoord(MSG_ENTITY, this.angles_x); - WriteCoord(MSG_ENTITY, this.angles_y); - WriteCoord(MSG_ENTITY, this.angles_z); + WriteShort(MSG_ENTITY, this.modelindex); + WriteVector(MSG_ENTITY, this.mins); + WriteVector(MSG_ENTITY, this.maxs); + WriteByte(MSG_ENTITY, bound(1, this.scale * 16, 255)); } #elif defined(CSQC) @@ -100,46 +117,51 @@ void trigger_common_read(entity this, bool withtarget) if(withtarget) { if(this.target) { strunzone(this.target); } - this.target = strzone(ReadString()); if(this.target2) { strunzone(this.target2); } - this.target2 = strzone(ReadString()); if(this.target3) { strunzone(this.target3); } - this.target3 = strzone(ReadString()); if(this.target4) { strunzone(this.target4); } - this.target4 = strzone(ReadString()); if(this.targetname) { strunzone(this.targetname); } - this.targetname = strzone(ReadString()); if(this.killtarget) { strunzone(this.killtarget); } - this.killtarget = strzone(ReadString()); + + int targbits = ReadByte(); + + #define X(xs,b) MACRO_BEGIN { \ + if(targbits & BIT(b)) \ + xs = strzone(ReadString()); \ + else \ + xs = string_null; \ + } MACRO_END + + X(this.target, 0); + X(this.target2, 1); + X(this.target3, 2); + X(this.target4, 3); + X(this.targetname, 4); + X(this.killtarget, 5); + #undef X } if(f & 4) - { - this.origin_x = ReadCoord(); - this.origin_y = ReadCoord(); - this.origin_z = ReadCoord(); - } + this.origin = ReadVector(); else this.origin = '0 0 0'; setorigin(this, this.origin); + if(f & 8) + this.movedir = ReadVector(); + else + this.movedir = '0 0 0'; + + if(f & 16) + this.angles = ReadVector(); + else + this.angles = '0 0 0'; + this.modelindex = ReadShort(); - this.mins_x = ReadCoord(); - this.mins_y = ReadCoord(); - this.mins_z = ReadCoord(); - this.maxs_x = ReadCoord(); - this.maxs_y = ReadCoord(); - this.maxs_z = ReadCoord(); + this.mins = ReadVector(); + this.maxs = ReadVector(); this.scale = ReadByte() / 16; setsize(this, this.mins, this.maxs); - - this.movedir_x = ReadCoord(); - this.movedir_y = ReadCoord(); - this.movedir_z = ReadCoord(); - - this.angles_x = ReadCoord(); - this.angles_y = ReadCoord(); - this.angles_z = ReadCoord(); } void trigger_remove_generic(entity this) @@ -203,6 +225,7 @@ void SUB_UseTargets_Ex(entity this, entity actor, entity trigger, bool preventRe t.target2 = this.target2; t.target3 = this.target3; t.target4 = this.target4; + t.antiwall_flag = this.antiwall_flag; return; } @@ -260,7 +283,7 @@ void SUB_UseTargets_Ex(entity this, entity actor, entity trigger, bool preventRe { if(this.target_random) { - RandomSelection_Add(t, 0, string_null, 1, 0); + RandomSelection_AddEnt(t, 1, 0); } else { @@ -286,8 +309,3 @@ void SUB_UseTargets_Ex(entity this, entity actor, entity trigger, bool preventRe 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); -}