//------------------------------------------------------------------------ int CScriptBind_UIAction::GetArray( IFunctionHandler *pH, const char * elementName, int instanceID, const char* arrayName ) { IUIElement* pElement = GetElement( elementName, instanceID ); if ( pElement ) { const SUIParameterDesc* pArrayDesc = pElement->GetArrayDesc( arrayName ); SUIArguments vals; if ( pArrayDesc && pElement->GetArray( pArrayDesc, vals ) ) { SmartScriptTable res(m_pSS); string val; for (int i = 0; i < vals.GetArgCount(); ++i) { vals.GetArg(i).GetValueWithConversion(val); res->SetAt( i+1, val.c_str() ); } return pH->EndFunction( res ); } UIACTION_WARNING( "LUA: Element %s has no array %s", elementName, arrayName ); } else { UIACTION_WARNING( "LUA: UIElement %s does not exist", elementName ); } return pH->EndFunction( false ); }
void CFlashUIFromArrayNode::ProcessEvent( EFlowEvent event,SActivationInfo* pActInfo ) { if (event == eFE_Activate && IsPortActive( pActInfo, eI_Array )) { SUIArguments args( GetPortString( pActInfo, eI_Array ).c_str()); ActivateOutput( pActInfo, eO_Count, args.GetArgCount()); SUIArguments leftOver; int port = eO_Val1; for (int i = 0; i < args.GetArgCount(); ++i) { string arg; args.GetArg( i, arg ); if (port + i < eO_LeftOver) { ActivateOutput( pActInfo, port + i, arg ); } else { leftOver.AddArgument( arg ); } } if (leftOver.GetArgCount() > 0) { ActivateOutput( pActInfo, eO_LeftOver, string( leftOver.GetAsString())); } } }
//------------------------------------------------------------------------ bool SUIToLuaConversationHelper::UIArgsToLuaTable(const SUIArguments &args, SmartScriptTable table) { bool res = true; for (int i = 0; i < args.GetArgCount(); ++i) { switch (args.GetArgType(i)) { case eUIDT_Bool: SUIConvHelperTmpl::ArgToLuaTable<bool>(args, table, i); break; case eUIDT_Int: SUIConvHelperTmpl::ArgToLuaTable<int>(args, table, i); break; case eUIDT_Float: SUIConvHelperTmpl::ArgToLuaTable<float>(args, table, i); break; case eUIDT_EntityId: SUIConvHelperTmpl::ArgToLuaTable<EntityId>(args, table, i); break; case eUIDT_Vec3: SUIConvHelperTmpl::ArgToLuaTable<Vec3>(args, table, i); break; case eUIDT_String: case eUIDT_WString: SUIConvHelperTmpl::ArgToLuaTable<string>(args, table, i); break; case eUIDT_Any: { bool ok = SUIConvHelperTmpl::TryArgToLuaTable<int>(args, table, i) || SUIConvHelperTmpl::TryArgToLuaTable<float>(args, table, i) || SUIConvHelperTmpl::TryArgToLuaTable<string>(args, table, i); res &= ok; } default: res = false; } } return res; }