public void Start() { if (ReadBytes == null) { ReadBytes = System.IO.File.ReadAllBytes; } L = Lua.newstate(); mainState = L; luaL_openlibs(L); lua_atpanic(L, PanicCallback); Register("print", DoPrint); Register("dofile", DoFile); Register("loadfile", LoadFile); errorFuncRef = get_error_func_ref(L); AddAssembly(Assembly.GetExecutingAssembly()); _global = LuaRef.Globals(L); _global.Set("luna", LuaRef.CreateTable(L)); Register("luna.typeof", GetClassType); Register("luna.findType", FindClassType); #if LUNA_SCRIPT DoString(coroutineSource); DoString(classSource); DoString(listSource); #endif _binder = new SharpModule(this); AddSearcher(LuaLoader); LunaNative.Init(L); SharpObject.Init(L); RegisterWraps(this.GetType()); foreach (var moduleInfo in this._config) { this.RegisterModel(moduleInfo); } PostInit?.Invoke(); var it = _classWrapers.GetEnumerator(); while (it.MoveNext()) { if (!SharpModule.IsRegistered(it.Current.Key)) { RegisterClass(it.Current.Key); } } //_classWrapers.Clear(); }
public SharpClass GetClass(Type classType, Type superClass = null) { if (registeredClass.TryGetValue(classType, out var bindClass)) { return(bindClass); } if (classType == superClass) { return(CreateClass(classType, null, this)); } var parentType = classType.BaseType; while (superClass == null) { if (parentType == null) { break; } if (SharpModule.IsRegistered(parentType)) { superClass = parentType; break; } if (parentType == typeof(object)) { break; } parentType = parentType.BaseType; } return(CreateClass(classType, superClass, this)); }