本文整理汇总了C++中idDict::GetVector方法的典型用法代码示例。如果您正苦于以下问题:C++ idDict::GetVector方法的具体用法?C++ idDict::GetVector怎么用?C++ idDict::GetVector使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类idDict
的用法示例。
在下文中一共展示了idDict::GetVector方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ParseSpawnArg
bool CStimResponseCollection::ParseSpawnArg( const idDict &args, idEntity *owner, const char sr_class, int index ) {
bool rc = false;
idStr str;
CStimPtr stim;
CResponsePtr resp;
CStimResponsePtr sr;
StimState state( SS_DISABLED );
StimType typeOfStim;
// Check if the entity contains either a stim or a response.
if( sr_class != 'S' && sr_class != 'R' ) {
DM_LOG( LC_STIM_RESPONSE, LT_ERROR )LOGSTRING( "Invalid sr_class value [%s]\r", str.c_str() );
goto Quit;
}
// Get the id of the stim/response type so we know what sub-class to create
args.GetString( va( "sr_type_%u", index ), "-1", str );
// This is invalid as an entity definition
if( str == "-1" ) {
sr.reset();
goto Quit;
}
// If the first character is alphanumeric, we check if it
// is a known id and convert it.
/* StimType */ typeOfStim = ST_DEFAULT;
if( ( str[0] >= 'a' && str[0] <= 'z' )
|| ( str[0] >= 'A' && str[0] <= 'Z' ) ) {
// Try to recognise the string as known Stim type
typeOfStim = CStimResponse::GetStimType( str );
// If the string hasn't been found, we have id == ST_DEFAULT.
if( typeOfStim == ST_DEFAULT ) {
DM_LOG( LC_STIM_RESPONSE, LT_ERROR )LOGSTRING( "Invalid sr_type id [%s]\r", str.c_str() );
sr.reset();
goto Quit;
}
} else if( str[0] >= '0' && str[0] <= '9' ) { // Is it numeric?
typeOfStim = ( StimType ) atol( str.c_str() );
} else { // neither a character nor a number, thus it is invalid.
DM_LOG( LC_STIM_RESPONSE, LT_ERROR )LOGSTRING( "Invalid sr_type id [%s]\r", str.c_str() );
sr.reset();
goto Quit;
}
if( sr_class == 'S' ) {
stim = CreateStim( owner, typeOfStim );
if( stim == NULL ) { // grayman #2862
goto Quit; // nasty goto!!
}
sr = stim;
} else if( sr_class == 'R' ) {
resp = CreateResponse( owner, typeOfStim );
sr = resp;
}
// Set stim response type
sr->m_StimTypeId = typeOfStim;
// Set stim response name string
sr->m_StimTypeName = str;
// Read stim response state from the def file
state = static_cast<StimState>( args.GetInt( va( "sr_state_%u", index ), "1" ) );
sr->SetEnabled( state == SS_ENABLED );
sr->m_Chance = args.GetFloat( va( "sr_chance_%u", index ), "1.0" );
// A stim also may have a radius
if( sr_class == 'S' ) {
stim->m_Radius = args.GetFloat( va( "sr_radius_%u", index ), "0" );
stim->m_RadiusFinal = args.GetFloat( va( "sr_radius_final_%u", index ), "-1" );
stim->m_FallOffExponent = args.GetInt( va( "sr_falloffexponent_%u", index ), "0" );
stim->m_bUseEntBounds = args.GetBool( va( "sr_use_bounds_%u", index ), "0" );
stim->m_bCollisionBased = args.GetBool( va( "sr_collision_%u", index ), "0" );
stim->m_Velocity = args.GetVector( va( "sr_velocity_%u", index ), "0 0 0" );
stim->m_Bounds[0] = args.GetVector( va( "sr_bounds_mins_%u", index ), "0 0 0" );
stim->m_Bounds[1] = args.GetVector( va( "sr_bounds_maxs_%u", index ), "0 0 0" );
// set up time interleaving so the stim isn't fired every frame
stim->m_TimeInterleave = args.GetInt( va( "sr_time_interval_%u", index ), "0" );
// greebo: Add fuzzyness to the timer (ranging from 0.9 - 1.3);
stim->m_TimeInterleave = static_cast<int>( stim->m_TimeInterleave * ( 0.9f + gameLocal.random.RandomFloat() * 0.4f ) );
// userfriendly stim duration time
stim->m_Duration = args.GetInt( va( "sr_duration_%u", index ), "0" );
stim->m_Magnitude = args.GetFloat( va( "sr_magnitude_%u", index ), "1.0" );
stim->m_MaxFireCount = args.GetInt( va( "sr_max_fire_count_%u", index ), "-1" );
// Check if we have a timer on this stim.
CreateTimer( args, stim, index );
} else { // this is only for responses
sr->m_ChanceTimer = args.GetInt( va( "sr_chance_timeout_%u", index ), "-1" );
resp->m_NumRandomEffects = args.GetInt( va( "sr_random_effects_%u", index ), "0" );
// Get the name of the script function for processing the response
args.GetString( "sr_script_" + str, "", str );
resp->m_ScriptFunction = str;
// Try to identify the ResponseEffect spawnargs
int effectIdx = 1;
while( effectIdx > 0 ) {
// Try to find a string like "sr_effect_2_1"
args.GetString( va( "sr_effect_%u_%u", index, effectIdx ), "", str );
if( str.IsEmpty() ) {
// Set the index to negative values to end the loop
effectIdx = -1;
} else {
// Assemble the postfix of this effect for later key/value lookup
// This is passed to the effect script eventually
DM_LOG( LC_STIM_RESPONSE, LT_DEBUG )LOGSTRING( "Adding response effect\r" );
resp->AddResponseEffect( str, va( "%u_%u", index, effectIdx ), args );
effectIdx++;
}
}
//.........这里部分代码省略.........