-#ifndef TUR_FUSIONREACTOR_H
-#define TUR_FUSIONREACTOR_H
-REGISTER_TURRET(
-/* TUR_##id */ FUSIONREACTOR,
-/* function */ t_fusionreactor,
-/* spawnflags */ TUR_FLAG_SUPPORT | TUR_FLAG_AMMOSOURCE,
-/* mins,maxs */ '-34 -34 0', '34 34 90',
-/* model */ "base.md3",
-/* head_model */ "reactor.md3",
-/* netname */ "fusionreactor",
-/* fullname */ _("Fusion Reactor")
-);
-#endif
+#include "fusionreactor.qh"
#ifdef IMPLEMENTATION
#ifdef SVQC
-bool turret_fusionreactor_firecheck()
-{SELFPARAM();
- if (self.attack_finished_single > time)
+bool turret_fusionreactor_firecheck(entity this)
+{
+ if (this.attack_finished_single[0] > time)
return false;
- if (self.enemy.deadflag != DEAD_NO)
+ if (IS_DEAD(this.enemy))
return false;
- if (self.enemy == world)
+ if (this.enemy == NULL)
return false;
- if (self.ammo < self.shot_dmg)
+ if (this.ammo < this.shot_dmg)
return false;
- if (self.enemy.ammo >= self.enemy.ammo_max)
+ if (this.enemy.ammo >= this.enemy.ammo_max)
return false;
- if (vlen(self.enemy.origin - self.origin) > self.target_range)
+ if(vdist(this.enemy.origin - this.origin, >, this.target_range))
return false;
- if(self.team != self.enemy.team)
+ if(this.team != this.enemy.team)
return false;
- if(!(self.enemy.ammo_flags & TFL_AMMO_ENERGY))
+ if(!(this.enemy.ammo_flags & TFL_AMMO_ENERGY))
return false;
return true;
}
-void spawnfunc_turret_fusionreactor() { SELFPARAM(); if(!turret_initialize(TUR_FUSIONREACTOR.m_id)) remove(self); }
-
-float t_fusionreactor(Turret thistur, float req)
-{SELFPARAM();
- switch(req)
- {
- case TR_ATTACK:
- {
- vector fl_org;
-
- self.enemy.ammo = min(self.enemy.ammo + self.shot_dmg,self.enemy.ammo_max);
- fl_org = 0.5 * (self.enemy.absmin + self.enemy.absmax);
- te_smallflash(fl_org);
-
- return true;
- }
- case TR_THINK:
- {
- self.tur_head.avelocity = '0 250 0' * (self.ammo / self.ammo_max);
-
- return true;
- }
- case TR_DEATH:
- {
- return true;
- }
- case TR_SETUP:
- {
- self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE;
- self.target_select_flags = TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_OWNTEAM | TFL_TARGETSELECT_RANGELIMITS;
- self.firecheck_flags = TFL_FIRECHECK_AMMO_OWN | TFL_FIRECHECK_AMMO_OTHER | TFL_FIRECHECK_DISTANCES | TFL_FIRECHECK_DEAD;
- self.shoot_flags = TFL_SHOOT_HITALLVALID;
- self.aim_flags = TFL_AIM_NO;
- self.track_flags = TFL_TRACK_NO;
-
- self.tur_head.scale = 0.75;
- self.tur_head.avelocity = '0 50 0';
-
- self.turret_firecheckfunc = turret_fusionreactor_firecheck;
-
- return true;
- }
- case TR_PRECACHE:
- {
- return true;
- }
- }
+spawnfunc(turret_fusionreactor) { if (!turret_initialize(this, TUR_FUSIONREACTOR)) delete(this); }
- return true;
+METHOD(FusionReactor, tr_attack, void(FusionReactor this, entity it))
+{
+ it.enemy.ammo = min(it.enemy.ammo + it.shot_dmg,it.enemy.ammo_max);
+ vector fl_org = 0.5 * (it.enemy.absmin + it.enemy.absmax);
+ te_smallflash(fl_org);
}
-
-#endif // SVQC
-#ifdef CSQC
-float t_fusionreactor(Turret thistur, float req)
+METHOD(FusionReactor, tr_think, void(FusionReactor thistur, entity it))
+{
+ it.tur_head.avelocity = '0 250 0' * (it.ammo / it.ammo_max);
+}
+METHOD(FusionReactor, tr_setup, void(FusionReactor this, entity it))
{
- switch(req)
- {
- case TR_SETUP:
- {
- return true;
- }
- case TR_PRECACHE:
- {
- return true;
- }
- }
+ it.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE;
+ it.target_select_flags = TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_OWNTEAM | TFL_TARGETSELECT_RANGELIMITS;
+ it.firecheck_flags = TFL_FIRECHECK_AMMO_OWN | TFL_FIRECHECK_AMMO_OTHER | TFL_FIRECHECK_DISTANCES | TFL_FIRECHECK_DEAD;
+ it.shoot_flags = TFL_SHOOT_HITALLVALID;
+ it.aim_flags = TFL_AIM_NO;
+ it.track_flags = TFL_TRACK_NO;
- return true;
+ it.tur_head.scale = 0.75;
+ it.tur_head.avelocity = '0 50 0';
+
+ it.turret_firecheckfunc = turret_fusionreactor_firecheck;
}
-#endif // CSQC
-#endif // REGISTER_TURRET
+#endif
+#endif