X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fcommon%2Fturrets%2Fturret%2Ftesla_weapon.qc;h=b62201eb983e3523118b39eb1b71e3fde321f10b;hp=a283a738f2c79c93737698d02d86ff849c7e52c6;hb=9e8ea75b9aacffc5cfa18c8852c4dd9ffdbd3192;hpb=109c5785a22fb4336ac5e91d5f1fa91678582164 diff --git a/qcsrc/common/turrets/turret/tesla_weapon.qc b/qcsrc/common/turrets/turret/tesla_weapon.qc index a283a738f2..b62201eb98 100644 --- a/qcsrc/common/turrets/turret/tesla_weapon.qc +++ b/qcsrc/common/turrets/turret/tesla_weapon.qc @@ -1,10 +1,8 @@ #include "tesla_weapon.qh" -#ifdef IMPLEMENTATION - #ifdef SVQC -entity toast(entity from, float range, float damage); +entity toast(entity actor, entity from, float range, float damage); SOUND(TeslaCoilTurretAttack_FIRE, W_Sound("electro_fire")); METHOD(TeslaCoilTurretAttack, wr_think, void(entity thiswep, entity actor, .entity weaponentity, int fire)) { bool isPlayer = IS_PLAYER(actor); @@ -12,7 +10,7 @@ METHOD(TeslaCoilTurretAttack, wr_think, void(entity thiswep, entity actor, .enti if (!isPlayer || weapon_prepareattack(thiswep, actor, weaponentity, false, WEP_CVAR_PRI(electro, refire))) { if (isPlayer) { turret_initparams(actor); - W_SetupShot_Dir(actor, v_forward, false, 0, SND_TeslaCoilTurretAttack_FIRE, CH_WEAPON_B, 0); + W_SetupShot_Dir(actor, weaponentity, v_forward, false, 0, SND_TeslaCoilTurretAttack_FIRE, CH_WEAPON_B, 0, DEATH_TURRET_TESLA.m_id); actor.tur_shotdir_updated = w_shotdir; actor.tur_shotorg = w_shotorg; actor.tur_head = actor; @@ -22,12 +20,12 @@ METHOD(TeslaCoilTurretAttack, wr_think, void(entity thiswep, entity actor, .enti float d = actor.shot_dmg; float r = actor.target_range; entity e = spawn(); - setorigin(e,actor.tur_shotorg); + setorigin(e, actor.tur_shotorg); actor.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_MISSILES | TFL_TARGETSELECT_RANGELIMITS | TFL_TARGETSELECT_TEAMCHECK; - entity t = toast(e,r,d); - remove(e); + entity t = toast(actor, e,r,d); + delete(e); if (t == NULL) return; @@ -37,62 +35,50 @@ METHOD(TeslaCoilTurretAttack, wr_think, void(entity thiswep, entity actor, .enti for (int i = 0; i < 10; ++i) { d *= 0.75; r *= 0.85; - t = toast(t, r, d); - if (t == world) break; - - } + t = toast(actor, t, r, d); + if (t == NULL) break; - e = findchainfloat(railgunhit, 1); - while (e) { - e.railgunhit = 0; - e = e.chain; } + IL_EACH(g_railgunhit, it.railgunhit, + { + it.railgunhit = false; + }); + IL_CLEAR(g_railgunhit); } } -entity toast(entity from, float range, float damage) -{SELFPARAM(); - entity e; - entity etarget = world; - float d,dd; - float r; - - dd = range + 1; - - e = findradius(from.origin,range); - while (e) +entity toast(entity actor, entity from, float range, float damage) +{ + float dd = range + 1; + entity etarget = NULL; + FOREACH_ENTITY_RADIUS(from.origin, range, it != from && !it.railgunhit, { - if ((e.railgunhit != 1) && (e != from)) + float r = turret_validate_target(actor, it, actor.target_validate_flags); + if(r > 0) { - r = turret_validate_target(self,e,self.target_validate_flags); - if (r > 0) + traceline(from.origin, 0.5 * (it.absmin + it.absmax), MOVE_WORLDONLY, from); + if(trace_fraction == 1.0) { - traceline(from.origin,0.5 * (e.absmin + e.absmax),MOVE_WORLDONLY,from); - if (trace_fraction == 1.0) + float d = vlen(it.origin - from.origin); + if(d < dd) { - d = vlen(e.origin - from.origin); - if (d < dd) - { - dd = d; - etarget = e; - } + dd = d; + etarget = it; } } } - e = e.chain; - } + }); if (etarget) { - te_csqc_lightningarc(from.origin,etarget.origin); - Damage(etarget, self, self, damage, DEATH_TURRET_TESLA.m_id, etarget.origin, '0 0 0'); - etarget.railgunhit = 1; + te_csqc_lightningarc(from.origin, etarget.origin); + Damage(etarget, actor, actor, damage, DEATH_TURRET_TESLA.m_id, DMG_NOWEP, etarget.origin, '0 0 0'); + etarget.railgunhit = true; + IL_PUSH(g_railgunhit, etarget); } return etarget; } #endif - -#endif