更新Xlua 到最新版本
This commit is contained in:
@ -34,6 +34,8 @@ namespace XLua
|
||||
translator.RegisterPushAndGetAndUpdate<UnityEngine.Ray>(translator.PushUnityEngineRay, translator.Get, translator.UpdateUnityEngineRay);
|
||||
translator.RegisterPushAndGetAndUpdate<UnityEngine.Bounds>(translator.PushUnityEngineBounds, translator.Get, translator.UpdateUnityEngineBounds);
|
||||
translator.RegisterPushAndGetAndUpdate<UnityEngine.Ray2D>(translator.PushUnityEngineRay2D, translator.Get, translator.UpdateUnityEngineRay2D);
|
||||
translator.RegisterPushAndGetAndUpdate<Tutorial.TestEnum>(translator.PushTutorialTestEnum, translator.Get, translator.UpdateTutorialTestEnum);
|
||||
translator.RegisterPushAndGetAndUpdate<Tutorial.DerivedClass.TestEnumInner>(translator.PushTutorialDerivedClassTestEnumInner, translator.Get, translator.UpdateTutorialDerivedClassTestEnumInner);
|
||||
|
||||
}
|
||||
}
|
||||
@ -570,6 +572,174 @@ namespace XLua
|
||||
}
|
||||
}
|
||||
|
||||
int TutorialTestEnum_TypeID = -1;
|
||||
int TutorialTestEnum_EnumRef = -1;
|
||||
|
||||
public void PushTutorialTestEnum(RealStatePtr L, Tutorial.TestEnum val)
|
||||
{
|
||||
if (TutorialTestEnum_TypeID == -1)
|
||||
{
|
||||
bool is_first;
|
||||
TutorialTestEnum_TypeID = getTypeId(L, typeof(Tutorial.TestEnum), out is_first);
|
||||
|
||||
if (TutorialTestEnum_EnumRef == -1)
|
||||
{
|
||||
Utils.LoadCSTable(L, typeof(Tutorial.TestEnum));
|
||||
TutorialTestEnum_EnumRef = LuaAPI.luaL_ref(L, LuaIndexes.LUA_REGISTRYINDEX);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (LuaAPI.xlua_tryget_cachedud(L, (int)val, TutorialTestEnum_EnumRef) == 1)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
IntPtr buff = LuaAPI.xlua_pushstruct(L, 4, TutorialTestEnum_TypeID);
|
||||
if (!CopyByValue.Pack(buff, 0, (int)val))
|
||||
{
|
||||
throw new Exception("pack fail fail for Tutorial.TestEnum ,value="+val);
|
||||
}
|
||||
|
||||
LuaAPI.lua_getref(L, TutorialTestEnum_EnumRef);
|
||||
LuaAPI.lua_pushvalue(L, -2);
|
||||
LuaAPI.xlua_rawseti(L, -2, (int)val);
|
||||
LuaAPI.lua_pop(L, 1);
|
||||
|
||||
}
|
||||
|
||||
public void Get(RealStatePtr L, int index, out Tutorial.TestEnum val)
|
||||
{
|
||||
LuaTypes type = LuaAPI.lua_type(L, index);
|
||||
if (type == LuaTypes.LUA_TUSERDATA )
|
||||
{
|
||||
if (LuaAPI.xlua_gettypeid(L, index) != TutorialTestEnum_TypeID)
|
||||
{
|
||||
throw new Exception("invalid userdata for Tutorial.TestEnum");
|
||||
}
|
||||
|
||||
IntPtr buff = LuaAPI.lua_touserdata(L, index);
|
||||
int e;
|
||||
if (!CopyByValue.UnPack(buff, 0, out e))
|
||||
{
|
||||
throw new Exception("unpack fail for Tutorial.TestEnum");
|
||||
}
|
||||
val = (Tutorial.TestEnum)e;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
val = (Tutorial.TestEnum)objectCasters.GetCaster(typeof(Tutorial.TestEnum))(L, index, null);
|
||||
}
|
||||
}
|
||||
|
||||
public void UpdateTutorialTestEnum(RealStatePtr L, int index, Tutorial.TestEnum val)
|
||||
{
|
||||
|
||||
if (LuaAPI.lua_type(L, index) == LuaTypes.LUA_TUSERDATA)
|
||||
{
|
||||
if (LuaAPI.xlua_gettypeid(L, index) != TutorialTestEnum_TypeID)
|
||||
{
|
||||
throw new Exception("invalid userdata for Tutorial.TestEnum");
|
||||
}
|
||||
|
||||
IntPtr buff = LuaAPI.lua_touserdata(L, index);
|
||||
if (!CopyByValue.Pack(buff, 0, (int)val))
|
||||
{
|
||||
throw new Exception("pack fail for Tutorial.TestEnum ,value="+val);
|
||||
}
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
throw new Exception("try to update a data with lua type:" + LuaAPI.lua_type(L, index));
|
||||
}
|
||||
}
|
||||
|
||||
int TutorialDerivedClassTestEnumInner_TypeID = -1;
|
||||
int TutorialDerivedClassTestEnumInner_EnumRef = -1;
|
||||
|
||||
public void PushTutorialDerivedClassTestEnumInner(RealStatePtr L, Tutorial.DerivedClass.TestEnumInner val)
|
||||
{
|
||||
if (TutorialDerivedClassTestEnumInner_TypeID == -1)
|
||||
{
|
||||
bool is_first;
|
||||
TutorialDerivedClassTestEnumInner_TypeID = getTypeId(L, typeof(Tutorial.DerivedClass.TestEnumInner), out is_first);
|
||||
|
||||
if (TutorialDerivedClassTestEnumInner_EnumRef == -1)
|
||||
{
|
||||
Utils.LoadCSTable(L, typeof(Tutorial.DerivedClass.TestEnumInner));
|
||||
TutorialDerivedClassTestEnumInner_EnumRef = LuaAPI.luaL_ref(L, LuaIndexes.LUA_REGISTRYINDEX);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (LuaAPI.xlua_tryget_cachedud(L, (int)val, TutorialDerivedClassTestEnumInner_EnumRef) == 1)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
IntPtr buff = LuaAPI.xlua_pushstruct(L, 4, TutorialDerivedClassTestEnumInner_TypeID);
|
||||
if (!CopyByValue.Pack(buff, 0, (int)val))
|
||||
{
|
||||
throw new Exception("pack fail fail for Tutorial.DerivedClass.TestEnumInner ,value="+val);
|
||||
}
|
||||
|
||||
LuaAPI.lua_getref(L, TutorialDerivedClassTestEnumInner_EnumRef);
|
||||
LuaAPI.lua_pushvalue(L, -2);
|
||||
LuaAPI.xlua_rawseti(L, -2, (int)val);
|
||||
LuaAPI.lua_pop(L, 1);
|
||||
|
||||
}
|
||||
|
||||
public void Get(RealStatePtr L, int index, out Tutorial.DerivedClass.TestEnumInner val)
|
||||
{
|
||||
LuaTypes type = LuaAPI.lua_type(L, index);
|
||||
if (type == LuaTypes.LUA_TUSERDATA )
|
||||
{
|
||||
if (LuaAPI.xlua_gettypeid(L, index) != TutorialDerivedClassTestEnumInner_TypeID)
|
||||
{
|
||||
throw new Exception("invalid userdata for Tutorial.DerivedClass.TestEnumInner");
|
||||
}
|
||||
|
||||
IntPtr buff = LuaAPI.lua_touserdata(L, index);
|
||||
int e;
|
||||
if (!CopyByValue.UnPack(buff, 0, out e))
|
||||
{
|
||||
throw new Exception("unpack fail for Tutorial.DerivedClass.TestEnumInner");
|
||||
}
|
||||
val = (Tutorial.DerivedClass.TestEnumInner)e;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
val = (Tutorial.DerivedClass.TestEnumInner)objectCasters.GetCaster(typeof(Tutorial.DerivedClass.TestEnumInner))(L, index, null);
|
||||
}
|
||||
}
|
||||
|
||||
public void UpdateTutorialDerivedClassTestEnumInner(RealStatePtr L, int index, Tutorial.DerivedClass.TestEnumInner val)
|
||||
{
|
||||
|
||||
if (LuaAPI.lua_type(L, index) == LuaTypes.LUA_TUSERDATA)
|
||||
{
|
||||
if (LuaAPI.xlua_gettypeid(L, index) != TutorialDerivedClassTestEnumInner_TypeID)
|
||||
{
|
||||
throw new Exception("invalid userdata for Tutorial.DerivedClass.TestEnumInner");
|
||||
}
|
||||
|
||||
IntPtr buff = LuaAPI.lua_touserdata(L, index);
|
||||
if (!CopyByValue.Pack(buff, 0, (int)val))
|
||||
{
|
||||
throw new Exception("pack fail for Tutorial.DerivedClass.TestEnumInner ,value="+val);
|
||||
}
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
throw new Exception("try to update a data with lua type:" + LuaAPI.lua_type(L, index));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// table cast optimze
|
||||
|
||||
@ -629,6 +799,18 @@ namespace XLua
|
||||
translator.PushUnityEngineRay2D(L, array[index]);
|
||||
return true;
|
||||
}
|
||||
else if (type == typeof(Tutorial.TestEnum[]))
|
||||
{
|
||||
Tutorial.TestEnum[] array = obj as Tutorial.TestEnum[];
|
||||
translator.PushTutorialTestEnum(L, array[index]);
|
||||
return true;
|
||||
}
|
||||
else if (type == typeof(Tutorial.DerivedClass.TestEnumInner[]))
|
||||
{
|
||||
Tutorial.DerivedClass.TestEnumInner[] array = obj as Tutorial.DerivedClass.TestEnumInner[];
|
||||
translator.PushTutorialDerivedClassTestEnumInner(L, array[index]);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -683,6 +865,18 @@ namespace XLua
|
||||
translator.Get(L, obj_idx, out array[array_idx]);
|
||||
return true;
|
||||
}
|
||||
else if (type == typeof(Tutorial.TestEnum[]))
|
||||
{
|
||||
Tutorial.TestEnum[] array = obj as Tutorial.TestEnum[];
|
||||
translator.Get(L, obj_idx, out array[array_idx]);
|
||||
return true;
|
||||
}
|
||||
else if (type == typeof(Tutorial.DerivedClass.TestEnumInner[]))
|
||||
{
|
||||
Tutorial.DerivedClass.TestEnumInner[] array = obj as Tutorial.DerivedClass.TestEnumInner[];
|
||||
translator.Get(L, obj_idx, out array[array_idx]);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user