コード例 #1
0
ファイル: RoomTemplate.cpp プロジェクト: Cre3per/hl2sdk-csgo
void CRoomTemplate::LoadFromKeyValues( const char *pRoomName, KeyValues *pKeyValues )
{
    m_nTilesX = pKeyValues->GetInt( "TilesX", 1 );
    m_nTilesY = pKeyValues->GetInt( "TilesY", 1 );
    SetSpawnWeight( pKeyValues->GetInt( "SpawnWeight", MIN_SPAWN_WEIGHT ) );

    SetFullName( pRoomName );

    Q_strncpy( m_Description, pKeyValues->GetString( "RoomTemplateDescription", "" ), m_nMaxDescriptionLength );
    Q_strncpy( m_Soundscape, pKeyValues->GetString( "Soundscape", "" ), m_nMaxSoundscapeLength );

    SetTileType( pKeyValues->GetInt( "TileType", ASW_TILETYPE_UNKNOWN ) );

    m_Tags.RemoveAll();

    // search through all the exit subsections
    KeyValues *pkvSubSection = pKeyValues->GetFirstSubKey();
    bool bClearedExits = false;
    while ( pkvSubSection )
    {
        // mission details
        if ( Q_stricmp(pkvSubSection->GetName(), "EXIT")==0 )
        {
            if ( !bClearedExits )
            {
                // if we haven't cleared previous exits yet then do so now
                m_Exits.PurgeAndDeleteElements();
                bClearedExits = true;
            }
            CRoomTemplateExit *pExit = new CRoomTemplateExit();
            pExit->m_iXPos = pkvSubSection->GetInt("XPos");
            pExit->m_iYPos = pkvSubSection->GetInt("YPos");
            pExit->m_ExitDirection = (ExitDirection_t) pkvSubSection->GetInt("ExitDirection");
            pExit->m_iZChange = pkvSubSection->GetInt("ZChange");
            Q_strncpy( pExit->m_szExitTag, pkvSubSection->GetString( "ExitTag" ), sizeof( pExit->m_szExitTag ) );
            pExit->m_bChokepointGrowSource = !!pkvSubSection->GetInt("ChokeGrow", 0);

            // discard exits outside the room bounds
            if ( pExit->m_iXPos < 0 || pExit->m_iYPos < 0 || pExit->m_iXPos >= m_nTilesX || pExit->m_iYPos >= m_nTilesY )
            {
                delete pExit;
            }
            else
            {
                m_Exits.AddToTail(pExit);
            }
        }
        else if ( Q_stricmp(pkvSubSection->GetName(), "Tags")==0 && TagList() )
        {
            for ( KeyValues *sub = pkvSubSection->GetFirstSubKey(); sub != NULL; sub = sub->GetNextKey() )
            {
                if ( !Q_stricmp( sub->GetName(), "tag" ) )
                {
                    AddTag( sub->GetString() );
                }
            }
        }
        pkvSubSection = pkvSubSection->GetNextKey();
    }
}
コード例 #2
0
ファイル: RoomTemplate.cpp プロジェクト: Cre3per/hl2sdk-csgo
bool CRoomTemplate::AddTag( const char *szTag )
{
    if ( !TagList() )
        return false;

    // check it's a valid tag
    const char *pszFoundTag = TagList()->FindTag( szTag );
    if ( !pszFoundTag )
        return false;

    // check we don't have it already
    if ( HasTag( pszFoundTag ) )
        return false;

    m_Tags.AddToTail( pszFoundTag );
    return true;
}
コード例 #3
0
Data3D *MtlBlinnInputs3D::ProcessTagList(Request *req, Data3D *data, TagList &tags)
{
	// This is where we would in->GetValue(req) and stored the results in the MtlBlinnData3D object for any unmanaged inputs.

	if (!data)
		data = new MtlBlinnData3D(&MtlBlinnData3D::Reg, nil, TagList());

	if (data)
	{
		FuASSERT(data->IsTypeOf(CLSID_MtlBlinnData), (""));
		ProcessBlinnInputs(req, (MtlBlinnData3D *) data);
	}

	return BaseClass::ProcessTagList(req, data, tags);
}
コード例 #4
0
ファイル: RoomTemplate.cpp プロジェクト: Cre3per/hl2sdk-csgo
bool CRoomTemplate::RemoveTag( const char *szTag )
{
    if ( !TagList() )
        return false;

    for ( int i=0; i<m_Tags.Count(); i++ )
    {
        if ( !Q_stricmp( m_Tags[i], szTag ) )
        {
            m_Tags.Remove( i );
            return true;
        }
    }
    return false;
}