本文整理汇总了C++中SmartScriptTable::MoveNext方法的典型用法代码示例。如果您正苦于以下问题:C++ SmartScriptTable::MoveNext方法的具体用法?C++ SmartScriptTable::MoveNext怎么用?C++ SmartScriptTable::MoveNext使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SmartScriptTable
的用法示例。
在下文中一共展示了SmartScriptTable::MoveNext方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: SetDrop
// NOTE Mrz 21, 2007: <pvl> might need to handle the params the way SetGrab()
// does (separate param table for each of the grabbed objects).
// UPDATE Mrz 26, 2007: <pvl> done
bool CMultipleGrabHandler::SetDrop(SmartScriptTable &rParams)
{
SmartScriptTable dropParamsTable;
if (rParams->GetValue("params",dropParamsTable))
{
bool result = true;
IScriptTable::Iterator iter = dropParamsTable->BeginIteration();
int numGrabHandlers = m_handlers.size();
for (int i=0; dropParamsTable->MoveNext(iter) && i < numGrabHandlers; ++i)
{
SmartScriptTable params;
iter.value.CopyTo (params);
result = m_handlers[i]->SetDrop(params) & result;
}
dropParamsTable->EndIteration(iter);
return result;
}
else
{
bool result = true;
std::vector <CAnimatedGrabHandler*>::iterator it = m_handlers.begin();
std::vector <CAnimatedGrabHandler*>::iterator end = m_handlers.end();
for ( ; it != end; ++it)
result = (*it)->SetDrop(rParams) & result;
return result;
}
}
示例2: AddSynchedTable
// add a synch proxy table to an entity
void CScriptRMI::AddSynchedTable( IScriptTable * pEntityTable,
ScriptHandle id,
const char * name, SmartScriptTable dispatchTable )
{
SmartScriptTable synchedTable( pEntityTable->GetScriptSystem() );
SmartScriptTable hiddenTable( pEntityTable->GetScriptSystem() );
SmartScriptTable origTable;
pEntityTable->GetValue( name, origTable );
hiddenTable->Clone( dispatchTable );
hiddenTable->SetValue( "__index", hiddenTable );
IScriptTable::Iterator iter = origTable->BeginIteration();
while (origTable->MoveNext(iter))
{
if (iter.sKey)
{
if (hiddenTable->GetValueType( iter.sKey ) != svtNull)
GameWarning( "Replacing non-null value %s", iter.sKey );
ScriptAnyValue value;
origTable->GetValueAny( iter.sKey, value );
hiddenTable->SetValueAny( iter.sKey, value );
}
}
origTable->EndIteration(iter);
synchedTable->Delegate( hiddenTable );
synchedTable->SetValue( ID_FIELD, id );
synchedTable->SetValue( HIDDEN_FIELD, hiddenTable );
pEntityTable->SetValue( name, synchedTable );
}
示例3: SetGrab
bool CMultipleGrabHandler::SetGrab(SmartScriptTable &rParams)
{
// NOTE Mrz 20, 2007: <pvl> if we don't find 'params' param in the table,
// we assume that this is an old-style grab param table that's not aware of
// the possibility of multiple objects grabbed simultaneously.
SmartScriptTable grabParamsTable;
if (rParams->GetValue("params",grabParamsTable))
{
bool result = true;
IScriptTable::Iterator iter = grabParamsTable->BeginIteration();
while(grabParamsTable->MoveNext(iter))
{
CAnimatedGrabHandler * handler = new CAnimatedGrabHandler (m_pActor);
SmartScriptTable params;
iter.value.CopyTo (params);
result = handler->SetGrab(params) & result;
m_handlers.push_back (handler);
}
grabParamsTable->EndIteration(iter);
return result;
}
else
{
CAnimatedGrabHandler * handler = new CAnimatedGrabHandler (m_pActor);
m_handlers.push_back (handler);
return handler->SetGrab(rParams);
}
}
示例4: CheckVirtualInventoryRestrictions
//------------------------------------------------------------------------
int CScriptBind_Actor::CheckVirtualInventoryRestrictions(IFunctionHandler *pH, SmartScriptTable inventory, const char *itemClassName)
{
CActor *pActor = GetActor(pH);
if (!pActor)
return pH->EndFunction();
static std::vector<string> virtualInventory;
virtualInventory.reserve(inventory->Count());
IScriptTable::Iterator it=inventory->BeginIteration();
while(inventory->MoveNext(it))
{
const char *itemClass=0;
it.value.CopyTo(itemClass);
if (itemClass && itemClass[0])
virtualInventory.push_back(itemClass);
}
inventory->EndIteration(it);
bool result=pActor->CheckVirtualInventoryRestrictions(virtualInventory, itemClassName);
virtualInventory.resize(0);
if (result)
return pH->EndFunction(1);
return pH->EndFunction();
}
示例5: ValidateDispatchTable
// one-time validation of entity tables
bool CScriptRMI::ValidateDispatchTable( const char * clazz, SmartScriptTable dispatch, SmartScriptTable methods, bool bServerTable )
{
CryAutoCriticalSection lkDispatch(m_dispatchMutex);
std::map<string,size_t>::iterator iterN = m_entityClassToEntityTypeID.lower_bound(clazz);
if (iterN == m_entityClassToEntityTypeID.end() || iterN->first != clazz)
{
iterN = m_entityClassToEntityTypeID.insert( iterN, std::make_pair(clazz, m_entityClassToEntityTypeID.size()) );
CRY_ASSERT(iterN->second == m_dispatch.size());
m_dispatch.push_back(SDispatch());
}
SDispatch& dispatchTblCont = m_dispatch[iterN->second];
SFunctionDispatchTable& dispatchTbl = bServerTable ? dispatchTblCont.server : dispatchTblCont.client;
IScriptTable::Iterator iter = dispatch->BeginIteration();
while (dispatch->MoveNext(iter))
{
if (iter.sKey)
{
if (iter.sKey[0] == '_' && iter.sKey[1] == '_')
continue;
ScriptVarType type = methods->GetValueType( iter.sKey );
if (type != svtFunction)
{
GameWarning( "In class %s: function %s is exposed but not defined",
clazz, iter.sKey );
dispatch->EndIteration(iter);
return false;
}
}
else
{
int id = iter.nKey;
CRY_ASSERT(id>0);
id--;
if (id >= dispatchTbl.size())
dispatchTbl.resize(id+1);
SFunctionDispatch& dt = dispatchTbl[id];
if (iter.value.GetVarType() != svtString)
{
GameWarning("Expected a string in dispatch table, got type %d", iter.value.GetVarType());
dispatch->EndIteration(iter);
return false;
}
const char * funcData = iter.value.str;
const char * colon = strchr(funcData, ':');
if (colon == NULL)
{
dispatch->EndIteration(iter);
return false;
}
if (colon - funcData > MaxSynchedPropertyNameLength)
{
dispatch->EndIteration(iter);
return false;
}
memcpy( dt.name, funcData, colon-funcData );
dt.name[colon-funcData] = 0;
strcpy(dt.format, colon + 1);
}
}
dispatch->EndIteration(iter);
dispatch->SetValue( VALIDATED_FIELD, true );
if (bServerTable)
{
dispatchTblCont.m_serverDispatchScriptTable = dispatch;
}
else
{
dispatchTblCont.m_clientDispatchScriptTable = dispatch;
}
return true;
}
示例6: BuildSynchTable
// setup the meta-table for synched variables
bool CScriptRMI::BuildSynchTable( SmartScriptTable vars, SmartScriptTable cls, const char * name )
{
IScriptSystem * pSS = vars->GetScriptSystem();
SmartScriptTable synched( pSS );
SmartScriptTable defaultValues( pSS );
// TODO: Improve
IScriptTable::SUserFunctionDesc fd;
fd.pFunctor = functor_ret( SynchedNewIndexFunction );
fd.sFunctionName = "__newindex";
fd.sGlobalName = "<net-dispatch>";
fd.sFunctionParams = "(...)";
synched->AddFunction( fd );
std::vector<SSynchedPropertyInfo> properties;
IScriptTable::Iterator iter = vars->BeginIteration();
while (vars->MoveNext(iter))
{
if (iter.sKey)
{
int type;
if (!vars->GetValue(iter.sKey, type))
{
vars->EndIteration(iter);
pSS->RaiseError( "No type for %s", iter.sKey );
return false;
}
size_t len = strlen(iter.sKey);
if (len > MaxSynchedPropertyNameLength)
{
vars->EndIteration(iter);
pSS->RaiseError( "Synched var name '%s' too long (max is %d)",
iter.sKey, (int)MaxSynchedPropertyNameLength );
return false;
}
SSynchedPropertyInfo info;
strcpy( info.name, iter.sKey );
info.type = (EScriptSerializeType) type;
properties.push_back( info );
if (info.type == eSST_String)
defaultValues->SetValue( iter.sKey, "" );
else
defaultValues->SetValue( iter.sKey, 0 );
}
}
vars->EndIteration( iter );
if (properties.empty())
return true;
fd.pFunctor = NULL;
fd.pUserDataFunc = SerializeFunction;
fd.nDataSize = sizeof(SSynchedPropertyInfo) * properties.size();
fd.pDataBuffer = &properties[0];
fd.sFunctionName = SERIALIZE_FUNCTION;
fd.sFunctionParams = "(...)";
fd.sGlobalName = "<net-dispatch>";
synched->AddFunction( fd );
cls->SetValue( SERVER_SYNCHED_FIELD, synched );
cls->SetValue( "synched", defaultValues );
return true;
}
示例7: BuildDispatchTable
// build a script dispatch table - this table is the metatable for all
// dispatch proxy tables used (onClient, allClients, otherClients)
bool CScriptRMI::BuildDispatchTable(
SmartScriptTable methods,
SmartScriptTable classMethodTable,
SmartScriptTable cls,
const char * name )
{
IScriptSystem * pSS = methods->GetScriptSystem();
SmartScriptTable dispatch( pSS );
uint8 funcID = 0;
IScriptTable::SUserFunctionDesc fd;
SFunctionInfo info;
IScriptTable::Iterator iter = methods->BeginIteration();
while (methods->MoveNext(iter))
{
if (iter.sKey)
{
const char * function = iter.sKey;
if (strlen(function)>=2 && function[0] == '_' && function[1] == '_')
{
methods->EndIteration(iter);
pSS->RaiseError( "In Net.Expose: can't expose functions beginning with '__' (function was %s)",
function );
return false;
}
SmartScriptTable specTable;
if (!methods->GetValue(function, specTable))
{
methods->EndIteration(iter);
pSS->RaiseError( "In Net.Expose: function %s entry is not a table (in %s)",
function, name );
return false;
}
// fetch format
int count = specTable->Count();
if (count < 1)
{
methods->EndIteration(iter);
pSS->RaiseError( "In Net.Expose: function %s entry is an empty table (in %s)",
function, name );
return false;
}
else if (count-1 > MaxRMIParameters)
{
methods->EndIteration(iter);
pSS->RaiseError( "In Net.Expose: function %s has too many parameters (%d) (in %s)",
function, count-1, name );
return false;
}
int tempReliability;
if (!specTable->GetAt(1, tempReliability) || tempReliability < 0 || tempReliability >= eNRT_NumReliabilityTypes)
{
methods->EndIteration(iter);
pSS->RaiseError( "In Net.Expose: function %s has invalid reliability type %d (in %s)",
function, tempReliability, name );
return false;
}
ENetReliabilityType reliability = (ENetReliabilityType) tempReliability;
if (!specTable->GetAt(2, tempReliability) || tempReliability < 0 || tempReliability >= eRAT_NumAttachmentTypes)
{
methods->EndIteration(iter);
pSS->RaiseError( "In Net.Expose: function %s has invalid attachment type %d (in %s)",
function, tempReliability, name );
}
ERMIAttachmentType attachment = (ERMIAttachmentType) tempReliability;
string format;
format.reserve(count-1);
for (int i=3; i<=count; i++)
{
int type = 666;
if (!specTable->GetAt( i, type ) || type<-128 || type>127)
{
methods->EndIteration(iter);
pSS->RaiseError( "In Net.Expose: function %s has invalid serialization policy %d at %d (in %s)",
function, type, i, name );
return false;
}
format.push_back( (char) type );
}
CRY_ASSERT( format.length() <= MaxRMIParameters );
strcpy( info.format, format.c_str() );
info.funcID = funcID;
info.reliability = reliability;
info.attachment = attachment;
fd.pUserDataFunc = ProxyFunction;
fd.sFunctionName = function;
fd.nDataSize = sizeof(SFunctionInfo);
fd.pDataBuffer = &info;
fd.sGlobalName = "<net-dispatch>";
fd.sFunctionParams = "(...)";
//.........这里部分代码省略.........