源战役客户端
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

95 行
3.4 KiB

  1. -- Jury = Jury or BaseClass()
  2. --用BaseClass的话New了就要手动DeleteMe啊,好烦,lua本来就帮我们管理内存了还要多此一举
  3. Jury = Jury or {}
  4. --陪审团类,类似于“位操作”对象,因为StateFlag.H1的语义太不友好了,所以就专门弄多一个,建议对每个用途弄一个枚举作位名,但我知道大家都很懒的,用字符串作位名也可以但最好写具体写长点以免重复了
  5. --用法:
  6. --[[
  7. self.is_need_hide_jury = Jury.New()--判断是否需要隐藏的陪审团
  8. --在A情况下需要隐藏,那么A就投票了
  9. self.is_need_hide_jury:Vote("HideBecauseA")
  10. --A情况过后可以取消投票
  11. self.is_need_hide_jury:UnVote("HideBecauseA")
  12. --这时通过IsNoneVote得知是否没人投票,真的话就可以显示节点:
  13. node:SetBool(WidgetProperty.Visible, self.is_need_hide_jury:IsNoneVote())
  14. --但其实不用每次投票后都手动显示隐藏节点,你可以设置投票结果变更时的回调:
  15. local on_jury_change = function ( )
  16. --每次调用了Vote或UnVote方法后导致投票结果变更时就会触发此函数
  17. node:SetBool(WidgetProperty.Visible, self.is_need_hide_jury:IsNoneVote())
  18. end
  19. self.is_need_hide_jury:CallBackOnResultChange(on_jury_change)
  20. --]]
  21. Jury.__index = Jury
  22. function Jury.New( )
  23. local jury = {}
  24. setmetatable(jury, {__index = Jury})
  25. jury:Reset()
  26. return jury
  27. end
  28. --重置
  29. function Jury:Reset( )
  30. self.vote_table = {}
  31. self.is_none_vote = nil
  32. end
  33. --投票结果变更时触发,即从无人投切换到有人或有人投切换到无人投时触发,注意1人变到N人投也不会触发,因为结果都一样的
  34. function Jury:CallBackOnResultChange( call_back )
  35. self.call_back_on_result_change = call_back
  36. end
  37. --投票情况变更时触发,一般用CallBackOnResultChange就足够了并且性能会好点,你确定要用这个回调吗?我都没用过
  38. function Jury:CallBackOnVoteChange( call_back )
  39. self.call_back_on_vote_change = call_back
  40. end
  41. --某人name投票
  42. function Jury:Vote( name )
  43. if not name then return end
  44. self.vote_table[name] = true
  45. --如果之前是没人投票的,现在有人投所以结果就变更了
  46. local is_result_change = self.is_none_vote or (self.is_none_vote==nil)--self.is_none_vote的值需要在回调执行前修改,因为有可能回调里会调用本类的Reset,回调后再修改本类的值的话前面的Reset就没用了
  47. self.is_none_vote = false
  48. if is_result_change and self.call_back_on_result_change then
  49. self.call_back_on_result_change()
  50. end
  51. if self.call_back_on_vote_change then
  52. self.call_back_on_vote_change()
  53. end
  54. end
  55. --某人name取消投票
  56. function Jury:UnVote( name )
  57. if not name then return end
  58. self.vote_table[name] = nil
  59. local cur_is_none_vote = self:IsNoneVote()
  60. local is_result_change = self.is_none_vote ~= cur_is_none_vote
  61. self.is_none_vote = cur_is_none_vote
  62. if is_result_change and self.call_back_on_result_change then
  63. self.call_back_on_result_change()
  64. end
  65. if self.call_back_on_vote_change then
  66. self.call_back_on_vote_change()
  67. end
  68. end
  69. --是否有人投票了
  70. function Jury:HasAnyVote( )
  71. return next(self.vote_table)~=nil
  72. end
  73. --是否没人投票
  74. function Jury:IsNoneVote( )
  75. return next(self.vote_table)==nil
  76. end
  77. --某人是否投票了
  78. function Jury:HadVote( name )
  79. return self.vote_table[name] ~= nil
  80. end
  81. function Jury:PrintVote( )
  82. -- print("Cat:Jury [PrintVote] self.vote_table:", self.vote_table)
  83. -- PrintTable(self.vote_table)
  84. -- print("Cat:Jury [end]")
  85. end