Exemple #1
0
MeasureScript::~MeasureScript()
{
    UninitializeLuaScript();
    LuaManager::Finalize();
}
Exemple #2
0
/*
** Read the options specified in the ini file.
**
*/
void MeasureScript::ReadOptions(ConfigParser& parser, const WCHAR* section)
{
    Measure::ReadOptions(parser, section);

    std::wstring scriptFile = parser.ReadString(section, L"ScriptFile", L"");
    if (!scriptFile.empty())
    {
        if (m_Skin)
        {
            m_Skin->MakePathAbsolute(scriptFile);
        }

        if (!m_Initialized ||
                wcscmp(scriptFile.c_str(), m_LuaScript.GetFile().c_str()) != 0)
        {
            UninitializeLuaScript();

            if (m_LuaScript.Initialize(scriptFile))
            {
                bool hasInitializeFunction = m_LuaScript.IsFunction(g_InitializeFunctionName);
                m_HasUpdateFunction = m_LuaScript.IsFunction(g_UpdateFunctionName);

                auto L = m_LuaScript.GetState();
                lua_rawgeti(L, LUA_GLOBALSINDEX, m_LuaScript.GetRef());

                *(Skin**)lua_newuserdata(L, sizeof(Skin*)) = m_Skin;
                lua_getglobal(L, "MeterWindow");
                lua_setmetatable(L, -2);
                lua_setfield(L, -2, "SKIN");

                *(Measure**)lua_newuserdata(L, sizeof(Measure*)) = this;
                lua_getglobal(L, "Measure");
                lua_setmetatable(L, -2);
                lua_setfield(L, -2, "SELF");

                if (!m_LuaScript.IsUnicode())
                {
                    // For backwards compatibility.

                    m_HasGetStringFunction = m_LuaScript.IsFunction(g_GetStringFunctionName);
                    if (m_HasGetStringFunction)
                    {
                        LogWarningF(this, L"Script: Using deprecated GetStringValue()");
                    }

                    lua_getfield(L, -1, "PROPERTIES");
                    if (lua_isnil(L, -1) == 0)
                    {
                        lua_pushnil(L);

                        // Look in the table for values to read from the section
                        while (lua_next(L, -2))
                        {
                            lua_pop(L, 1);
                            const char* strKey = lua_tostring(L, -1);
                            const std::wstring wstrKey = StringUtil::Widen(strKey);
                            const std::wstring& wstrValue =
                                parser.ReadString(section, wstrKey.c_str(), L"");
                            if (!wstrValue.empty())
                            {
                                const std::string strStrVal = StringUtil::Narrow(wstrValue);
                                lua_pushstring(L, strStrVal.c_str());
                                lua_setfield(L, -3, strKey);
                            }
                        }
                    }

                    // Pop PROPERTIES table.
                    lua_pop(L, 1);
                }

                // Pop our table.
                lua_pop(L, 1);

                if (m_Initialized)
                {
                    // If the measure is already initialized and the script has changed, we need to
                    // manually call Initialize().
                    Initialize();
                }

                // Valid script.
                return;
            }
        }
        else if (m_LuaScript.IsInitialized())
        {
            // Already initialized.
            return;
        }
    }

    LogErrorF(this, L"Script: File not valid");
    UninitializeLuaScript();
}
MeasureScript::~MeasureScript()
{
	UninitializeLuaScript();
}