コード例 #1
0
ファイル: g_alarm.c プロジェクト: Justasic/RTCW-MP
/*
==============
alarmbox_die
==============
*/
void alarmbox_die( gentity_t *ent, gentity_t *inflictor, gentity_t *attacker, int damage, int mod ) {
	alarmExplosion( ent );
	ent->s.frame    = 2;
	ent->active     = qfalse;
	ent->takedamage = qfalse;
	alarmbox_updateparts( ent, qtrue );
}
コード例 #2
0
ファイル: g_alarm.c プロジェクト: Diskutant/RTCW-SP
/*
==============
alarmbox_die
==============
*/
void alarmbox_die(gentity_t *ent, gentity_t *inflictor, gentity_t *attacker, int damage, int mod)
{
	gentity_t *t;

	alarmExplosion(ent);
	ent->s.frame    = 2;
	ent->active     = qfalse;
	ent->takedamage = qfalse;
	alarmbox_updateparts(ent, qtrue);

	// fire 'death' targets
	if(ent->targetdeath)
	{
		t = NULL;

		while((t = G_Find(t, FOFS(targetname), ent->targetdeath)) != NULL)
		{
			if(t == ent)
			{
				G_Printf("WARNING: Entity used itself.\n");
			}
			else
			{
				// fire target
				t->use(t, ent, attacker);
			}
		}
	}

}
コード例 #3
0
ファイル: g_alarm.c プロジェクト: Diskutant/RTCW-SP
/*
==============
alarmbox_use
==============
*/
void alarmbox_use(gentity_t *ent, gentity_t *other, gentity_t *foo)
{
	if(!(ent->active))
	{
		return;
	}

	if(ent->s.frame)
	{
		ent->s.frame = 0;
	}
	else
	{
		ent->s.frame = 1;
	}

	alarmbox_updateparts(ent, qtrue);

	if(other->client)
	{
		G_AddEvent(ent, EV_GENERAL_SOUND, ent->soundPos3);
	}

//	G_Printf("touched alarmbox\n");

}
コード例 #4
0
ファイル: g_alarm.c プロジェクト: ETrun/ETrun
/*
==============
alarmbox_updateparts
==============
*/
void alarmbox_updateparts(gentity_t *ent, qboolean matestoo) {
	gentity_t *t, *mate;
	qboolean  alarming = (ent->s.frame == 1);

	// update teammates
	if (matestoo) {
		for (mate = ent->teammaster; mate; mate = mate->teamchain) {
			if (mate == ent) {
				continue;
			}

			if (!(mate->active)) {     // don't update dead alarm boxes, they stay dead
				continue;
			}

			if (!(ent->active)) {     // destroyed, so just turn teammates off
				mate->s.frame = 0;
			} else {
				mate->s.frame = ent->s.frame;
			}

			alarmbox_updateparts(mate, qfalse);
		}
	}

	// update lights
	if (!ent->target) {
		return;
	}

	t = NULL;
	while ((t = G_FindByTargetname(t, ent->target)) != NULL) {
		if (t == ent) {
			G_DPrintf("WARNING: Entity used itself.\n");
		} else {
			// give the dlight the sound
			if (!Q_stricmp(t->classname, "dlight")) {
				t->soundLoop = ent->soundLoop;

				if (alarming) {
					if (!(t->r.linked)) {
						G_UseEntity(t, ent, 0);
					}
				} else {
					if (t->r.linked) {
						G_UseEntity(t, ent, 0);
					}
				}
			}
			// alarmbox can tell script_trigger about activation
			// (but don't trigger if dying, only activation)
			else if (!Q_stricmp(t->classname, "target_script_trigger") && ent->active) {   // not dead
				G_UseEntity(t, ent, 0);
			}
		}
	}
}
コード例 #5
0
ファイル: g_alarm.c プロジェクト: Justasic/RTCW-MP
/*
==============
alarmbox_finishspawning
==============
*/
void alarmbox_finishspawning( gentity_t *ent ) {
	gentity_t *mate;

	// make sure they all have the same master (picked arbitrarily.  last spawned)
	for ( mate = ent; mate; mate = mate->teamchain )
		mate->teammaster = ent->teammaster;

	// find lights and set their state
	alarmbox_updateparts( ent, qtrue );
}
コード例 #6
0
ファイル: g_alarm.c プロジェクト: ETrun/ETrun
/*
==============
alarmbox_die
==============
*/
void alarmbox_die(gentity_t *ent, gentity_t *inflictor, gentity_t *attacker, int damage, int mod) {
	// Nico, silent GCC
	(void)inflictor;
	(void)attacker;
	(void)damage;
	(void)mod;

	propExplosion(ent);
	ent->s.frame    = 2;
	ent->active     = qfalse;
	ent->takedamage = qfalse;
	alarmbox_updateparts(ent, qtrue);
}
コード例 #7
0
ファイル: g_alarm.c プロジェクト: ETrun/ETrun
/*
==============
alarmbox_use
==============
*/
void alarmbox_use(gentity_t *ent, gentity_t *other, gentity_t *foo) {
	// Nico, silent GCC
	(void)foo;

	if (!(ent->active)) {
		return;
	}

	if (ent->s.frame) {
		ent->s.frame = 0;
	} else {
		ent->s.frame = 1;
	}

	alarmbox_updateparts(ent, qtrue);
	if (other->client) {
		G_AddEvent(ent, EV_GENERAL_SOUND, ent->soundPos3);
	}
}