]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/turrets/turret.qh
Draw images without specifying an extension so to make menu and client code consisten...
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / turrets / turret.qh
index a2c934277c280a5d6db959f945b09faa837f0220..d46d54f58c8f456d8281a8605cf7a7ec45ec6de2 100644 (file)
@@ -1,8 +1,58 @@
-#ifndef TURRET_H
-#define TURRET_H
+#pragma once
 
-// functions:
-entity get_turretinfo(int id);
+#include <common/weapons/_all.qh>
+
+CLASS(Turret, Object)
+    ATTRIB(Turret, m_id, int, 0);
+
+    /** short name */
+    ATTRIB(Turret, netname, string);
+    /** human readable name */
+    ATTRIB(Turret, turret_name, string, _("Turret"));
+    /** currently a copy of the model */
+    ATTRIB(Turret, mdl, string);
+    /** full name of model */
+    ATTRIB(Turret, model, string);
+    /** full name of tur_head model */
+    ATTRIB(Turret, head_model, string);
+
+    ATTRIB(Turret, spawnflags, int, 0);
+    /** turret hitbox size */
+    ATTRIB(Turret, m_mins, vector, '-0 -0 -0');
+    /** turret hitbox size */
+    ATTRIB(Turret, m_maxs, vector, '0 0 0');
+
+    METHOD(Turret, display, void(Turret this, void(string name, string icon) returns)) {
+        returns(this.turret_name, string_null);
+    }
+    /** (BOTH) setup turret data */
+    METHOD(Turret, tr_setup, void(Turret this, entity it)) {
+
+    }
+    /** (SERVER) logic to run every frame */
+    METHOD(Turret, tr_think, void(Turret this, entity it)) {
+
+    }
+    /** (SERVER) called when turret dies */
+    METHOD(Turret, tr_death, void(Turret this, entity it)) {
+
+    }
+    /** (BOTH) precaches models/sounds used by this turret */
+    METHOD(Turret, tr_precache, void(Turret this)) {
+
+    }
+    ATTRIB(Turret, m_weapon, Weapon);
+#ifdef SVQC
+    /** (SERVER) called when turret attacks */
+    METHOD(Turret, tr_attack, void(Turret this, entity it)) {
+        Weapon w = this.m_weapon;
+        .entity weaponentity = weaponentities[0];
+        w.wr_think(w, it, weaponentity, 1);
+    }
+#endif
+       /** (SERVER) dump turret cvars to config in data directory (see: sv_cmd dumpturrets) */
+       METHOD(Turret, tr_config, void(Turret this)) { }
+ENDCLASS(Turret)
 
 // fields:
 .entity tur_head;
@@ -10,19 +60,20 @@ entity get_turretinfo(int id);
 // target selection flags
 .int target_select_flags;
 .int target_validate_flags;
-const int TFL_TARGETSELECT_NO = 2; // don't automatically find targets
-const int TFL_TARGETSELECT_LOS = 4; // require line of sight to find targets
-const int TFL_TARGETSELECT_PLAYERS = 8; // target players
-const int TFL_TARGETSELECT_MISSILES = 16; // target projectiles
-const int TFL_TARGETSELECT_TRIGGERTARGET = 32; // respond to turret_trigger_target events
-const int TFL_TARGETSELECT_ANGLELIMITS = 64; // apply extra angular limits to target selection
-const int TFL_TARGETSELECT_RANGELIMITS = 128; // limit target selection range
-const int TFL_TARGETSELECT_TEAMCHECK = 256; // don't attack teammates
-const int TFL_TARGETSELECT_NOBUILTIN = 512; // only attack targets when triggered
-const int TFL_TARGETSELECT_OWNTEAM = 1024; // only attack teammates
-const int TFL_TARGETSELECT_NOTURRETS = 2048; // don't attack other turrets
-const int TFL_TARGETSELECT_FOV = 4096; // extra limits to attack range
-const int TFL_TARGETSELECT_MISSILESONLY = 8192; // only attack missiles
+const int TFL_TARGETSELECT_NO = BIT(1); // don't automatically find targets
+const int TFL_TARGETSELECT_LOS = BIT(2); // require line of sight to find targets
+const int TFL_TARGETSELECT_PLAYERS = BIT(3); // target players
+const int TFL_TARGETSELECT_MISSILES = BIT(4); // target projectiles
+const int TFL_TARGETSELECT_TRIGGERTARGET = BIT(5); // respond to turret_trigger_target events
+const int TFL_TARGETSELECT_ANGLELIMITS = BIT(6); // apply extra angular limits to target selection
+const int TFL_TARGETSELECT_RANGELIMITS = BIT(7); // limit target selection range
+const int TFL_TARGETSELECT_TEAMCHECK = BIT(8); // don't attack teammates
+const int TFL_TARGETSELECT_NOBUILTIN = BIT(9); // only attack targets when triggered
+const int TFL_TARGETSELECT_OWNTEAM = BIT(10); // only attack teammates
+const int TFL_TARGETSELECT_NOTURRETS = BIT(11); // don't attack other turrets
+const int TFL_TARGETSELECT_FOV = BIT(12); // extra limits to attack range
+const int TFL_TARGETSELECT_MISSILESONLY = BIT(13); // only attack missiles
+const int TFL_TARGETSELECT_VEHICLES = BIT(14); // target manned vehicles
 
 // aim flags
 .int aim_flags;
@@ -123,65 +174,3 @@ const int TNSF_MOVE         = 64;
 const int TNSF_ANIM         = 128;
 
 const int TNSF_FULL_UPDATE  = 16777215;
-
-
-// other useful macros
-#define _TUR_ACTION(tur, mrequest) tur.turret_func(tur, mrequest)
-#define TUR_ACTION(tur, mrequest) _TUR_ACTION(get_turretinfo(tur), mrequest)
-#define TUR_NAME(turrettype) (get_turretinfo(turrettype)).turret_name
-
-bool t_new(entity this, int req);
-
-CLASS(Turret, Object)
-    ATTRIB(Turret, m_id, int, 0)
-
-    /** short name */
-    ATTRIB(Turret, netname, string, string_null)
-    /** human readable name */
-    ATTRIB(Turret, turret_name, string, string_null)
-    /** t_... */
-    ATTRIB(Turret, turret_func, float(Turret, int), t_new)
-    /** currently a copy of the model */
-    ATTRIB(Turret, mdl, string, string_null)
-    /** full name of model */
-    ATTRIB(Turret, model, string, string_null)
-    /** full name of tur_head model */
-    ATTRIB(Turret, head_model, string, string_null)
-
-    ATTRIB(Turret, spawnflags, int, 0)
-    /** turret hitbox size */
-    ATTRIB(Turret, mins, vector, '-0 -0 -0')
-    /** turret hitbox size */
-    ATTRIB(Turret, maxs, vector, '0 0 0')
-
-    METHOD(Turret, display, void(entity this, void(string name, string icon) returns)) {
-        returns(this.turret_name, string_null);
-    }
-
-ENDCLASS(Turret)
-
-// turret requests
-const int TR_SETUP = 1; // (BOTH) setup turret data
-.bool(Turret) tr_setup;
-const int TR_THINK = 2; // (SERVER) logic to run every frame
-.bool(Turret) tr_think;
-const int TR_DEATH = 3; // (SERVER) called when turret dies
-.bool(Turret) tr_death;
-const int TR_PRECACHE = 4; // (BOTH) precaches models/sounds used by this turret
-.bool(Turret) tr_precache;
-/** (SERVER) called when turret attacks */
-.void(Turret) tr_attack;
-const int TR_CONFIG = 6; // (ALL)
-.bool(Turret) tr_config;
-
-bool t_new(Turret this, int req)
-{
-    if (req == TR_SETUP) return this.tr_setup ? this.tr_setup(this) : false;
-    if (req == TR_THINK) return this.tr_think ? this.tr_think(this) : false;
-    if (req == TR_DEATH) return this.tr_death ? this.tr_death(this) : false;
-    if (req == TR_PRECACHE) return this.tr_precache ? this.tr_precache(this) : false;
-    if (req == TR_CONFIG) return this.tr_config ? this.tr_config(this) : false;
-    return false;
-}
-
-#endif