Fixing trigger gravity: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
Currently the [[Trigger_gravity|trigger_gravity]] brush entity doesn't actually function properly. | Currently the [[Trigger_gravity|trigger_gravity]] brush entity doesn't actually function properly. | ||
To fix gravity triggers, navigate to triggers.cpp, around line | To fix gravity triggers, navigate to triggers.cpp, around line 2651 you should find this: | ||
<syntaxhighlight lang="cpp"> | <syntaxhighlight lang="cpp"> | ||
class CTriggerGravity : public CBaseTrigger | |||
{ | |||
public: | |||
DECLARE_CLASS( CTriggerGravity, CBaseTrigger ); | |||
DECLARE_DATADESC(); | |||
void Spawn( void ); | |||
void GravityTouch( CBaseEntity *pOther ); | |||
}; | |||
LINK_ENTITY_TO_CLASS( trigger_gravity, CTriggerGravity ); | |||
BEGIN_DATADESC( CTriggerGravity ) | |||
// Function Pointers | |||
DEFINE_FUNCTION(GravityTouch), | |||
END_DATADESC() | |||
void CTriggerGravity::Spawn( void ) | |||
{ | |||
BaseClass::Spawn(); | |||
InitTrigger(); | |||
SetTouch( &CTriggerGravity::GravityTouch ); | |||
} | |||
void CTriggerGravity::GravityTouch( CBaseEntity *pOther ) | void CTriggerGravity::GravityTouch( CBaseEntity *pOther ) | ||
{ | { | ||
Line 14: | Line 39: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
replace the whole class, functions and all with this: | |||
<syntaxhighlight lang="cpp"> | |||
class CTriggerGravity : public CTriggerMultiple | |||
{ | |||
public: | |||
DECLARE_CLASS(CTriggerGravity, CTriggerMultiple); | |||
DECLARE_DATADESC(); | |||
void Spawn( void ); | |||
void StartTouch(CBaseEntity *pOther); | |||
void EndTouch(CBaseEntity *pOther); | |||
}; | |||
LINK_ENTITY_TO_CLASS( trigger_gravity, CTriggerGravity ); | |||
BEGIN_DATADESC( CTriggerGravity ) | |||
// Function Pointers | |||
DEFINE_FUNCTION(StartTouch), | |||
DEFINE_FUNCTION(EndTouch), | |||
END_DATADESC() | |||
void CTriggerGravity::Spawn( void ) | |||
{ | |||
BaseClass::Spawn(); | |||
InitTrigger(); | |||
//SetTouch( &CTriggerGravity::GravityTouch ); | |||
} | |||
void CTriggerGravity::StartTouch( CBaseEntity *pOther ) | |||
{ | |||
// Only save on clients | |||
//if ( !pOther->IsPlayer() ) | |||
// return; | |||
pOther->SetGravity( GetGravity() ); | |||
} | |||
void CTriggerGravity::EndTouch(CBaseEntity *pOther) | |||
{ | |||
// Only save on clients | |||
//if ( !pOther->IsPlayer() ) | |||
// return; | |||
pOther->SetGravity(1); | |||
} | |||
</syntaxhighlight> | |||
[[Trigger_gravity|trigger_gravity]] should work fine now on players, but still won't change a physics object's gravity. | [[Trigger_gravity|trigger_gravity]] should work fine now on players, but still won't change a physics object's gravity. |
Revision as of 17:35, 5 January 2018
Currently the trigger_gravity brush entity doesn't actually function properly.
To fix gravity triggers, navigate to triggers.cpp, around line 2651 you should find this:
class CTriggerGravity : public CBaseTrigger
{
public:
DECLARE_CLASS( CTriggerGravity, CBaseTrigger );
DECLARE_DATADESC();
void Spawn( void );
void GravityTouch( CBaseEntity *pOther );
};
LINK_ENTITY_TO_CLASS( trigger_gravity, CTriggerGravity );
BEGIN_DATADESC( CTriggerGravity )
// Function Pointers
DEFINE_FUNCTION(GravityTouch),
END_DATADESC()
void CTriggerGravity::Spawn( void )
{
BaseClass::Spawn();
InitTrigger();
SetTouch( &CTriggerGravity::GravityTouch );
}
void CTriggerGravity::GravityTouch( CBaseEntity *pOther )
{
// Only save on clients
if ( !pOther->IsPlayer() )
return;
pOther->SetGravity( GetGravity() );
}
replace the whole class, functions and all with this:
class CTriggerGravity : public CTriggerMultiple
{
public:
DECLARE_CLASS(CTriggerGravity, CTriggerMultiple);
DECLARE_DATADESC();
void Spawn( void );
void StartTouch(CBaseEntity *pOther);
void EndTouch(CBaseEntity *pOther);
};
LINK_ENTITY_TO_CLASS( trigger_gravity, CTriggerGravity );
BEGIN_DATADESC( CTriggerGravity )
// Function Pointers
DEFINE_FUNCTION(StartTouch),
DEFINE_FUNCTION(EndTouch),
END_DATADESC()
void CTriggerGravity::Spawn( void )
{
BaseClass::Spawn();
InitTrigger();
//SetTouch( &CTriggerGravity::GravityTouch );
}
void CTriggerGravity::StartTouch( CBaseEntity *pOther )
{
// Only save on clients
//if ( !pOther->IsPlayer() )
// return;
pOther->SetGravity( GetGravity() );
}
void CTriggerGravity::EndTouch(CBaseEntity *pOther)
{
// Only save on clients
//if ( !pOther->IsPlayer() )
// return;
pOther->SetGravity(1);
}
trigger_gravity should work fine now on players, but still won't change a physics object's gravity.