예제 #1
0
        public void TimerTest3()
        {
            var jsEnv = new JsEnv(new TxtLoader());

            jsEnv.Eval(@"
                const CS = require('csharp');
                let obj = CS.Puerts.UnitTest.Timer;
                let i = 0;
                let id = setInterval(()=>{obj.TimerTest3Num = ++i;},500);
                setTimeout(()=>{clearInterval(id);},2000);
                setTimeout(()=>{clearInterval(id);},2500);
            ");
            for (int i = 0; i < 100; i++)
            {
                if (i < 20)
                {
                    Assert.AreEqual(i / 5, TimerTest3Num);
                }
                else
                {
                    Assert.AreEqual(20 / 5, TimerTest3Num);
                }
                jsEnv.Tick();
            }
            Assert.AreEqual(20 / 5, TimerTest3Num);
            jsEnv.Dispose();
        }
예제 #2
0
 private void Update()
 {
     if (jsEnv != null)
     {
         jsEnv.Tick();
     }
 }
예제 #3
0
        public void SetTimeoutTest()
        {
            SetTimeoutTestNum = 0;
            var jsEnv = new JsEnv(new TxtLoader());

            jsEnv.Eval(@"
                const CS = require('csharp');
                let obj = CS.Puerts.UnitTest.Timer;
                let i = 0;
                setTimeout(()=>{obj.SetTimeoutTestNum = ++i;},4000);
            ");
            for (int i = 0; i < 100; i++)
            {
                if (i == 38)
                {
                    Assert.AreEqual(0, SetTimeoutTestNum);
                }

                if (i == 40)
                {
                    Assert.AreEqual(1, SetTimeoutTestNum);
                }

                jsEnv.Tick();
            }

            Assert.AreEqual(1, SetTimeoutTestNum);
            jsEnv.Dispose();
        }
예제 #4
0
        public void SetIntervalTest2()
        {
            var jsEnv = new JsEnv(new TxtLoader());

            var timer = jsEnv.Eval <Timer>(@"
                const CS = require('csharp');
                let timer = new CS.Puerts.UnitTest.Timer(Date.now());
                Date.now = ()=>timer.Now();
                let obj = CS.Puerts.UnitTest.TimerTest;
                let i = 0;
                let j = 0;
                setInterval(()=>{obj.SetInterval2TestNum1 = ++i;},1000);
                setInterval(()=>{obj.SetIntervalTestNum2 = ++j;},500);
                timer;
            ");

            for (int i = 0; i < 100; i++)
            {
                Assert.AreEqual(i / 10, SetInterval2TestNum1);
                Assert.AreEqual(i / 5, SetIntervalTestNum2);
                timer.Tick();
                jsEnv.Tick();
            }

            jsEnv.Dispose();
        }
예제 #5
0
        public void TimerTest2()
        {
            var jsEnv = new JsEnv(new TxtLoader());

            var timer = jsEnv.Eval <Timer>(@"
                const CS = require('csharp');
                let timer = new CS.Puerts.UnitTest.Timer(Date.now());
                Date.now = ()=>timer.Now();
                let obj = CS.Puerts.UnitTest.TimerTest;
                let i = 0;
                let id = setInterval(()=>{obj.TimerTest2Num = ++i;},500);
                setTimeout(()=>{clearInterval(id);},2100);
                timer;
            ");

            for (int i = 0; i < 100; i++)
            {
                if (i <= 20)
                {
                    Assert.AreEqual(i / 5, TimerTest2Num);
                }
                else
                {
                    Assert.AreEqual(20 / 5, TimerTest2Num);
                }
                timer.Tick();
                jsEnv.Tick();
            }

            jsEnv.Dispose();
        }
예제 #6
0
    private void Update()
    {
        if (jsEnv != null)
        {
            jsEnv.Tick();


            if (gameStarted)
            {
#if UNITY_EDITOR
                var start = sw.ElapsedMilliseconds;
#endif
                try
                {
                    JsUpdate?.Invoke(Time.deltaTime, Time.unscaledDeltaTime);
                }
                catch (Exception ex)
                {
                    Logger.LogError("luaUpdate err : " + ex.Message + "\n" + ex.StackTrace);
                }
#if UNITY_EDITOR
                updateElapsedMilliseconds = sw.ElapsedMilliseconds - start;
#endif
            }
        }
    }
예제 #7
0
 // Update is called once per frame
 void Update()
 {
     if (env != null)
     {
         env.Tick();
     }
 }
 void Update()
 {
     if (JsUpdate != null)
     {
         JsUpdate();
     }
     jsEnv.Tick();
 }
예제 #9
0
        //private byte[] LoadLuaFiles(ref string fileName)
        //{
        //    if(m_CustomLoadHandlerManager.TryGetHandler(fileName,out var handler)) //自定义加载
        //    {
        //        return handler?.Invoke();
        //    }


        //    LuaRequireToPath(ref fileName);

        //    //使用同步接口加载资源
        //    try
        //    {
        //        var ta = m_Assets.Load<TextAsset>(fileName);
        //        byte[] code = ta.bytes;
        //        m_Assets.Release(ta);
        //        return code;
        //    }
        //    catch
        //    {
        //        Debug.LogWarning("Load Lua file failed: " + fileName);
        //        return null;
        //    }
        //}

        //private async Task InitInternalEntry()
        //{
        //    try
        //    {
        //        string final_path = c_InternalJsEntryPath;
        //        LuaRequireToPath(ref final_path);
        //        TextAsset ta = await m_Assets.LoadAsync<TextAsset>(final_path);
        //        object[] obj_result = m_JsEnv.DoString(ta.bytes, final_path);
        //        LuaTable table = (LuaTable)obj_result[0];
        //        List<string> init_list = table.Cast<List<string>>();

        //        List<Task> list_task = new List<Task>();
        //        foreach (var item in init_list)
        //        {
        //            list_task.Add(require_init_file(item));
        //        }
        //        await Task.WhenAll(list_task);
        //        m_Assets.Release(ta);
        //    }
        //    catch(XException e)
        //    {
        //        throw e;
        //    }
        //    catch(Exception e)
        //    {
        //        Debug.LogException(e);
        //    }
        //}

        //private async Task require_init_file(string req_str)
        //{
        //    string final_path = req_str;
        //    LuaRequireToPath(ref final_path);
        //    TextAsset ta = await m_Assets.LoadAsync<TextAsset>(final_path);
        //    m_JsEnv.DoString(ta.bytes, final_path);
        //    m_Assets.Release(ta);
        //}

        private void OnUpdate()
        {
            if (Time.time - m_lastGCTime > m_GCInterval)
            {
                m_JsEnv.Tick();
                m_lastGCTime = Time.time;
            }
        }
예제 #10
0
 private void Update()
 {
     if (jsEnv != null)
     {
         jsEnv.Tick();
     }
     JsOnUpdate?.Invoke();
 }
예제 #11
0
 private static void Update()
 {
     if (env != null)
     {
         env.Tick();
         if (DisposeInNextFrame)
         {
             env.Dispose();
             env = null;
             DisposeInNextFrame = false;
         }
     }
 }
예제 #12
0
        public void SetIntervalTest()
        {
            SetIntervalTestNum = 0;
            var jsEnv = new JsEnv(new TxtLoader());

            jsEnv.Eval(@"
                const CS = require('csharp');
                let obj = CS.Puerts.UnitTest.Timer;
                let i = 0;
                setInterval(()=>{obj.SetIntervalTestNum = ++i;},1000);
            ");
            for (int i = 0; i < 100; i++)
            {
                Assert.AreEqual(i / 10, SetIntervalTestNum);
                jsEnv.Tick();
            }

            jsEnv.Dispose();
        }
예제 #13
0
        public void DelegateGC()
        {
            var jsEnv = new JsEnv(new TxtLoader());

            jsEnv.Eval(@"
                const CS = require('csharp');
                let obj = new CS.Puerts.UnitTest.BaseClass();
                obj.ActionParam(Math.floor);
                ");
            System.GC.Collect();
            System.GC.WaitForPendingFinalizers();

            jsEnv.Eval(@"
                obj.ActionParam(Math.floor);
                ");
            System.GC.Collect();
            System.GC.WaitForPendingFinalizers();
            jsEnv.Tick();
            jsEnv.Dispose();
        }
예제 #14
0
        public void TimerTest4()
        {
            var jsEnv = new JsEnv(new TxtLoader());

            jsEnv.Eval(@"
                const CS = require('csharp');
                let timer = new CS.Puerts.UnitTest.Timer();
                Date.now = ()=>timer.Now();
                let obj = CS.Puerts.UnitTest.TimerTest;
                let i = 0;
                let id = setInterval(()=>{obj.TimerTest4Num = ++i;},500);
                setTimeout(()=>{clearInterval(id);},200);
            ");
            for (int i = 0; i < 100; i++)
            {
                Assert.AreEqual(0, TimerTest4Num);
                jsEnv.Tick();
            }
            jsEnv.Dispose();
        }
예제 #15
0
 private void Update()
 {
     jsEnv.Tick();
 }
예제 #16
0
 void Update()
 {
     JsEnv.Tick();
 }