예제 #1
0
        static public bool CheckDelegateType(Type type, IntPtr L, int pos)
        {
            LuaTypes luaType = LuaDLL.lua_type(L, pos);

            switch (luaType)
            {
            case LuaTypes.LUA_TNIL:
                return(true);

            case LuaTypes.LUA_TUSERDATA:
                int udata = LuaDLL.tolua_rawnetobj(L, pos);

                if (udata != -1)
                {
                    ObjectTranslator translator = ObjectTranslator.Get(L);
                    object           obj        = translator.GetObject(udata);
                    return(obj == null ? true : type == obj.GetType());
                }
                return(false);

            case LuaTypes.LUA_TFUNCTION:
                /*int udata1 = LuaDLL.tolua_rawnetobj(L, pos);
                 *
                 * if (udata1 != -1)
                 * {
                 *  ObjectTranslator translator = ObjectTranslator.Get(L);
                 *  object obj = translator.GetObject(udata1);
                 *  //return obj == null ? true : type == obj.GetType();
                 *
                 *  if (obj != null)
                 *  {
                 *      if (obj is Delegate dd)
                 *      {
                 *          int a = dd.Method.GetHashCode();
                 *          int ddc = dd.GetHashCode();
                 *          int tc = type.GetHashCode();
                 *
                 *
                 *          // dd.Target
                 *          // type.IsEquivalentTo(dd.GetType());
                 *
                 *          return ddc == tc ? true : false;
                 *          //return obj == type;
                 *          //return (Delegate)obj;
                 *      }
                 *  }
                 *  else
                 *  {
                 *      return true;
                 *  }
                 * }
                 * return false;*/
                //return LuaDLL.luaL_checktype
                LuaFunction func = ToLua.ToLuaFunction(L, pos);
                Delegate    del  = DelegateFactory.CreateDelegate(type, func);
                DelegateFactory.RemoveDelegate(del, func);

                return(true);


            //LuaFunction func = ToLua.ToLuaFunction(L, pos);
            //object oo = ToLua.ToObject(L, pos);


            //ToLua.CheckDelegate<OnSceneNameChanged>(L, pos);

            //Delegate.Equals();
            //return oo.GetType() == type;

            //ToLua.CheckDelegate
            //DelegateTraits<type>.Create(func);
            //OnSceneNameChanged arg1 = (OnSceneNameChanged)ToLua.CheckDelegate<OnSceneNameChanged>(L, pos);

            //Type t = GetNullableType(type);
            //return t == typeof(LuaFunction);
            default:
                return(false);
            }
        }