X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fvehicles%2Fvehicle.qh;h=4e3b7b8729f374a104a449cd9ac0943ae40de8b6;hb=b870fa4148e978743c89ea51cbc7d6bf9c608612;hp=3dc72896331a7cf786634e3ceb21765e2bbfdc20;hpb=a57b23c82c8cd75e8feb2ec50eb89e7e011f7ca0;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/vehicles/vehicle.qh b/qcsrc/common/vehicles/vehicle.qh index 3dc728963..4e3b7b872 100644 --- a/qcsrc/common/vehicles/vehicle.qh +++ b/qcsrc/common/vehicles/vehicle.qh @@ -1,98 +1,77 @@ -#ifndef VEHICLE_H -#define VEHICLE_H - -// vehicle requests -const int VR_SETUP = 1; // (BOTH) setup vehicle data -.bool(entity) vr_setup; -const int VR_THINK = 2; // (SERVER) logic to run every frame -.bool(entity) vr_think; -const int VR_DEATH = 3; // (SERVER) called when vehicle dies -.bool(entity) vr_death; -const int VR_PRECACHE = 4; // (BOTH) precaches models/sounds used by this vehicle -.bool(entity) vr_precache; -const int VR_ENTER = 5; // (SERVER) called when a player enters this vehicle -.bool(entity) vr_enter; -const int VR_SPAWN = 6; // (SERVER) called when the vehicle re-spawns -.bool(entity) vr_spawn; -const int VR_IMPACT = 7; // (SERVER) called when a vehicle hits something -.bool(entity) vr_impact; -const int VR_HUD = 8; // (CLIENT) logic to run every frame -.bool(entity) vr_hud; - -// vehicle spawn flags (need them here for common registrations) -const int VHF_ISVEHICLE = 2; /// Indicates vehicle -const int VHF_HASSHIELD = 4; /// Vehicle has shileding -const int VHF_SHIELDREGEN = 8; /// Vehicles shield regenerates -const int VHF_HEALTHREGEN = 16; /// Vehicles health regenerates -const int VHF_ENERGYREGEN = 32; /// Vehicles energy regenerates -const int VHF_DEATHEJECT = 64; /// Vehicle ejects pilot upon fatal damage -const int VHF_MOVE_GROUND = 128; /// Vehicle moves on gound -const int VHF_MOVE_HOVER = 256; /// Vehicle hover close to gound -const int VHF_MOVE_FLY = 512; /// Vehicle is airborn -const int VHF_DMGSHAKE = 1024; /// Add random velocity each frame if health < 50% -const int VHF_DMGROLL = 2048; /// Add random angles each frame if health < 50% -const int VHF_DMGHEADROLL = 4096; /// Add random head angles each frame if health < 50% -const int VHF_MULTISLOT = 8192; /// Vehicle has multiple player slots -const int VHF_PLAYERSLOT = 16384; /// This ent is a player slot on a multi-person vehicle - -// functions: -entity get_vehicleinfo(int id); - -// fields: -.entity tur_head; - -// other useful macros -#define _VEH_ACTION(veh, mrequest) veh.vehicle_func(veh, mrequest) -#define VEH_ACTION(veh, mrequest) _VEH_ACTION(get_vehicleinfo(veh), mrequest) -#define VEH_NAME(veh) (get_vehicleinfo(veh)).vehicle_name - -bool v_new(entity, int); +#pragma once CLASS(Vehicle, Object) - ATTRIB(Vehicle, vehicleid, int, 0) + ATTRIB(Vehicle, vehicleid, int, 0); /** hud icon */ - ATTRIB(Vehicle, m_icon, string, string_null) + ATTRIB(Vehicle, m_icon, string); /** short name */ - ATTRIB(Vehicle, netname, string, "") + ATTRIB(Vehicle, netname, string, ""); /** human readable name */ - ATTRIB(Vehicle, vehicle_name, string, "Vehicle") - /** */ - ATTRIB(Vehicle, vehicle_func, bool(Vehicle, int), v_new) + ATTRIB(Vehicle, vehicle_name, string, "Vehicle"); /** full name of model */ - ATTRIB(Vehicle, model, string, "") + ATTRIB(Vehicle, model, string, ""); /** currently a copy of the model */ - ATTRIB(Vehicle, mdl, string, "") + ATTRIB(Vehicle, mdl, string, ""); /** full name of tur_head model */ - ATTRIB(Vehicle, head_model, string, "") + ATTRIB(Vehicle, head_model, string, ""); /** cockpit model */ - ATTRIB(Vehicle, hud_model, string, "") + ATTRIB(Vehicle, hud_model, string, ""); /** tur_head model tag */ - ATTRIB(Vehicle, tag_head, string, string_null) + ATTRIB(Vehicle, tag_head, string); /** hud model tag */ - ATTRIB(Vehicle, tag_hud, string, string_null) + ATTRIB(Vehicle, tag_hud, string); /** cockpit model tag */ - ATTRIB(Vehicle, tag_view, string, string_null) + ATTRIB(Vehicle, tag_view, string); /** player physics mod */ - ATTRIB(Vehicle, PlayerPhysplug, int(), func_null) + ATTRIB(Vehicle, PlayerPhysplug, bool(entity,float)); /** */ - ATTRIB(Vehicle, spawnflags, int, 0) + ATTRIB(Vehicle, spawnflags, int, 0); /** vehicle hitbox size */ - ATTRIB(Vehicle, mins, vector, '-0 -0 -0') + ATTRIB(Vehicle, m_mins, vector, '-0 -0 -0'); /** vehicle hitbox size */ - ATTRIB(Vehicle, maxs, vector, '0 0 0') + ATTRIB(Vehicle, m_maxs, vector, '0 0 0'); + /** vehicle 3rd person view offset */ + ATTRIB(Vehicle, view_ofs, vector, '0 0 0'); + /** vehicle 3rd person view distance */ + ATTRIB(Vehicle, height, float, 0); + + /** (BOTH) setup vehicle data */ + METHOD(Vehicle, vr_setup, void(Vehicle this, entity instance)) { } + /** (SERVER) logic to run every frame */ + METHOD(Vehicle, vr_think, void(Vehicle this, entity instance)) { } + /** (SERVER) called when vehicle dies */ + METHOD(Vehicle, vr_death, void(Vehicle this, entity instance)) { } + /** (BOTH) precaches models/sounds used by this vehicle */ + METHOD(Vehicle, vr_precache, void(Vehicle this)) { } + /** (SERVER) called when a player enters this vehicle */ + METHOD(Vehicle, vr_enter, void(Vehicle this, entity instance)) { } + /** (SERVER) called when a player enters this vehicle while occupied */ + METHOD(Vehicle, vr_gunner_enter, void(Vehicle this, entity instance, entity actor)) { } + /** (SERVER) called when the vehicle re-spawns */ + METHOD(Vehicle, vr_spawn, void(Vehicle this, entity instance)) { } + /** (SERVER) called when a vehicle hits something */ + METHOD(Vehicle, vr_impact, void(Vehicle this, entity instance)) { } + /** (CLIENT) logic to run every frame */ + METHOD(Vehicle, vr_hud, void(Vehicle this)) { } + /** (CLIENT) logic to run every frame */ + METHOD(Vehicle, vr_crosshair, void(Vehicle thisveh, entity player)) { } ENDCLASS(Vehicle) -bool v_new(Vehicle this, int req) -{ - if (req == VR_SETUP) return this.vr_setup ? this.vr_setup(this) : false; - if (req == VR_THINK) return this.vr_think ? this.vr_think(this) : false; - if (req == VR_DEATH) return this.vr_death ? this.vr_death(this) : false; - if (req == VR_PRECACHE) return this.vr_precache ? this.vr_precache(this) : false; - if (req == VR_ENTER) return this.vr_enter ? this.vr_enter(this) : false; - if (req == VR_SPAWN) return this.vr_spawn ? this.vr_spawn(this) : false; - if (req == VR_IMPACT) return this.vr_impact ? this.vr_impact(this) : false; - if (req == VR_HUD) return this.vr_hud ? this.vr_hud(this) : false; - return false; -} +// vehicle spawn flags (need them here for common registrations) +const int VHF_ISVEHICLE = BIT(1); /// Indicates vehicle +const int VHF_HASSHIELD = BIT(2); /// Vehicle has shileding +const int VHF_SHIELDREGEN = BIT(3); /// Vehicles shield regenerates +const int VHF_HEALTHREGEN = BIT(4); /// Vehicles health regenerates +const int VHF_ENERGYREGEN = BIT(5); /// Vehicles energy regenerates +const int VHF_DEATHEJECT = BIT(6); /// Vehicle ejects pilot upon fatal damage +const int VHF_MOVE_GROUND = BIT(7); /// Vehicle moves on gound +const int VHF_MOVE_HOVER = BIT(8); /// Vehicle hover close to gound +const int VHF_MOVE_FLY = BIT(9); /// Vehicle is airborn +const int VHF_DMGSHAKE = BIT(10); /// Add random velocity each frame if health < 50% +const int VHF_DMGROLL = BIT(11); /// Add random angles each frame if health < 50% +const int VHF_DMGHEADROLL = BIT(12); /// Add random head angles each frame if health < 50% +const int VHF_MULTISLOT = BIT(13); /// Vehicle has multiple player slots +const int VHF_PLAYERSLOT = BIT(14); /// This ent is a player slot on a multi-person vehicle -#endif +// fields: +.entity tur_head;