-- Jury = Jury or BaseClass() --用BaseClass的话New了就要手动DeleteMe啊,好烦,lua本来就帮我们管理内存了还要多此一举 Jury = Jury or {} --陪审团类,类似于“位操作”对象,因为StateFlag.H1的语义太不友好了,所以就专门弄多一个,建议对每个用途弄一个枚举作位名,但我知道大家都很懒的,用字符串作位名也可以但最好写具体写长点以免重复了 --用法: --[[ self.is_need_hide_jury = Jury.New()--判断是否需要隐藏的陪审团 --在A情况下需要隐藏,那么A就投票了 self.is_need_hide_jury:Vote("HideBecauseA") --A情况过后可以取消投票 self.is_need_hide_jury:UnVote("HideBecauseA") --这时通过IsNoneVote得知是否没人投票,真的话就可以显示节点: node:SetBool(WidgetProperty.Visible, self.is_need_hide_jury:IsNoneVote()) --但其实不用每次投票后都手动显示隐藏节点,你可以设置投票结果变更时的回调: local on_jury_change = function ( ) --每次调用了Vote或UnVote方法后导致投票结果变更时就会触发此函数 node:SetBool(WidgetProperty.Visible, self.is_need_hide_jury:IsNoneVote()) end self.is_need_hide_jury:CallBackOnResultChange(on_jury_change) --]] Jury.__index = Jury function Jury.New( ) local jury = {} setmetatable(jury, {__index = Jury}) jury:Reset() return jury end --重置 function Jury:Reset( ) self.vote_table = {} self.is_none_vote = nil end --投票结果变更时触发,即从无人投切换到有人或有人投切换到无人投时触发,注意1人变到N人投也不会触发,因为结果都一样的 function Jury:CallBackOnResultChange( call_back ) self.call_back_on_result_change = call_back end --投票情况变更时触发,一般用CallBackOnResultChange就足够了并且性能会好点,你确定要用这个回调吗?我都没用过 function Jury:CallBackOnVoteChange( call_back ) self.call_back_on_vote_change = call_back end --某人name投票 function Jury:Vote( name ) if not name then return end self.vote_table[name] = true --如果之前是没人投票的,现在有人投所以结果就变更了 local is_result_change = self.is_none_vote or (self.is_none_vote==nil)--self.is_none_vote的值需要在回调执行前修改,因为有可能回调里会调用本类的Reset,回调后再修改本类的值的话前面的Reset就没用了 self.is_none_vote = false if is_result_change and self.call_back_on_result_change then self.call_back_on_result_change() end if self.call_back_on_vote_change then self.call_back_on_vote_change() end end --某人name取消投票 function Jury:UnVote( name ) if not name then return end self.vote_table[name] = nil local cur_is_none_vote = self:IsNoneVote() local is_result_change = self.is_none_vote ~= cur_is_none_vote self.is_none_vote = cur_is_none_vote if is_result_change and self.call_back_on_result_change then self.call_back_on_result_change() end if self.call_back_on_vote_change then self.call_back_on_vote_change() end end --是否有人投票了 function Jury:HasAnyVote( ) return next(self.vote_table)~=nil end --是否没人投票 function Jury:IsNoneVote( ) return next(self.vote_table)==nil end --某人是否投票了 function Jury:HadVote( name ) return self.vote_table[name] ~= nil end function Jury:PrintVote( ) -- print("Cat:Jury [PrintVote] self.vote_table:", self.vote_table) -- PrintTable(self.vote_table) -- print("Cat:Jury [end]") end