예제 #1
0
/*
==============================
G_FireAllTargetsOf

"activator" should be set to the entity that initiated the firing.

For all t in the entities, where t.targetnames[i] matches
ent.targets[j] for any (i,j) pairs, call the t.use function.
==============================
*/
void G_EventFireEntity( gentity_t *self, gentity_t *activator, gentityCallEvent_t eventType )
{
	gentity_t *currentTarget = NULL;
	int targetIndex;
	gentityCall_t call;
	call.activator = activator;

	if ( self->shaderKey && self->shaderReplacement )
	{
		G_SetShaderRemap( self->shaderKey, self->shaderReplacement, level.time * 0.001 );
		trap_SetConfigstring( CS_SHADERSTATE, BuildShaderStateConfig() );
	}

	while( ( currentTarget = G_IterateCallEndpoints( currentTarget, &targetIndex, self ) ) != NULL )
	{
		if( eventType && self->calltargets[ targetIndex ].eventType != eventType )
		{
			continue;
		}

		call.caller = self; //reset the caller in case there have been nested calls
		call.definition = &self->calltargets[ targetIndex ];

		G_CallEntity(currentTarget, &call);

		if ( !self->inuse )
		{
			G_Printf( S_WARNING "entity was removed while using targets\n" );
			return;
		}
	}
}
예제 #2
0
void gfx_shader_mod_act( gentity_t *self, gentity_t *other, gentity_t *activator )
{
	if ( !self->shaderKey || !self->shaderReplacement || !self->enabled )
	{
		return;
	}

	G_SetShaderRemap( self->shaderKey, self->shaderReplacement, level.time * 0.001 );
	trap_SetConfigstring( CS_SHADERSTATE, BuildShaderStateConfig() );

	self->active = true;
}
예제 #3
0
void gfx_shader_mod_reset( gentity_t *self )
{
	if ( !self->shaderKey || !self->shaderReplacement )
	{
		return;
	}

	if( !self->active ) // initial reset doesnt need a remap
	{
		return;
	}

	G_SetShaderRemap( self->shaderKey, self->shaderKey, level.time * 0.001 );
	trap_SetConfigstring( CS_SHADERSTATE, BuildShaderStateConfig() );

	self->active = false;
}