using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using LuaInterface;
using GameCore;
using System;
namespace GameLogic {
///
/// 集成自LuaFileUtils,重写里面的ReadFile,
///
public class LuaLoader : LuaFileUtils
{
// Use this for initialization
const string ConfigsName = "InitLuas";
///
/// 平台的配置,这些文件默认都会到平台里头去加载。
///
List list = new List();
public LuaLoader()
{
instance = this;
beZip = AppConst.luaBundleMode;
InitConfigs();
}
public void InitConfigs() {
string configs = App.ResMgr.LoadAsset(ConfigsName).text;
App.ResMgr.UnLoadAsset(ConfigsName);
string[] configss = configs.Replace("\r\n", "\n").Replace("\n","|").Split('|');
for (int i = 0; i < configss.Length; i++) {
if (string.IsNullOrEmpty(configss[i])) continue;
if (configss[i].Contains("@")) continue;
list.Add(configss[i]);
}
}
///
/// 添加打入Lua代码的AssetBundle
///
///
public void AddBundle(string bundleName)
{
string url = Util.DataPath + bundleName.ToLower();
if (File.Exists(url))
{
AssetBundle bundle = AssetBundle.LoadFromFile(url, 0, GameLogic.AppConst.EncyptBytesLength);
if (bundle != null)
{
bundleName = bundleName.Replace("lua/", "").Replace(".unity3d", "");
base.AddSearchBundle(bundleName.ToLower(), bundle);
}
}
}
///
/// 当LuaVM加载Lua文件的时候,这里就会被调用,
/// 用户可以自定义加载行为,只要返回byte[]即可。
///
///
///
public override byte[] ReadFile(string fileName)
{
fileName = fileName.Replace(".lua", string.Empty);
if (AppConst.luaBundleMode)
{
return LoadFromAssetBundle(fileName);
}
else
{
return base.ReadFile(fileName);
}
}
byte[] LoadFromAssetBundle(string fileName)
{
string assetName = fileName.Replace("/", "%");
#if UNITY_ANDROID
if (IntPtr.Size == 8)
{
assetName += "%64";
}
#endif
byte[] bytes = App.ResMgr.LoadAsset(assetName).bytes;
//App.ResMgr.UnLoadAsset(game, assetName);
return bytes;
}
}
}