RoleData = {} RoleData.__index = RoleData local max = math.max function RoleData.New(role, data) local instance = {} setmetatable(instance, RoleData) instance.role = role instance.data = data return instance end function RoleData:GetData(name) if self.data[name] then return self.data[name][1] end end function RoleData:SetValue(name, value) if self.data[name][1] then local delta = self.data[name][1] self.data[name][1] = value delta = value - delta if delta ~= 0 then self.role.Event:DispatchEvent(BattleEventName.RolePropertyChanged, name, value, delta) if BattleLogic.IsOpenBattleRecord then BattleLogic.RecordRoleProperty(self.role.uid, self.role.camp, name, value, delta) end end end end function RoleData:AddValue(name, delta) if delta < 0 or not self.data[name] then --delta必须非负 return 0 end if self.data[name][1] then self:SetValue(name, self.data[name][1] + delta) end return delta end function RoleData:AddPencentValue(name, pencent) if self.data[name][1] and not self.data[name][2] then return self:AddValue(name, self.data[name][1] * pencent) else return self:AddValue(name, pencent) end end function RoleData:SubDeltaValue(name, delta) if delta < 0 or not self.data[name] then --delta必须非负 return 0 end if self.data[name][1] then self:SetValue(name, self.data[name][1] - delta) end return delta end function RoleData:SubValue(name, delta) if delta < 0 or not self.data[name] then --delta必须非负 return 0 end local orVal = self.data[name][1] if orVal then if self.data[name][2] then self:SetValue(name, self.data[name][1] * (1 - delta)) else self:SetValue(name, max(self.data[name][1] - delta, 0)) end orVal = orVal - self.data[name][1] end return orVal end function RoleData:SubPencentValue(name, pencent) if self.data[name][1] and not self.data[name][2] then return self:SubValue(name, self.data[name][1] * pencent) else return self:SubValue(name, pencent) end end --Debug function RoleData:Foreach(func) for k,v in ipairs(self.data) do func(k, v[1]) end end