CBaseVehicle: Added vehicleflags, make sure each vehicle has the ability

to suppress movement and/or fire while the 'driver' is using the vehicle.
This commit is contained in:
Marco Cawthorne 2020-10-25 12:06:22 +01:00
parent 8cbbeaae24
commit 4aa8a70063
7 changed files with 52 additions and 8 deletions

View File

@ -14,13 +14,22 @@
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
enumflags
{
VHF_FROZEN,
VHF_NOATTACK
};
class CBaseVehicle:CBaseTrigger
{
int m_iVehicleFlags;
entity m_eDriver;
void(void) CBaseVehicle;
vector m_vecPlayerPos;
virtual void(void) PlayerUpdateFlags;
virtual void(void) PlayerAlign;
virtual void(base_player) PlayerEnter;
virtual void(base_player) PlayerLeave;
@ -33,6 +42,16 @@ CBaseVehicle::PlayerInput(void)
}
void
CBaseVehicle::PlayerUpdateFlags(void)
{
if (m_iVehicleFlags & VHF_FROZEN)
m_eDriver.flags |= FL_FROZEN;
if (m_iVehicleFlags & VHF_NOATTACK)
m_eDriver.flags |= FL_NOATTACK;
}
void
CBaseVehicle::PlayerAlign(void)
{
@ -70,7 +89,13 @@ void
CBaseVehicle::PlayerLeave(base_player pl)
{
pl.movetype = MOVETYPE_WALK;
pl.flags &= ~FL_FROZEN;
if (m_iVehicleFlags & VHF_FROZEN)
pl.flags &= ~FL_FROZEN;
if (m_iVehicleFlags & VHF_NOATTACK)
pl.flags &= ~FL_NOATTACK;
pl.vehicle = __NULL__;
m_eDriver = __NULL__;
}

View File

@ -137,6 +137,7 @@ func_tank::customphysics(void)
makevectors(m_eDriver.v_angle);
endorg = v_forward * 4086;
angles = vectoangles(endorg - origin);
PlayerUpdateFlags();
if (vlen(m_eDriver.origin - origin) > 128)
PlayerLeave((base_player)m_eDriver);
@ -255,6 +256,7 @@ func_tank::SpawnKey(string strKey, string strValue)
void
func_tank::func_tank(void)
{
m_iVehicleFlags |= VHF_FROZEN | VHF_NOATTACK;
CBaseVehicle::CBaseVehicle();
if (m_strSpriteFlash)

View File

@ -151,7 +151,7 @@ func_tankmortar::customphysics(void)
endang[1] = Math_Lerp(v_forward[1], wantang[1], frametime);
endang[2] = Math_Lerp(v_forward[2], wantang[2], frametime);
angles = vectoangles(endang);
m_eDriver.flags |= FL_FROZEN;
PlayerUpdateFlags();
}
}
@ -268,6 +268,8 @@ func_tankmortar::SpawnKey(string strKey, string strValue)
void
func_tankmortar::func_tankmortar(void)
{
m_iVehicleFlags |= VHF_FROZEN | VHF_NOATTACK;
CBaseVehicle::CBaseVehicle();
if (m_strSpriteFlash)

View File

@ -166,7 +166,7 @@ func_tracktrain::customphysics(void)
} else if (m_eDriver.movement[0] < 0) {
m_flSpeed = bound(0, m_flSpeed -= frametime, 1.0f);
}
m_eDriver.flags |= FL_FROZEN;
PlayerUpdateFlags();
}
//m_flSpeed = autocvar_tracktrain_dir;
@ -316,5 +316,7 @@ func_tracktrain::SpawnKey(string strKey, string strValue)
void
func_tracktrain::func_tracktrain(void)
{
m_iVehicleFlags |= VHF_FROZEN;
CBaseVehicle::CBaseVehicle();
}

View File

@ -326,7 +326,8 @@ func_vehicle::customphysics(void)
m_flTurn = max(0, m_flTurn - frametime * m_flStraightenFactor);
}
}
m_eDriver.flags |= FL_FROZEN;
PlayerUpdateFlags();
}
angles[0] = Math_FixDelta(angles[0]);
@ -563,6 +564,7 @@ func_vehicle::func_vehicle(void)
m_flSteerFactor = 1.0f;
m_flStraightenFactor = 1.0f;
m_vecGravityDir = [0,0,-1];
m_iVehicleFlags |= VHF_FROZEN;
CBaseVehicle::CBaseVehicle();

View File

@ -37,7 +37,7 @@
#define FL_INVEHICLE (1<<18)
#define FL_FROZEN (1<<19)
#define FL_USE_RELEASED (1<<20)
#define FL_RESERVED1 (1<<15)
#define FL_RESERVED2 (1<<21)
#define FL_RESERVED3 (1<<22)
#define FL_RESERVED4 (1<<23)
#define FL_NOATTACK (1<<21)
#define FL_RESERVED1 (1<<22)
#define FL_RESERVED2 (1<<23)
#define FL_RESERVED3 (1<<15)

View File

@ -103,6 +103,9 @@ void Weapons_Primary(void)
player pl = (player)self;
int i = pl.activeweapon;
if (pl.flags & FL_NOATTACK)
return;
if (g_weapons[i].primary != __NULL__) {
g_weapons[i].primary();
}
@ -118,6 +121,10 @@ void Weapons_Secondary(void)
{
player pl = (player)self;
int i = pl.activeweapon;
if (pl.flags & FL_NOATTACK)
return;
if (g_weapons[i].secondary != __NULL__) {
g_weapons[i].secondary();
}
@ -132,6 +139,10 @@ void Weapons_Reload(void)
{
player pl = (player)self;
int i = pl.activeweapon;
if (pl.flags & FL_NOATTACK)
return;
if (g_weapons[i].reload != __NULL__) {
g_weapons[i].reload();
}