DefineClass.ZuluModuleDef = { __parents = { "ModuleDef" }, } local function append(pstr, subs, code) code = code:gsub("%$%((.-)%)", subs) pstr:append(code) end function ZuluModuleDef:GenerateGlobalCode(code) ModuleDef.GenerateGlobalCode(self, code) local subs = { class = self.id, var = self.id:lower(), member_array = self.DefOwnerMember, global_map = self.DefGlobalMap, } assert(subs.class ~= subs.var) append(code, subs, [[ function $(class)Owner:GetDynamicData(data) for i, $(var) in ipairs(self.$(member_array)) do if $(var).ShouldSave == nil or $(var):ShouldSave() then data.$(member_array) = data.$(member_array) or {} data.$(member_array)[#data.$(member_array)+1] = data.$(member_array)[#data.$(member_array)+1] or {} data.$(member_array)[#data.$(member_array)].id = $(var).id if type($(var).GetDynamicData) == "function" then $(var):GetDynamicData(data.$(member_array)[#data.$(member_array)]) end end end end function $(class)Owner:SetDynamicData(data) for i, $(var) in ipairs(data.$(member_array)) do local obj = $(global_map)[$(var).id]:new() if type(obj.SetDynamicData) == "function" then obj:SetDynamicData($(var)) end self:Add$(class)(obj) end end ]]) end