示例#1
0
 public void SetGetter(string name, LuaRef getter)
 {
     if (name == "Item")
     {
         SetMemberFunction(LunaNative.___get_indexed, getter);
     }
     else
     {
         meta.RawGet(LunaNative.___getters).RawSet(name, getter);
     }
 }
示例#2
0
        public static string GetMemberName(LuaRef parent, string name)
        {
            string full_name = parent.RawGet(___type, "<unknown>");

            full_name += '.';
            full_name += name;
            return(full_name);
        }
示例#3
0
        public void SetReadOnly(string name)
        {
            LuaRef meta_class = meta;
            string full_name  = LunaNative.GetMemberName(meta_class, name);
            LuaRef err        = LuaRef.CreateFunctionWith(State, LunaNative.ErrorReadOnly, full_name);

            meta_class.RawGet(LunaNative.___setters).RawSet(name, err);
        }
示例#4
0
        public SharpModule(SharpModule parent, string name) : base(parent)
        {
            LuaRef parentMeta = parent.meta;
            LuaRef luaref     = parentMeta.RawGet(name) as LuaRef;

            if (luaref)
            {
                meta = luaref;
                return;
            }

            this.parent = parent;
            meta        = LunaNative.create_module(parentMeta.State, parentMeta, name);
            Name        = name;
        }
示例#5
0
        public static LuaRef CreateClass(LuaRef module, string name, Type classType, Type superClass, LuaNativeFunction dctor)
        {
            LuaRef classref = module.RawGet <LuaRef, string>(name);

            if (classref)
            {
                return(classref);
            }

            var meta = LunaNative.create_class(module.State, module, name, classType, dctor);

            if (superClass != null)
            {
                LuaRef registry     = new LuaRef(module.State, LUA_REGISTRYINDEX);
                int    superClassID = SharpObject.TypeID(superClass);
                LuaRef super        = registry.RawGet <LuaRef>(superClassID);
                meta.RawSet(LunaNative.___super, super);
            }

            return(meta);
        }
示例#6
0
        public static string GetFullName(LuaRef parent, string name)
        {
            string full_name = parent.RawGet(___type, "");

            if (!string.IsNullOrEmpty(full_name))
            {
                int pos = full_name.IndexOf('<');
                if (pos != -1)
                {
                    full_name.Remove(0, pos + 1);
                }
                pos = full_name.LastIndexOf('>');
                if (pos != -1)
                {
                    full_name.Remove(pos);
                }
                full_name += '.';
            }
            full_name += name;
            return(full_name);
        }
示例#7
0
 public LuaRef GetGlobal(string fullPath)
 {
     return(_global.RawGet(fullPath));
 }