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:
parent
8cbbeaae24
commit
4aa8a70063
7 changed files with 52 additions and 8 deletions
|
@ -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__;
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue