Пример #1
0
DLL_LOCAL enumtype* registerEnum(const char* name,int def = 0)
{
	return registerEnum(name,typeid(T).name(),def);
}
Пример #2
0
  error System::init(const char* processorFile)
  {
    m_lastError = NULL;
    m_lastErrorSize = 0;

    LuaState L = luaL_newstate();
    m_luaState = L;
    lua_atpanic(L,LuaStatePanicHandler);

#ifdef _DEBUG
    /* more verbose error messages, including full stack info */
    lua_pushboolean(L,1);
    lua_setglobal(L,"fxdebug");
#endif

    luaL_openlibs(L);
    if (luaL_dofile(L, processorFile)){
      updateError();
      return true;
    }
    // prepare the stack for fast access to frequent tables
    lua_getglobal(L,"fxenums");
    assert(lua_type(L,-1) == LUA_TTABLE);
    assert(lua_gettop(L)  == FXENUMS);
    lua_getglobal(L,"fxlib");
    assert(lua_type(L,-1) == LUA_TTABLE);
    assert(lua_gettop(L)  == FXBUILDER);
    lua_getglobal(L,"fxids");
    assert(lua_type(L,-1) == LUA_TTABLE);
    assert(lua_gettop(L)  == FXIDS);
    lua_getglobal(L,"fxerror");
    assert(lua_type(L,-1) == LUA_TFUNCTION);
    assert(lua_gettop(L)  == FXERROR);
    lua_getglobal(L,"fxlights");
    assert(lua_type(L,-1) == LUA_TTABLE);
    assert(lua_gettop(L)  == FXLIGHTS);
    lua_getglobal(L,"fxuserenums");
    assert(lua_type(L,-1) == LUA_TTABLE);
    assert(lua_gettop(L)  == FXUSERENUMS);
    

    // initialize enum table
    lua_getfield(L,FXENUMS,"effect");
    for (int i = 0; i < NUM_EFFECTS; i++){
      registerEnum(L,EffectType_toString((EffectType)i),i);
    }
    lua_pop(L,1);

    lua_getfield(L,FXENUMS,"parameter");
    for (int i = 0; i < NUM_PARAMETERS; i++){
      registerEnum(L,ParameterType_toString((ParameterType)i),i);
    }
    lua_pop(L,1);

    lua_getfield(L,FXENUMS,"generator");
    for (int i = 0; i < NUM_GENERERATORS; i++){
      registerEnum(L,GeneratorType_toString((GeneratorType)i),i);
    }
    lua_pop(L,1);

    lua_getfield(L,FXENUMS,"dataconvert");
    for (int i = 0; i < NUM_DATACONVERTS; i++){
      registerEnum(L,DataConvert_toString((DataConvert)i),i);
    }
    lua_pop(L,1);

    lua_getfield(L,FXENUMS,"group");
    for (int i = 0; i < NUM_GROUPS; i++){
      registerEnum(L,GroupType_toString((GroupType)i),i);
    }
    lua_pop(L,1);

    lua_getfield(L,FXENUMS,"storage");
    for (int i = 0; i < NUM_STORAGES; i++){
      registerEnum(L,StorageType_toString((StorageType)i),i);
    }
    lua_pop(L,1);

    // make effectlib enum indexable
    for (int i = 0; i < NUM_EFFECTS; i++){
      lua_getfield(L,FXBUILDER, EffectType_toString((EffectType)i) );
      assert(lua_type(L,-1) == LUA_TTABLE);
      lua_rawseti (L,FXBUILDER, i );
    }

    // make generatorlib enum indexable
    lua_getglobal(L,"fxgenerators");
    assert(lua_type(L,-1) == LUA_TTABLE);
    for (int i = 0; i < NUM_GENERERATORS; i++){
      lua_getfield(L,-1, GeneratorType_toString((GeneratorType)i) );
      assert(lua_type(L,-1) == LUA_TTABLE);
      lua_rawseti (L,-2, i );
    }
    lua_pop(L,1);

    return false;
  }