コード例 #1
0
        public void Dispose()
        {
            if (scriptIsReady)
            {
                if (true || !is_OnDisable)
                {
                    is_OnDisable = true;
                    LuaController.RemoveEventListener(luaObject);
                }
            }
            started       = false;
            scriptIsReady = false;

            if (l_OnDestroy != null && L != null)
            {
                l_OnDestroy(luaObject);
            }

            l_Start              = null;
            l_OnDestroy          = null;
            l_Update             = null;
            l_onEvent            = null;
            l_OnDisable          = null;
            l_OnEnable           = null;
            l_OnApplicationPause = null;

            if (L != null && luaObject != null)
            {
                luaObject.Dispose();
            }
            luaObject = null;
        }
コード例 #2
0
 void OnDestroy()
 {
     if (luaOnDestroy != null)
     {
         luaOnDestroy(scriptEnv);
     }
     luaOnDestroy = null;
     luaUpdate    = null;
     luaStart     = null;
     scriptEnv.Dispose();
 }
コード例 #3
0
        public void StartWithScript(string luaScriptFileName, LuaTable luaObject, params object[] args)
        {
            this.luaScriptFileName = luaScriptFileName;
            if (args != null)
            {
                this.args = args;
            }

            // release old object
            if (this.luaObject != null && this.luaObject != luaObject)
            {
                this.luaObject.Dispose();
                l_Awake     = null;
                l_OnDestroy = null;
                l_Update    = null;
                l_onEvent   = null;
            }

            if (luaObject == null && !string.IsNullOrEmpty(luaScriptFileName))
            {
                luaObject = loadDelegate();
            }
            this.luaObject = luaObject;

            if (this.luaObject == null)
            {
                return;
            }

            luaObject.Set("gameObject", gameObject);
            foreach (var injection in injections)
            {
                luaObject.Set(injection.name, injection.value);
            }
            l_Awake = luaObject.Get <LuaObjectAction>("Awake");
            l_Start = luaObject.Get <LuaOnAction>("Start");


            l_OnDestroy = luaObject.Get <LuaOnAction>("OnDestroy");

            l_Update  = luaObject.Get <LuaOnAction>("Update");
            l_onEvent = luaObject.Get <LuaObjectAction>("onEvent");

            luaAwake();
        }
コード例 #4
0
 public void Call(string eventName, params object [] param)
 {
     if (scriptIsReady)
     {
         LuaObjectAction act = luaObject.Get <LuaObjectAction>(eventName);
         if (act != null)
         {
             act(luaObject, param);
         }
     }
     else
     {
         CallInfo info = new CallInfo();
         info.eventName = eventName;
         info.param     = param;
         _callAfterStart.Add(info);
     }
 }
コード例 #5
0
        public void onEvent(string eventName)
        {
            if (luaObject == null)
            {
                return;
            }

            LuaObjectAction act = luaObject.Get <LuaObjectAction>(eventName);

            if (act != null)
            {
                act(luaObject);
            }
            else if (l_onEvent != null)
            {
                l_onEvent(luaObject, eventName);
            }
        }
コード例 #6
0
        void OnDestroy()
        {
            if (l_OnDestroy != null && L != null)
            {
                l_OnDestroy();
            }

            l_Awake     = null;
            l_Start     = null;
            l_OnDestroy = null;
            l_Update    = null;
            l_onEvent   = null;

            if (L != null && luaObject != null)
            {
                luaObject.Dispose();
            }
            luaObject = null;
        }
コード例 #7
0
        void OnDestroy()
        {
            if (luaOnDestroy != null)
            {
                luaOnDestroy();
            }

            luaOnDestroy = null;
            luaUpdate    = null;
            luaStart     = null;
            try
            {
                luaObject.Dispose();
            }
            catch (System.Exception e)
            {
                Debug.Log(e.Message + "\n" + e.StackTrace);
            }

            injections = null;
        }
コード例 #8
0
        void Awake()
        {
//            scriptEnv = LuaController.Instance.LuaEnv.NewTable();

            if (luaScript != "")
            {
                string   path = "require '(" + luaScript + ")'";
                object[] obs  = LuaController.Instance.LuaEnv.DoString(path, "LuaTestScript", luaObject);
                luaObject = obs[0] as  LuaTable;
            }
            if (luaObject == null)
            {
                Debug.Log("Lua loader error");
                return;
            }
            // 为每个脚本设置一个独立的环境,可一定程度上防止脚本间全局变量、函数冲突
            //LuaTable meta = LuaController.Instance.LuaEnv.NewTable();
            //meta.Set("__index", LuaController.Instance.LuaEnv.Global);
            //scriptEnv.SetMetaTable(meta);
            //meta.Dispose();

            luaObject.Set("gameObject", gameObject);
            foreach (var injection in injections)
            {
                luaObject.Set(injection.name, injection.value);
            }

            LuaObjectAction luaAwake     = luaObject.Get <LuaObjectAction>("Awake");
            LuaObjectAction luaStart     = luaObject.Get <LuaObjectAction>("Start");
            LuaObjectAction luaUpdate    = luaObject.Get <LuaObjectAction>("Update");
            LuaObjectAction luaOnDestroy = luaObject.Get <LuaObjectAction>("OnDestroy");

            Debug.Log(luaStart);
            if (luaAwake != null)
            {
                luaAwake();
            }
        }
コード例 #9
0
ファイル: LuaBehaviour.cs プロジェクト: WATable/xlua_register
    public void Init()
    {
        print("===============" + gameObject);

        print(table);
        table.Set("gameObject", gameObject);
        _Awake = table.Get <LuaObjectAction>("Awake");
        _Start = table.Get <LuaObjectAction>("Start");

        _Update = table.Get <LuaObjectAction>("Update");
        if (_Awake != null)
        {
            if (args != null)
            {
                _Awake(table, args);
            }
            else
            {
                _Awake(table);
            }
            //this.gameObject.AddComponent("Lua")
        }
    }
コード例 #10
0
        public LuaTable LoadScript(string luaScriptFileName, LuaTable i_luaObject, params object [] args)
        {
            this.luaScriptFileName = luaScriptFileName;
            this.args = args;

            // release old object
            if (luaObject != null && luaObject != i_luaObject)
            {
                OnDisable();
                luaObject.Dispose();
                l_Start     = null;
                l_OnDestroy = null;
                l_Update    = null;
                l_onEvent   = null;
                luaObject   = null;
            }

            bool needPreload = false;

            if (i_luaObject != null && luaObject != i_luaObject)
            {
                luaObject   = i_luaObject;
                needPreload = true;
            }
            else if (!string.IsNullOrEmpty(luaScriptFileName))
            {
                luaObject   = loadDelegate(luaScriptFileName);
                needPreload = true;
            }

            if (luaObject == null)
            {
                return(null);
            }

            luaObject.Set("gameObject", gameObject);
            luaObject.Set("LuaBehaviour", this);

            l_Start     = luaObject.Get <LuaObjectAction>("Start");
            l_OnEnable  = luaObject.Get <LuaObjectAction>("OnEnable");
            l_OnDisable = luaObject.Get <LuaObjectAction>("OnDisable");
            l_OnDestroy = luaObject.Get <LuaObjectAction>("OnDestroy");

            l_Update  = luaObject.Get <LuaObjectAction>("Update");
            l_onEvent = luaObject.Get <LuaObjectAction>("onEvent");

            l_OnApplicationPause = luaObject.Get <LuaObjectAction>("OnApplicationPause");

            if (needPreload)
            {
                LuaObjectAction preload = luaObject.Get <LuaObjectAction>("OnPreload");
                if (preload != null)
                {
                    if (args != null)
                    {
                        preload(luaObject, args);
                    }
                    else
                    {
                        preload(luaObject);
                    }
                }
                preload = null;
            }

            needCallLuaStart = true;
            luaStart();
            return(luaObject);
        }