示例#1
0
        // @desc スレッドが生きているかどうか確認する
        // @param self スレッドインスタンス
        // @result 生死の真偽値
        // @sample if th:is_alive() then
        // @sample   print("ALIVE!")
        // @sample end
        private static int L_lthread_is_alive(ILuaState lua)
        {
            LuaThread th = get_internal <LuaThread>(lua, 1);

            lua.PushBoolean(!th.isExit);
            return(1);
        }
示例#2
0
        // @desc スレッドを開始する
        // @param function スレッドで実行する関数
        // @result スレッドインスタンス
        // @sample local th = lthread.start(function() print("HOGE") end)
        private static int L_lthread_start(ILuaState lua)
        {
            LuaScriptBehaviour lsb = LuaScriptBehaviour.FindFromState(lua);
            LuaThread          th  = lsb.StartThread(lua);

            NewLuaThread(lua, th);
            return(1);
        }
示例#3
0
        // 渡された関数で新規スレッドを起動する
        public LuaThread StartThread(ILuaState lua)
        {
            LuaThread th = _vm.CreateThread(this);

            _threads.Add(th);
            ILuaState newlua = th.luaState;

            lua.XMove(newlua, 1);
            th.Start(0);
            return(th);
        }
示例#4
0
 private void register_common_libs()
 {
     LuaThread.LoadLibs(_luaState);
     LuaSystemLib.Load(_luaState); // <-- @todo この書式に統一したい
     LuaGameObject.RegisterClass(_luaState);
     LuaComponentBehaviour.RegisterClass(_luaState);
     LuaComponentTransform.RegisterClass(_luaState);
     LuaComponentRectTransform.RegisterClass(_luaState);
     LuaComponentUI.RegisterClass(_luaState);
     LuaMathf.LoadLibs(_luaState);
     LuaUtilLib.Load(_luaState);
 }
示例#5
0
 //
 void Awake()
 {
     _mainThread       = retain_vm().CreateThread(this);
     _lua              = _mainThread.luaState;
     _behaviours[_lua] = this;
     //if (!_mainThread.luaState.CheckStack(1000)) {
     //  Debug.LogError("CANT ALLOC STACK");
     //}
     if (!string.IsNullOrEmpty(_luaScriptFile))
     {
         load_script_file(_luaScriptFile);
     }
     invoke_script_function_cached(LuaScript.CachedFunction.AWAKE);
 }
示例#6
0
 //
 private static int NewLuaThread(ILuaState lua, LuaThread th)
 {
     // o = {}
     lua.NewTable();
     // setmetatable(o, self)
     //lua.PushValue(-2); // self
     lua.GetGlobal(KlassName);
     lua.SetMetaTable(-2); // -> o
     // self.__index = self
     lua.GetMetaTable(-1);
     lua.SetField(-1, "__index");
     // return o
     if (th != null)
     {
         set_internal <LuaThread>(lua, -2, th);
     }
     return(1);
 }
示例#7
0
 private void update_lua_threads()
 {
     if (_errorOccured)
     {
         return;
     }
     foreach (LuaThread t in _threads)
     {
         if (t.isRunning)
         {
             _currentThread = t;
             t.Resume();
             if (t.isError)
             {
                 _errorOccured = true;
             }
             _currentThread = null;
         }
     }
     _threads.RemoveAll((t) => t.isExit);
 }
示例#8
0
        //
        public LuaThread CreateThread(LuaScriptBehaviour behaviour)
        {
            LuaThread th = new LuaThread(_luaState, behaviour);

            return(th);
        }