源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

96 lines
3.4 KiB

-- 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