コード例 #1
0
    /// <summary>
    /// Loads a new script string in place of the old one
    /// </summary>
    public void Run()
    {
        AccessibleLuaScript accessibleLuaScript = Task.GetOrMakeAccessibleLuaScript(luaScript, scriptName);

        if (!GetComponent <WTBObject>().scripts.Contains(accessibleLuaScript))
        {
            GetComponent <WTBObject>().scripts.Add(accessibleLuaScript);
        }
        //if (scriptName == "" || hasRun) return;
        //hasRun = true;

        // tableprint credit to https://stackoverflow.com/questions/9168058/how-to-dump-a-table-to-console

        string builtInEnvironment = @"
            function TablePrint (tbl, indent)
                if not indent then indent = 0 end
                for k, v in pairs(tbl) do
                    formatting = string.rep('  ', indent) .. k .. ': ';
                    if (type(v) == 'table') then
                        print(formatting)
                        TablePrint(v, indent+1)
                    elseif (type(v) == 'boolean') then
                        print(formatting .. tostring(v))
                    else
                        print(formatting .. v)
                    end
                end
            end

            function count(tbl)
                local count = 0
                for k, v in pairs(tbl) do
                    count = count + 1
                end
                return count
            end

            function lerp(a, b, t)
                return a * (1-t) + (b*t)
            end

            


            ";

        try
        {
            if (Task.ScriptTextTable.ContainsKey(scriptName))
            {
                luaScript.DoString(Task.ScriptTextTable[scriptName] + builtInEnvironment);
            }

            if (luaScript != null && luaScript.Globals["Start"] != null)
            {
                luaScript.Call(luaScript.Globals["Start"]);
            }

            hasRun = true;
        }
        catch (ScriptRuntimeException ex)
        {
            Debug.Log("Lua Error: " + ex.DecoratedMessage);

            string partIdentifier = gameObject.name;

            // null check series
            WTBObject wtbo = GetComponent <WTBObject>();
            if (wtbo != null)
            {
                WorldComponent wc = (WorldComponent)wtbo.ComponentByName("World");
                if (wc != null)
                {
                    PropertyName pn = (PropertyName)wc.PropertyByName("Name");
                    if (pn != null)
                    {
                        partIdentifier = pn.dataString + ":" + gameObject.GetPhotonView().viewID;
                    }
                }
            }

            Task.consoleControllerGlobal.Print("ERROR: [" + partIdentifier + "] " + ex.DecoratedMessage);
            if (Task.consoleController != null)
            {
                Task.consoleController.Print("ERROR: [" + partIdentifier + "] " + ex.DecoratedMessage);
            }
        }
        catch (InterpreterException ex)
        {
            Debug.Log("Lua Error: " + ex.DecoratedMessage);

            string partIdentifier = gameObject.name;

            // null check series
            WTBObject wtbo = GetComponent <WTBObject>();
            if (wtbo != null)
            {
                WorldComponent wc = (WorldComponent)wtbo.ComponentByName("World");
                if (wc != null)
                {
                    PropertyName pn = (PropertyName)wc.PropertyByName("Name");
                    if (pn != null)
                    {
                        partIdentifier = pn.dataString + ":" + gameObject.GetPhotonView().viewID;
                    }
                }
            }

            Task.consoleControllerGlobal.Print("ERROR: [" + partIdentifier + "] " + ex.DecoratedMessage);
            if (Task.consoleController != null)
            {
                Task.consoleController.Print("ERROR: [" + partIdentifier + "] " + ex.DecoratedMessage);
            }
        }
    }