#ifndef TUR_EWHEEL_H
#define TUR_EWHEEL_H
-REGISTER_TURRET(
-/* TUR_##id */ EWHEEL,
-/* function */ t_ewheel,
-/* spawnflags */ TUR_FLAG_PLAYER | TUR_FLAG_MOVE | TUR_FLAG_ROAM,
-/* mins,maxs */ '-32 -32 0', '32 32 48',
-/* model */ "ewheel-base2.md3",
-/* head_model */ "ewheel-gun1.md3",
-/* netname */ "ewheel",
-/* fullname */ _("eWheel Turret")
-);
+
+CLASS(EWheel, Turret)
+/* spawnflags */ ATTRIB(EWheel, spawnflags, int, TUR_FLAG_PLAYER | TUR_FLAG_MOVE | TUR_FLAG_ROAM);
+/* mins */ ATTRIB(EWheel, mins, vector, '-32 -32 0');
+/* maxs */ ATTRIB(EWheel, maxs, vector, '32 32 48');
+/* modelname */ ATTRIB(EWheel, mdl, string, "ewheel-base2.md3");
+/* model */ ATTRIB(EWheel, model, string, strzone(strcat("models/turrets/", this.mdl)));
+/* head_model */ ATTRIB(EWheel, head_model, string, strzone(strcat("models/turrets/", "ewheel-gun1.md3")));
+/* netname */ ATTRIB(EWheel, netname, string, "ewheel");
+/* fullname */ ATTRIB(EWheel, turret_name, string, _("eWheel Turret"));
+ENDCLASS(EWheel)
+
+REGISTER_TURRET(EWHEEL, NEW(EWheel));
+
+CLASS(EWheelAttack, PortoLaunch)
+/* flags */ ATTRIB(EWheelAttack, spawnflags, int, WEP_TYPE_OTHER);
+/* impulse */ ATTRIB(EWheelAttack, impulse, int, 5);
+/* refname */ ATTRIB(EWheelAttack, netname, string, "turret_ewheel");
+/* wepname */ ATTRIB(EWheelAttack, message, string, _("eWheel"));
+ENDCLASS(EWheelAttack)
+REGISTER_WEAPON(EWHEEL, NEW(EWheelAttack));
+
#endif
#ifdef IMPLEMENTATION
#ifdef SVQC
+void turret_initparams(entity);
+METHOD(EWheelAttack, wr_think, bool(entity thiswep, bool fire1, bool fire2)) {
+ SELFPARAM();
+ bool isPlayer = IS_PLAYER(self);
+ if (fire1)
+ if (!isPlayer || weapon_prepareattack(false, WEP_CVAR_PRI(electro, refire))) {
+ if (isPlayer) {
+ turret_initparams(self);
+ W_SetupShot_Dir(self, v_forward, false, 0, W_Sound("electro_fire"), CH_WEAPON_B, 0);
+ self.tur_shotdir_updated = w_shotdir;
+ self.tur_shotorg = w_shotorg;
+ self.tur_head = self;
+ weapon_thinkf(WFRAME_FIRE1, WEP_CVAR_PRI(electro, animtime), w_ready);
+ }
+
+ turret_do_updates(self);
+
+ entity missile = turret_projectile(SND(LASERGUN_FIRE), 1, 0, DEATH_TURRET_EWHEEL, PROJECTILE_BLASTER, true, true);
+ missile.missile_flags = MIF_SPLASH;
+
+ Send_Effect(EFFECT_BLASTER_MUZZLEFLASH, self.tur_shotorg, self.tur_shotdir_updated * 1000, 1);
+
+ if (!isPlayer) {
+ self.tur_head.frame += 2;
+
+ if (self.tur_head.frame > 3)
+ self.tur_head.frame = 0;
+ }
+ }
+ return true;
+}
+
float autocvar_g_turrets_unit_ewheel_speed_fast;
float autocvar_g_turrets_unit_ewheel_speed_slow;
float autocvar_g_turrets_unit_ewheel_speed_slower;
void spawnfunc_turret_ewheel() { SELFPARAM(); if(!turret_initialize(TUR_EWHEEL.m_id)) remove(self); }
-float t_ewheel(float req)
-{SELFPARAM();
- switch(req)
- {
- case TR_ATTACK:
+ METHOD(EWheel, tr_attack, void(EWheel thistur))
{
- float i;
- entity _mis;
-
- for (i = 0; i < 1; ++i)
- {
- turret_do_updates(self);
-
- _mis = turret_projectile(SND(LASERGUN_FIRE), 1, 0, DEATH_TURRET_EWHEEL, PROJECTILE_BLASTER, TRUE, TRUE);
- _mis.missile_flags = MIF_SPLASH;
-
- Send_Effect(EFFECT_BLASTER_MUZZLEFLASH, self.tur_shotorg, self.tur_shotdir_updated * 1000, 1);
-
- self.tur_head.frame += 2;
-
- if (self.tur_head.frame > 3)
- self.tur_head.frame = 0;
- }
-
- return true;
+ SELFPARAM();
+ Weapon wep = WEP_EWHEEL;
+ wep.wr_think(wep, true, false);
}
- case TR_THINK:
+ METHOD(EWheel, tr_think, bool(EWheel thistur))
{
+ SELFPARAM();
float vz;
vector wish_angle, real_angle;
return true;
}
- case TR_DEATH:
+ METHOD(EWheel, tr_death, bool(EWheel thistur))
{
+ SELFPARAM();
self.velocity = '0 0 0';
#ifdef EWHEEL_FANCYPATH
return true;
}
- case TR_SETUP:
+ METHOD(EWheel, tr_setup, bool(EWheel thistur))
{
+ SELFPARAM();
entity e;
if(self.movetype == MOVETYPE_WALK)
return true;
}
- case TR_PRECACHE:
+ METHOD(EWheel, tr_precache, bool(EWheel thistur))
{
return true;
}
- }
-
- return true;
-}
#endif // SVQC
#ifdef CSQC
te_spark(self.origin + '0 0 40', randomvec() * 256 + '0 0 256', 16);
}
-float t_ewheel(float req)
-{SELFPARAM();
- switch(req)
- {
- case TR_SETUP:
+ METHOD(EWheel, tr_setup, bool(EWheel thistur))
{
+ SELFPARAM();
self.gravity = 1;
self.movetype = MOVETYPE_BOUNCE;
self.move_movetype = MOVETYPE_BOUNCE;
return true;
}
- case TR_PRECACHE:
+ METHOD(EWheel, tr_precache, bool(EWheel thistur))
{
return true;
}
- }
-
- return true;
-}
#endif // CSQC
#endif // REGISTER_TURRET