add
This commit is contained in:
123
Assets/XLua/Src/Editor/Template/PackUnpack.tpl.txt
Executable file
123
Assets/XLua/Src/Editor/Template/PackUnpack.tpl.txt
Executable file
@@ -0,0 +1,123 @@
|
||||
#if USE_UNI_LUA
|
||||
using LuaAPI = UniLua.Lua;
|
||||
using RealStatePtr = UniLua.ILuaState;
|
||||
using LuaCSFunction = UniLua.CSharpFunctionDelegate;
|
||||
#else
|
||||
using LuaAPI = XLua.LuaDLL.Lua;
|
||||
using RealStatePtr = System.IntPtr;
|
||||
using LuaCSFunction = XLua.LuaDLL.lua_CSFunction;
|
||||
#endif
|
||||
|
||||
using System;
|
||||
<%
|
||||
require "TemplateCommon"
|
||||
%>
|
||||
|
||||
namespace XLua
|
||||
{
|
||||
public static partial class CopyByValue
|
||||
{
|
||||
<%ForEachCsList(type_infos, function(type_info)
|
||||
local full_type_name = CsFullTypeName(type_info.Type)
|
||||
%>
|
||||
<%if type_info.IsRoot then
|
||||
ForEachCsList(type_info.FieldInfos, function(fieldInfo) fieldInfo.Name = UnK(fieldInfo.Name) end)
|
||||
%>
|
||||
public static void UnPack(ObjectTranslator translator, RealStatePtr L, int idx, out <%=full_type_name%> val)
|
||||
{
|
||||
val = new <%=full_type_name%>();
|
||||
int top = LuaAPI.lua_gettop(L);
|
||||
<%ForEachCsList(type_info.FieldInfos, function(fieldInfo)%>
|
||||
if (Utils.LoadField(L, idx, "<%=fieldInfo.Name%>"))
|
||||
{
|
||||
<%if fieldInfo.IsField then%>
|
||||
translator.Get(L, top + 1, out val.<%=fieldInfo.Name%>);
|
||||
<%else%>
|
||||
var <%=fieldInfo.Name%> = val.<%=fieldInfo.Name%>;
|
||||
translator.Get(L, top + 1, out <%=fieldInfo.Name%>);
|
||||
val.<%=fieldInfo.Name%> = <%=fieldInfo.Name%>;
|
||||
<%end%>
|
||||
}
|
||||
LuaAPI.lua_pop(L, 1);
|
||||
<%end)%>
|
||||
}
|
||||
<%end%>
|
||||
public static bool Pack(IntPtr buff, int offset, <%=full_type_name%> field)
|
||||
{
|
||||
<%
|
||||
local offset_inner = 0
|
||||
if not type_info.FieldGroup then
|
||||
ForEachCsList(type_info.FieldInfos, function(fieldInfo)
|
||||
%>
|
||||
if(!Pack(buff, offset<%=(offset_inner == 0 and "" or (" + " .. offset_inner))%>, field.<%=fieldInfo.Name%>))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
<%
|
||||
offset_inner = offset_inner + fieldInfo.Size
|
||||
end)
|
||||
else
|
||||
ForEachCsList(type_info.FieldGroup, function(group)
|
||||
%>
|
||||
if(!LuaAPI.xlua_pack_float<%=(group.Count == 1 and "" or group.Count)%>(buff, offset<%=(offset_inner == 0 and "" or (" + " .. offset_inner))%><%
|
||||
ForEachCsList(group, function(fieldInfo, i)
|
||||
%>, field.<%=fieldInfo.Name%><%
|
||||
end)
|
||||
%>))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
<%
|
||||
offset_inner = offset_inner + group.Count * 4
|
||||
end)
|
||||
end%>
|
||||
return true;
|
||||
}
|
||||
public static bool UnPack(IntPtr buff, int offset, out <%=full_type_name%> field)
|
||||
{
|
||||
field = default(<%=full_type_name%>);
|
||||
<%
|
||||
local offset_inner = 0
|
||||
if not type_info.FieldGroup then
|
||||
ForEachCsList(type_info.FieldInfos, function(fieldInfo)
|
||||
if fieldInfo.IsField then
|
||||
%>
|
||||
if(!UnPack(buff, offset<%=(offset_inner == 0 and "" or (" + " .. offset_inner))%>, out field.<%=fieldInfo.Name%>))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
<%else%>
|
||||
var <%=fieldInfo.Name%> = field.<%=fieldInfo.Name%>;
|
||||
if(!UnPack(buff, offset<%=(offset_inner == 0 and "" or (" + " .. offset_inner))%>, out <%=fieldInfo.Name%>))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
field.<%=fieldInfo.Name%> = <%=fieldInfo.Name%>;
|
||||
<%
|
||||
end
|
||||
offset_inner = offset_inner + fieldInfo.Size
|
||||
end)
|
||||
else
|
||||
ForEachCsList(type_info.FieldGroup, function(group)
|
||||
%>
|
||||
<%ForEachCsList(group, function(fieldInfo)%>float <%=fieldInfo.Name%> = default(float);
|
||||
<%end)%>
|
||||
if(!LuaAPI.xlua_unpack_float<%=(group.Count == 1 and "" or group.Count)%>(buff, offset<%=(offset_inner == 0 and "" or (" + " .. offset_inner))%><%
|
||||
ForEachCsList(group, function(fieldInfo)
|
||||
%>, out <%=fieldInfo.Name%><%
|
||||
end)
|
||||
%>))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
<%ForEachCsList(group, function(fieldInfo)%>field.<%=fieldInfo.Name%> = <%=fieldInfo.Name%>;
|
||||
<%end)%>
|
||||
<%
|
||||
offset_inner = offset_inner + group.Count * 4
|
||||
end)
|
||||
end%>
|
||||
return true;
|
||||
}
|
||||
<%end)%>
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user