Portable Half-Life SDK. GoldSource and Xash3D. Crossplatform.
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.

99 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", (double)pev->origin.x, (double)pev->origin.y, (double)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 );
}