少年修仙传客户端代码仓库
client_Wu Xijin
2019-05-25 da94b220d55a8cb9ad173effc1a2d63afcbbce3c
3335 更新lua管理
1个文件已修改
1个文件已添加
96 ■■■■■ 已修改文件
Lua/LuaUtility.cs 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Lua/LuaUtility.cs.orig 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Lua/LuaUtility.cs
@@ -32,7 +32,6 @@
    public static void Init()
    {
        Do("fight/utils/FightRequire");
    }
Lua/LuaUtility.cs.orig
New file
@@ -0,0 +1,95 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XLua;
using System.IO;
public class LuaUtility : SingletonMonobehaviour<LuaUtility>
{
    public readonly static LuaEnv env = new LuaEnv();
    static float lastGCTime = 0;
    const float GCInterval = 1;//1 second
    static LuaUtility()
    {
        env.AddLoader(new LuaEnv.CustomLoader(LoadAssetBytes));
        env.AddBuildin("rapidjson", XLua.LuaDLL.Lua.LoadRapidJson);
        env.AddBuildin("lpeg", XLua.LuaDLL.Lua.LoadLpeg);
        env.AddBuildin("pb", XLua.LuaDLL.Lua.LoadLuaProfobuf);
        env.AddBuildin("ffi", XLua.LuaDLL.Lua.LoadFFI);
    }
    public static LuaTable GetNewTable()
    {
        return env.NewTable();
    }
    public static LuaTable Global
    {
        get { return env.Global; }
    }
    public static void Init()
    {
<<<<<<< HEAD
=======
        Do("global.table");
        Do("global.util");
        Do("global.logex");
        Do("global.functions");
        Do("global.object");
        Do("global.define");
        Do("global.stringutil");
        Do("fight/utils/FightRequire");
        Do("protocol.manager.LuaProtocalRegister");
>>>>>>> e34df6d061d07db2993621a37e8d00bb4b4dc759
    }
    void Update()
    {
        if (Time.time - lastGCTime > GCInterval)
        {
            env.Tick();
            lastGCTime = Time.time;
        }
    }
    public static void Do(string _file, string chunkName = "chunk", LuaTable _table = null)
    {
        var command = string.Format("require '{0}'", _file);
        env.DoString(command, chunkName, _table);
    }
    public static void DoString(string _file, string chunkName = "chunk", LuaTable _table = null)
    {
        var content = LoadAsset(ref _file);
        env.DoString(content, chunkName, _table);
    }
    private static string LoadAsset(ref string file)
    {
        file = file.Replace('.', '/');
        var path = string.Empty;
        if (AssetSource.luaFromEditor)
        {
            path = ResourcesPath.LUA_FODLER + "/" + file + ".lua";
            return File.ReadAllText(path);
        }
        else
        {
            var index = file.LastIndexOf("/");
            var assetBundle = StringUtility.Contact("lua/", file.Substring(0, index)).ToLower();
            var assetName = file.Substring(index + 1, file.Length - (index + 1));
            var asset = AssetBundleUtility.Instance.Sync_LoadAsset(assetBundle, assetName) as TextAsset;
            return asset.text;
        }
    }
    private static byte[] LoadAssetBytes(ref string _fileName)
    {
        return System.Text.Encoding.UTF8.GetBytes(LoadAsset(ref _fileName));
    }
}