Fixing trigger gravity: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
(Blanked the page)
No edit summary
Line 1: Line 1:
=== {{warning|This fix doesn't appear to work 100% of the time, use at your own risk.}} ===


Currently the [[Trigger_gravity|trigger_gravity]] brush entity doesn't actually function properly.
To fix gravity triggers, navigate to triggers.cpp, around line 2651 you should find this:
<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 )
{
// Only save on clients
if ( !pOther->IsPlayer() )
return;
pOther->SetGravity( GetGravity() );
}
</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.

Revision as of 05:33, 6 January 2018

Warning.pngWarning:This fix doesn't appear to work 100% of the time, use at your own risk.

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.