You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
2.3 KiB
98 lines
2.3 KiB
/*** |
|
* |
|
* Copyright (c) 1996-2001, Valve LLC. All rights reserved. |
|
* |
|
* This product contains software technology licensed from Id |
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc. |
|
* All Rights Reserved. |
|
* |
|
* Use, distribution, and modification of this source code and/or resulting |
|
* object code is restricted to non-commercial enhancements to products from |
|
* Valve LLC. All other use, distribution, or modification is prohibited |
|
* without written permission from Valve LLC. |
|
* |
|
****/ |
|
|
|
#include "extdll.h" |
|
#include "util.h" |
|
#include "cbase.h" |
|
#include "player.h" |
|
#include "gamerules.h" |
|
#include "mp3.h" |
|
|
|
extern int gmsgPlayMP3; |
|
#define SF_AMBIENTMP3_LOOP 1 |
|
|
|
LINK_ENTITY_TO_CLASS( ambient_mp3, CAmbientMP3 ) |
|
|
|
CAmbientMP3 *CAmbientMP3::AmbientMP3Create( const char *pszSound ) |
|
{ |
|
// Create a new entity with CCrossbowBolt private data |
|
CAmbientMP3 *pMPlayer = GetClassPtr( (CAmbientMP3 *)NULL ); |
|
pMPlayer->pev->classname = MAKE_STRING( "ambient_mp3" ); |
|
pMPlayer->pev->message = MAKE_STRING( pszSound ); |
|
pMPlayer->Spawn(); |
|
|
|
return pMPlayer; |
|
} |
|
|
|
void CAmbientMP3::Spawn( void ) |
|
{ |
|
if( pev->message && strlen( STRING( pev->message ) ) >= 1 ) |
|
{ |
|
pev->solid = SOLID_NOT; |
|
pev->movetype = MOVETYPE_NONE; |
|
SetUse( &CAmbientMP3::ToggleUse ); |
|
} |
|
else |
|
{ |
|
ALERT( at_console, "ambient_mp3 without soundfile at: %f, %f, %f, removing self...\n", pev->origin.x, pev->origin.y, pev->origin.z ); |
|
UTIL_Remove( this ); |
|
} |
|
} |
|
|
|
void CAmbientMP3::ToggleUse( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value ) |
|
{ |
|
edict_t *pClient; |
|
const char *pszSound; |
|
int i; |
|
BOOL loop; |
|
|
|
loop = pev->spawnflags & SF_AMBIENTMP3_LOOP; |
|
pszSound = STRING( pev->message ); |
|
|
|
if( FStrEq( pszSound, "#po_soundtrack#" ) ) |
|
{ |
|
pszSound = 0; |
|
|
|
for( i = 0; i < g_soundtrackCount; i++ ) |
|
{ |
|
if( FStrEq( g_soundtracklist[i].mapname, STRING( gpGlobals->mapname ) ) ) |
|
{ |
|
pszSound = g_soundtracklist[i].soundfile; |
|
loop = g_soundtracklist[i].loop; |
|
break; |
|
} |
|
} |
|
} |
|
|
|
if( !pszSound ) |
|
{ |
|
UTIL_Remove( this ); |
|
return; |
|
} |
|
|
|
// manually find the single player. |
|
pClient = g_engfuncs.pfnPEntityOfEntIndex( 1 ); |
|
|
|
if( pClient ) |
|
{ |
|
MESSAGE_BEGIN( MSG_ONE, gmsgPlayMP3, NULL, pClient ); |
|
WRITE_STRING( pszSound ); |
|
WRITE_BYTE( loop ); |
|
MESSAGE_END(); |
|
} |
|
|
|
UTIL_Remove( this ); |
|
} |
|
|
|
|