mirror of
https://github.com/mapbase-source/source-sdk-2013.git
synced 2025-02-05 10:10:42 +03:00
Add recursive KV read/write on CScriptKeyValues
This commit is contained in:
parent
f5837d068f
commit
2d183a8e2a
@ -206,19 +206,28 @@ void CScriptKeyValues::ScriptReleaseKeyValues( )
|
|||||||
m_pKeyValues = NULL;
|
m_pKeyValues = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CScriptKeyValues::TableToSubKeys( HSCRIPT hTable )
|
void KeyValues_TableToSubKeys( HSCRIPT hTable, KeyValues *pKV )
|
||||||
{
|
{
|
||||||
int nIterator = -1;
|
int nIterator = -1;
|
||||||
ScriptVariant_t varKey, varValue;
|
ScriptVariant_t varKey, varValue;
|
||||||
while ((nIterator = g_pScriptVM->GetKeyValue( hTable, nIterator, &varKey, &varValue )) != -1)
|
while ((nIterator = g_pScriptVM->GetKeyValue( hTable, nIterator, &varKey, &varValue )) != -1)
|
||||||
{
|
{
|
||||||
switch (varValue.m_type)
|
if ( varKey.m_type == FIELD_CSTRING )
|
||||||
{
|
{
|
||||||
case FIELD_CSTRING: m_pKeyValues->SetString( varKey.m_pszString, varValue.m_pszString ); break;
|
switch ( varValue.m_type )
|
||||||
case FIELD_INTEGER: m_pKeyValues->SetInt( varKey.m_pszString, varValue.m_int ); break;
|
{
|
||||||
case FIELD_FLOAT: m_pKeyValues->SetFloat( varKey.m_pszString, varValue.m_float ); break;
|
case FIELD_CSTRING: pKV->SetString( varKey.m_pszString, varValue.m_pszString ); break;
|
||||||
case FIELD_BOOLEAN: m_pKeyValues->SetBool( varKey.m_pszString, varValue.m_bool ); break;
|
case FIELD_INTEGER: pKV->SetInt( varKey.m_pszString, varValue.m_int ); break;
|
||||||
case FIELD_VECTOR: m_pKeyValues->SetString( varKey.m_pszString, CFmtStr( "%f %f %f", varValue.m_pVector->x, varValue.m_pVector->y, varValue.m_pVector->z ) ); break;
|
case FIELD_FLOAT: pKV->SetFloat( varKey.m_pszString, varValue.m_float ); break;
|
||||||
|
case FIELD_BOOLEAN: pKV->SetBool( varKey.m_pszString, varValue.m_bool ); break;
|
||||||
|
case FIELD_VECTOR: pKV->SetString( varKey.m_pszString, CFmtStr( "%f %f %f", varValue.m_pVector->x, varValue.m_pVector->y, varValue.m_pVector->z ) ); break;
|
||||||
|
case FIELD_HSCRIPT:
|
||||||
|
{
|
||||||
|
KeyValues *subKey = pKV->FindKey( varKey.m_pszString, true );
|
||||||
|
KeyValues_TableToSubKeys( varValue, subKey );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
g_pScriptVM->ReleaseValue( varKey );
|
g_pScriptVM->ReleaseValue( varKey );
|
||||||
@ -226,19 +235,38 @@ void CScriptKeyValues::TableToSubKeys( HSCRIPT hTable )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CScriptKeyValues::SubKeysToTable( HSCRIPT hTable )
|
void KeyValues_SubKeysToTable( KeyValues *pKV, HSCRIPT hTable )
|
||||||
{
|
{
|
||||||
FOR_EACH_SUBKEY( m_pKeyValues, key )
|
FOR_EACH_SUBKEY( pKV, key )
|
||||||
{
|
{
|
||||||
switch ( key->GetDataType() )
|
switch ( key->GetDataType() )
|
||||||
{
|
{
|
||||||
case KeyValues::TYPE_STRING: g_pScriptVM->SetValue( hTable, key->GetName(), key->GetString() ); break;
|
case KeyValues::TYPE_STRING: g_pScriptVM->SetValue( hTable, key->GetName(), key->GetString() ); break;
|
||||||
case KeyValues::TYPE_INT: g_pScriptVM->SetValue( hTable, key->GetName(), key->GetInt() ); break;
|
case KeyValues::TYPE_INT: g_pScriptVM->SetValue( hTable, key->GetName(), key->GetInt() ); break;
|
||||||
case KeyValues::TYPE_FLOAT: g_pScriptVM->SetValue( hTable, key->GetName(), key->GetFloat() ); break;
|
case KeyValues::TYPE_FLOAT: g_pScriptVM->SetValue( hTable, key->GetName(), key->GetFloat() ); break;
|
||||||
|
case KeyValues::TYPE_NONE:
|
||||||
|
{
|
||||||
|
ScriptVariant_t subTable;
|
||||||
|
g_pScriptVM->CreateTable( subTable );
|
||||||
|
g_pScriptVM->SetValue( hTable, key->GetName(), subTable );
|
||||||
|
KeyValues_SubKeysToTable( key, subTable );
|
||||||
|
g_pScriptVM->ReleaseValue( subTable );
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CScriptKeyValues::TableToSubKeys( HSCRIPT hTable )
|
||||||
|
{
|
||||||
|
KeyValues_TableToSubKeys( hTable, m_pKeyValues );
|
||||||
|
}
|
||||||
|
|
||||||
|
void CScriptKeyValues::SubKeysToTable( HSCRIPT hTable )
|
||||||
|
{
|
||||||
|
KeyValues_SubKeysToTable( m_pKeyValues, hTable );
|
||||||
|
}
|
||||||
|
|
||||||
HSCRIPT CScriptKeyValues::ScriptFindOrCreateKey( const char *pszName )
|
HSCRIPT CScriptKeyValues::ScriptFindOrCreateKey( const char *pszName )
|
||||||
{
|
{
|
||||||
KeyValues *pKeyValues = m_pKeyValues->FindKey(pszName, true);
|
KeyValues *pKeyValues = m_pKeyValues->FindKey(pszName, true);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user