playerManager.lua 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. local playerManager = class("playerManager")
  2. function playerManager:ctor()
  3. self.mPlayersInCurrViewFieldMap = {}
  4. self.mPlayersInCurrViewField = {}
  5. self.mPlayersIndexMap = {}
  6. self.mMainPlayerID = -1
  7. self.mPlayerCount = 0
  8. end
  9. function playerManager:destory()
  10. if playerManager.instance then
  11. playerManager.instance = nil
  12. end
  13. end
  14. function playerManager:Inst()
  15. if not playerManager.instance then
  16. playerManager.instance = playerManager.new()
  17. end
  18. return playerManager.instance
  19. end
  20. function playerManager:AddPlayer(player)
  21. if not player then
  22. return false
  23. end
  24. local playerID = player:GetID()
  25. if self.mPlayersInCurrViewFieldMap[playerID] then
  26. return false
  27. end
  28. self.mPlayerCount = self.mPlayerCount + 1
  29. local n = self.mPlayerCount
  30. self.mPlayersIndexMap[playerID] = n
  31. self.mPlayersInCurrViewField[n] = player
  32. self.mPlayersInCurrViewFieldMap[playerID] = player
  33. end
  34. function playerManager:RmvPlayer(playerID)
  35. local player = self.mPlayersInCurrViewFieldMap[playerID]
  36. if not player then
  37. return false
  38. end
  39. self.mPlayersInCurrViewFieldMap[playerID] = nil
  40. local index = self.mPlayersIndexMap[playerID]
  41. if index == self.mPlayerCount then
  42. self.mPlayersInCurrViewField[index] = nil
  43. else
  44. -- last index --> index
  45. local lastActor = self.mPlayersInCurrViewField[self.mPlayerCount]
  46. self.mPlayersInCurrViewField[index] = lastActor
  47. self.mPlayersIndexMap[lastActor:GetID()] = index
  48. -- reset last value
  49. self.mPlayersInCurrViewField[self.mPlayerCount] = nil
  50. end
  51. self.mPlayersIndexMap[playerID] = nil
  52. self.mPlayerCount = self.mPlayerCount - 1
  53. end
  54. function playerManager:FindPlayerIDInCurrViewField(noMainPlayer)
  55. if noMainPlayer == nil then
  56. noMainPlayer = true
  57. end
  58. local recvVec = {}
  59. local num = 0
  60. for i = 1, self.mPlayerCount do
  61. local m = self.mPlayersInCurrViewField[i]
  62. if m then
  63. if noMainPlayer and m:GetID() == self.mMainPlayerID then
  64. else
  65. num = num + 1
  66. recvVec[num] = m:GetID()
  67. end
  68. end
  69. end
  70. return recvVec, num
  71. end
  72. function playerManager:FindPlayerInCurrViewField(noMainPlayer)
  73. if noMainPlayer == nil then
  74. noMainPlayer = true
  75. end
  76. local recvVec = {}
  77. local num = 0
  78. for i = 1, self.mPlayerCount do
  79. local m = self.mPlayersInCurrViewField[i]
  80. if m then
  81. if noMainPlayer and m:GetID() == self.mMainPlayerID then
  82. else
  83. num = num + 1
  84. recvVec[num] = m
  85. end
  86. end
  87. end
  88. return recvVec, num
  89. end
  90. function playerManager:FindHeroInCurrViewField()
  91. local recvVec = {}
  92. local num = 0
  93. for i = 1, self.mPlayerCount do
  94. local m = self.mPlayersInCurrViewField[i]
  95. if m and m:IsHero() then
  96. num = num + 1
  97. recvVec[num] = m
  98. end
  99. end
  100. return recvVec, num
  101. end
  102. function playerManager:FindOnePlayerInCurrViewFieldById(playerID)
  103. return self.mPlayersInCurrViewFieldMap[playerID]
  104. end
  105. function playerManager:PlayerCountInView()
  106. return self.mPlayerCount
  107. end
  108. function playerManager:Cleanup()
  109. self.mPlayersInCurrViewFieldMap = {}
  110. self.mPlayersInCurrViewField = {}
  111. self.mPlayersIndexMap = {}
  112. self.mMainPlayerID = -1
  113. self.mPlayerCount = 0
  114. end
  115. function playerManager:CleanupMainPlayer()
  116. self.mMainPlayerID = -1
  117. end
  118. function playerManager:GetPlayersInCurrViewField()
  119. return self.mPlayersInCurrViewField, self.mPlayerCount
  120. end
  121. function playerManager:SetMainPlayerID(id)
  122. self.mMainPlayerID = id
  123. end
  124. function playerManager:GetMainPlayerID()
  125. return self.mMainPlayerID
  126. end
  127. return playerManager