void LogPrecache( char const *soundname ) { if ( !m_bLogPrecache ) return; // Make sure we only show the message once if ( UTL_INVAL_SYMBOL != m_PrecachedScriptSounds.Find( soundname ) ) return; if (m_hPrecacheLogFile == FILESYSTEM_INVALID_HANDLE) { StartLog(); } m_PrecachedScriptSounds.AddString( soundname ); if (m_hPrecacheLogFile != FILESYSTEM_INVALID_HANDLE) { filesystem->Write("\"", 1, m_hPrecacheLogFile); filesystem->Write(soundname, Q_strlen(soundname), m_hPrecacheLogFile); filesystem->Write("\"\n", 2, m_hPrecacheLogFile); } else { Warning( "Disabling precache logging due to file i/o problem!!!\n" ); m_bLogPrecache = false; } }
//----------------------------------------------------------------------------- // Purpose: Constructor //----------------------------------------------------------------------------- AnimationController::AnimationController(Panel *parent) : BaseClass(parent, NULL) { m_hSizePanel = 0; m_nScreenBounds[ 0 ] = m_nScreenBounds[ 1 ] = -1; m_nScreenBounds[ 2 ] = m_nScreenBounds[ 3 ] = -1; m_bAutoReloadScript = false; // always invisible SetVisible(false); SetProportional(true); // get the names of common types m_sPosition = g_ScriptSymbols.AddString("position"); m_sSize = g_ScriptSymbols.AddString("size"); m_sFgColor = g_ScriptSymbols.AddString("fgcolor"); m_sBgColor = g_ScriptSymbols.AddString("bgcolor"); m_sXPos = g_ScriptSymbols.AddString("xpos"); m_sYPos = g_ScriptSymbols.AddString("ypos"); m_sWide = g_ScriptSymbols.AddString("wide"); m_sTall = g_ScriptSymbols.AddString("tall"); m_flCurrentTime = 0.0f; }
void AddNewTranslation( const char *pOriginalMaterialName, const char *pNewMaterialName ) { NameTranslationLookup_t newEntry; newEntry.m_OriginalFileName = s_SymbolTable.AddString( pOriginalMaterialName ); newEntry.m_PatchFileName = s_SymbolTable.AddString( pNewMaterialName ); s_MapPatchedMatToOriginalMat.Insert( newEntry ); }
//----------------------------------------------------------------------------- // Purpose: mark or add // Input : *pEntity - // Output : Returns true on success, false on failure. //----------------------------------------------------------------------------- bool CPrecacheOtherList::AddOrMarkPrecached( const char *pClassname ) { CUtlSymbol sym = m_list.Find( pClassname ); if ( sym.IsValid() ) return false; m_list.AddString( pClassname ); return true; }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CDecalEmitterSystem::LevelInitPreEntity() { // Precache all entries int c = m_AllDecals.Count(); for ( int i = 0 ; i < c; i++ ) { DecalListEntry& e = m_AllDecals[ i ]; #if defined( CLIENT_DLL ) e.precache_index = effects->Draw_DecalIndexFromName( (char *)m_DecalFileNames.String( e.name ) ); #else e.precache_index = engine->PrecacheDecal( m_DecalFileNames.String( e.name ) ); #endif } }
void CMod::SetGameDir( const char *dir ) { CUtlSymbol lookup; lookup = g_GameDirTable.Find( dir ); if ( lookup != UTL_INVAL_SYMBOL ) { gamedir = lookup; } else { gamedir = g_GameDirTable.AddString( dir ); } }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void AnimationController::RunCmd_SetString( PostedMessage_t &msg ) { Panel *panel = FindSiblingByName(g_ScriptSymbols.String(msg.event)); Assert(panel != NULL); if (!panel) return; KeyValues *inputData = new KeyValues(g_ScriptSymbols.String(msg.variable)); inputData->SetString(g_ScriptSymbols.String(msg.variable), g_ScriptSymbols.String(msg.variable2)); if (!panel->SetInfo(inputData)) { // Assert(!("Unhandlable var in AnimationController::SetValue())")); } inputData->deleteThis(); }
char const *CBugReporter::GetSeverity( int index ) { if ( index < 0 || index >= m_Severity.Count() ) return "<<Invalid>>"; return m_BugStrings.String( m_Severity[ index ] ); }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void Button::OnMousePressed(MouseCode code) { if (!IsEnabled()) return; if (!IsMouseClickEnabled(code)) return; if (_activationType == ACTIVATE_ONPRESSED) { DoClick(); return; } // play activation sound if (m_sDepressedSoundName != UTL_INVAL_SYMBOL) { surface()->PlaySound(g_ButtonSoundNames.String(m_sDepressedSoundName)); } if (IsUseCaptureMouseEnabled() && _activationType == ACTIVATE_ONPRESSEDANDRELEASED) { { RequestFocus(); SetSelected(true); Repaint(); } // lock mouse input to going to this button input()->SetMouseCapture(GetVPanel()); } }
char const *CBugReporter::GetReportType( int index ) { if ( index < 0 || index >= m_ReportType.Count() ) return "<<Invalid>>"; return m_BugStrings.String( m_ReportType[ index ] ); }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CDecalEmitterSystem::Clear() { m_DecalFileNames.RemoveAll(); m_Decals.Purge(); m_AllDecals.Purge(); m_GameMaterialTranslation.Purge(); }
//----------------------------------------------------------------------------- // Purpose: Sets which script file to use //----------------------------------------------------------------------------- bool AnimationController::SetScriptFile( VPANEL sizingPanel, const char *fileName, bool wipeAll /*=false*/ ) { m_hSizePanel = sizingPanel; if ( wipeAll ) { // clear the current script m_Sequences.RemoveAll(); m_ScriptFileNames.RemoveAll(); CancelAllAnimations(); } // Store off this filename for reloading later on (if we don't have it already) UtlSymId_t sFilename = g_ScriptSymbols.AddString( fileName ); if ( m_ScriptFileNames.Find( sFilename ) == m_ScriptFileNames.InvalidIndex() ) { m_ScriptFileNames.AddToTail( sFilename ); } UpdateScreenSize(); // load the new script file return LoadScriptFile( fileName ); }
void Button::PlayButtonReleasedSound() { // check for playing a transition sound if ( m_sReleasedSoundName != UTL_INVAL_SYMBOL ) { surface()->PlaySound( g_ButtonSoundNames.String( m_sReleasedSoundName ) ); } }
void WaveTrace( char const *wavname, char const *funcname ) { if ( IsX360() && !IsDebug() ) { return; } static CUtlSymbolTable s_WaveTrace; // Make sure we only show the message once if ( UTL_INVAL_SYMBOL == s_WaveTrace.Find( wavname ) ) { DevMsg( "%s directly referenced wave %s (should use game_sounds.txt system instead)\n", funcname, wavname ); s_WaveTrace.AddString( wavname ); } }
bool CUtlSymbolTable::CLess::operator()( const CStringPoolIndex &i1, const CStringPoolIndex &i2 ) const { // Need to do pointer math because CUtlSymbolTable is used in CUtlVectors, and hence // can be arbitrarily moved in memory on a realloc. Yes, this is portable. In reality, // right now at least, because m_LessFunc is the first member of CUtlRBTree, and m_Lookup // is the first member of CUtlSymbolTabke, this == pTable CUtlSymbolTable *pTable = (CUtlSymbolTable *)( (byte *)this - offsetof(CUtlSymbolTable::CTree, m_LessFunc) ) - offsetof(CUtlSymbolTable, m_Lookup ); const char* str1 = (i1 == INVALID_STRING_INDEX) ? pTable->m_pUserSearchString : pTable->StringFromIndex( i1 ); const char* str2 = (i2 == INVALID_STRING_INDEX) ? pTable->m_pUserSearchString : pTable->StringFromIndex( i2 ); if ( !pTable->m_bInsensitive ) return strcmp( str1, str2 ) < 0; else return strcmpi( str1, str2 ) < 0; }
//----------------------------------------------------------------------------- // Purpose: a posted message to stop animations of a specific type //----------------------------------------------------------------------------- void AnimationController::RunCmd_StopAnimation(PostedMessage_t &msg) { Panel *panel = FindSiblingByName(g_ScriptSymbols.String(msg.event)); Assert(panel != NULL); if (!panel) return; RemoveQueuedAnimationByType(panel, msg.variable, msg.seqName); }
void FinishLog() { if ( FILESYSTEM_INVALID_HANDLE != m_hPrecacheLogFile ) { filesystem->Close( m_hPrecacheLogFile ); m_hPrecacheLogFile = FILESYSTEM_INVALID_HANDLE; } m_PrecachedScriptSounds.RemoveAll(); }
void Button_Panel::OnMousePressed(vgui::MouseCode MouseCode) { BaseClass::OnMousePressed(MouseCode); if (MouseCode == MOUSE_LEFT) { if (m_sDepressedSoundName != UTL_INVAL_SYMBOL) vgui::surface()->PlaySound(g_ButtonSoundNames.String(m_sDepressedSoundName)); } }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void Button::SetReleasedSound(const char *sound) { if (sound) { m_sReleasedSoundName = g_ButtonSoundNames.AddString(sound); } else { m_sReleasedSoundName = UTL_INVAL_SYMBOL; } }
//----------------------------------------------------------------------------- // Purpose: starts a variable animation //----------------------------------------------------------------------------- void AnimationController::StartCmd_Animate(UtlSymId_t seqName, AnimCmdAnimate_t &cmd, Panel *pWithinParent) { Assert( pWithinParent ); // make sure the child exists Panel *panel = pWithinParent->FindChildByName(g_ScriptSymbols.String(cmd.panel),true); if ( !panel ) { // Check the parent Panel *parent = GetParent(); if ( !Q_stricmp( parent->GetName(), g_ScriptSymbols.String(cmd.panel) ) ) { panel = parent; } } if (!panel) return; StartCmd_Animate(panel, seqName, cmd); }
void Button_Panel::OnMouseReleased(vgui::MouseCode MouseCode) { BaseClass::OnMouseReleased(MouseCode); if (MouseCode == MOUSE_LEFT) { if (m_sReleasedSoundName != UTL_INVAL_SYMBOL) vgui::surface()->PlaySound(g_ButtonSoundNames.String(m_sReleasedSoundName)); GetParent()->OnCommand(CommandShared); } }
//----------------------------------------------------------------------------- // Purpose: Activate a button click. //----------------------------------------------------------------------------- void Button::DoClick() { SetSelected(true); FireActionSignal(); // check for playing a transition sound if (m_sReleasedSoundName != UTL_INVAL_SYMBOL) { surface()->PlaySound(g_ButtonSoundNames.String(m_sReleasedSoundName)); } SetSelected(false); }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void AnimationController::RunCmd_SetFont( PostedMessage_t &msg ) { Panel *parent = msg.parent.Get(); if ( !parent ) { parent = GetParent(); } Panel *panel = parent->FindChildByName(g_ScriptSymbols.String(msg.event), true); Assert(panel != NULL); if (!panel) return; KeyValues *inputData = new KeyValues(g_ScriptSymbols.String(msg.variable)); inputData->SetString(g_ScriptSymbols.String(msg.variable), g_ScriptSymbols.String(msg.variable2)); if (!panel->SetInfo(inputData)) { // Assert(!("Unhandlable var in AnimationController::SetValue())")); } inputData->deleteThis(); }
const char *GetOriginalMaterialNameForPatchedMaterial( const char *pPatchMaterialName ) { const char *pRetName = NULL; int id; NameTranslationLookup_t lookup; lookup.m_PatchFileName = s_SymbolTable.AddString( pPatchMaterialName ); do { id = s_MapPatchedMatToOriginalMat.Find( lookup ); if( id >= 0 ) { NameTranslationLookup_t &found = s_MapPatchedMatToOriginalMat[id]; lookup.m_PatchFileName = found.m_OriginalFileName; pRetName = s_SymbolTable.String( found.m_OriginalFileName ); } } while( id >= 0 ); if( !pRetName ) { // This isn't a patched material, so just return the original name. return pPatchMaterialName; } return pRetName; }
HSOUNDSCRIPTHANDLE PrecacheScriptSound( const char *soundname ) { int soundIndex = soundemitterbase->GetSoundIndex( soundname ); if ( !soundemitterbase->IsValidIndex( soundIndex ) ) { if ( Q_stristr( soundname, ".wav" ) || Q_strstr( soundname, ".mp3" ) ) { g_bPermitDirectSoundPrecache = true; CBaseEntity::PrecacheSound( soundname ); g_bPermitDirectSoundPrecache = false; return SOUNDEMITTER_INVALID_HANDLE; } #if !defined( CLIENT_DLL ) if ( soundname[ 0 ] ) { static CUtlSymbolTable s_PrecacheScriptSoundFailures; // Make sure we only show the message once if ( UTL_INVAL_SYMBOL == s_PrecacheScriptSoundFailures.Find( soundname ) ) { DevMsg( "PrecacheScriptSound '%s' failed, no such sound script entry\n", soundname ); s_PrecacheScriptSoundFailures.AddString( soundname ); } } #endif return (HSOUNDSCRIPTHANDLE)soundIndex; } #if !defined( CLIENT_DLL ) LogPrecache( soundname ); #endif InternalPrecacheWaves( soundIndex ); return (HSOUNDSCRIPTHANDLE)soundIndex; }
//----------------------------------------------------------------------------- // Purpose: Set armed state. //----------------------------------------------------------------------------- void Button::SetArmed(bool state) { if ( _buttonFlags.IsFlagSet( ARMED ) != state ) { _buttonFlags.SetFlag( ARMED, state ); RecalculateDepressedState(); InvalidateLayout(false); // play any sounds specified if (state && m_sArmedSoundName != UTL_INVAL_SYMBOL) { surface()->PlaySound(g_ButtonSoundNames.String(m_sArmedSoundName)); } } }
//----------------------------------------------------------------------------- // Purpose: Set armed state. //----------------------------------------------------------------------------- void Button::SetArmed(bool state) { if (_armed != state) { _armed = state; RecalculateDepressedState(); InvalidateLayout(false); // play any sounds specified if (_armed && m_sArmedSoundName != UTL_INVAL_SYMBOL) { surface()->PlaySound(g_ButtonSoundNames.String(m_sArmedSoundName)); } } }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- int AnimationController::GetRelativeOffset( AnimAlign_t& align, bool xcoord ) { if ( !align.relativePosition ) return 0; Panel *panel = GetParent()->FindChildByName(g_ScriptSymbols.String(align.alignPanel), true); if ( !panel ) return 0; int x, y, w, h; panel->GetBounds( x, y, w, h ); int offset =0; switch ( align.alignment ) { default: case a_northwest: offset = xcoord ? x : y; break; case a_north: offset = xcoord ? ( x + w ) / 2 : y; break; case a_northeast: offset = xcoord ? ( x + w ) : y; break; case a_west: offset = xcoord ? x : ( y + h ) / 2; break; case a_center: offset = xcoord ? ( x + w ) / 2 : ( y + h ) / 2; break; case a_east: offset = xcoord ? ( x + w ) : ( y + h ) / 2; break; case a_southwest: offset = xcoord ? x : ( y + h ); break; case a_south: offset = xcoord ? ( x + w ) / 2 : ( y + h ); break; case a_southeast: offset = xcoord ? ( x + w ) : ( y + h ); break; } return offset; }
//----------------------------------------------------------------------------- // Purpose: a posted message to stop all animations relevant to a specified panel //----------------------------------------------------------------------------- void AnimationController::RunCmd_StopPanelAnimations(PostedMessage_t &msg) { Panel *panel = FindSiblingByName(g_ScriptSymbols.String(msg.event)); Assert(panel != NULL); if (!panel) return; // loop through all the active animations cancelling any that // are operating on said panel, except for the event specified for (int i = 0; i < m_ActiveAnimations.Count(); i++) { if (m_ActiveAnimations[i].panel == panel && m_ActiveAnimations[i].seqName != msg.seqName) { m_ActiveAnimations.Remove(i); --i; } } }
void StartLog() { m_PrecachedScriptSounds.RemoveAll(); if ( !m_bLogPrecache ) return; if ( FILESYSTEM_INVALID_HANDLE != m_hPrecacheLogFile ) { return; } filesystem->CreateDirHierarchy("reslists", "DEFAULT_WRITE_PATH"); // open the new level reslist char path[_MAX_PATH]; Q_snprintf(path, sizeof(path), "reslists\\%s.snd", gpGlobals->mapname.ToCStr() ); m_hPrecacheLogFile = filesystem->Open(path, "wt", "GAME"); }