ModelConfigProxy.lua 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. local DebugProxy = requireProxy( "DebugProxy" )
  2. local ModelConfigProxy = class( "ModelConfigProxy", DebugProxy )
  3. ModelConfigProxy.NAME = global.ProxyTable.ModelConfigProxy
  4. function ModelConfigProxy:ctor()
  5. ModelConfigProxy.super.ctor(self)
  6. self._config = {}
  7. self._atlasSplitConfigs = {}
  8. end
  9. function ModelConfigProxy:GetConfig( id )
  10. return self._config[id]
  11. end
  12. function ModelConfigProxy:RetrieveConfig()
  13. return self._config
  14. end
  15. function ModelConfigProxy:Reload()
  16. self._config = {}
  17. self._atlasSplitConfigs = {}
  18. self:ReloadConfig()
  19. self:LoadSplitConfigs()
  20. end
  21. function ModelConfigProxy:LoadConfig()
  22. local act_interval_map = {
  23. [0] = "idle_interval",
  24. [1] = "walk_interval",
  25. [2] = "attack_interval",
  26. [3] = "magic_interval",
  27. [4] = "die_interval",
  28. [5] = "run_interval",
  29. [7] = "stuck_interval",
  30. [8] = "sitdown_interval",
  31. [9] = "born_interval",
  32. [10] = "mining_interval",
  33. [11] = "ready_interval",
  34. [12] = "changeshape_interval",
  35. [13] = "die_interval",
  36. [17] = "idle_interval",
  37. [18] = "walk_interval",
  38. [19] = "run_interval",
  39. [20] = "stuck_interval",
  40. [21] = "die_interval",
  41. [22] = "magic_interval",
  42. [23] = "magic_interval",
  43. [24] = "magic_interval",
  44. [25] = "magic_interval",
  45. [26] = "magic_interval",
  46. [27] = "magic_interval",
  47. [28] = "magic_interval",
  48. [29] = "magic_interval",
  49. [30] = "magic_interval",
  50. [31] = "magic_interval",
  51. [32] = "magic_interval",
  52. [33] = "magic_interval",
  53. [34] = "magic_interval",
  54. [41] = "run_interval",
  55. [42] = "walk_interval",
  56. [43] = "attack_interval",
  57. [44] = "attack_interval",
  58. [45] = "attack_interval",
  59. [46] = "attack_interval",
  60. [47] = "attack_interval",
  61. [48] = "magic_interval",
  62. [49] = "magic_interval",
  63. [50] = "attack_interval",
  64. [51] = "attack_interval",
  65. }
  66. local empty_key = {
  67. "idle_interval",
  68. "walk_interval",
  69. "attack_interval",
  70. "magic_interval",
  71. "die_interval",
  72. "run_interval",
  73. "stuck_interval",
  74. "sitdown_interval",
  75. "born_interval",
  76. "mining_interval",
  77. "ready_interval",
  78. "changeshape_interval",
  79. "enlarge",
  80. "hud_top",
  81. }
  82. local function fixItem(value)
  83. for i, v in ipairs(empty_key) do
  84. if value[v] == 0 then
  85. value[v] = nil
  86. end
  87. end
  88. value.dir = tonumber(value.dir) or 8
  89. value.frame = {}
  90. value.interval = {}
  91. for act = 0, global.MMO.ANIM_COUNT - 1 do
  92. value.interval[act] = tonumber(value[act_interval_map[act]]) or global.MMO.ANIM_DEFAULT_INTERVAL
  93. end
  94. if global.isWinPlayMode then
  95. value.offsetx = value.pc_offsetx or value.offsetx
  96. value.offsety = value.pc_offsety or value.offsety
  97. value.enlarge = value.pc_enlarge or value.enlarge
  98. end
  99. return value
  100. end
  101. -- 先加载996基础配置
  102. local config = requireGameConfig("cfg_model_info_996")
  103. for _, value in pairs( config ) do
  104. self._config[GetFrameAnimConfigID( value.id, value.sex, value.type )] = fixItem(value)
  105. end
  106. --
  107. local config = requireGameConfig("cfg_model_info")
  108. for _, value in pairs( config ) do
  109. self._config[GetFrameAnimConfigID( value.id, value.sex, value.type )] = fixItem(value)
  110. end
  111. end
  112. function ModelConfigProxy:ReloadConfig()
  113. package.loaded["game_config/cfg_model_info_996"] = nil
  114. package.loaded["game_config/cfg_model_info"] = nil
  115. self:LoadConfig()
  116. end
  117. function ModelConfigProxy:GetSplitAtlas( animID, act )
  118. local configs = self._atlasSplitConfigs[animID]
  119. if not configs then
  120. return nil
  121. end
  122. return configs[act]
  123. end
  124. function ModelConfigProxy:LoadSplitConfigs()
  125. local animType = nil
  126. local sex = nil
  127. local rawAnimID = nil
  128. local act = nil
  129. local count = nil
  130. local function LoadConfig(filePath)
  131. if global.FileUtilCtl:isFileExist(filePath) then
  132. local animID = nil
  133. local function callback(dataTable)
  134. if #dataTable <= 0 then
  135. return nil
  136. end
  137. animType = tonumber(dataTable[1])
  138. rawAnimID = tonumber(dataTable[2])
  139. sex = tonumber(dataTable[3])
  140. act = tonumber(dataTable[4])
  141. count = tonumber(dataTable[5])
  142. if nil == animType or nil == rawAnimID or nil == sex or nil == sex or nil == act or nil == count then
  143. return nil
  144. end
  145. animID = GetFrameAnimConfigID(rawAnimID, sex, animType)
  146. if self._atlasSplitConfigs[animID] == nil then self._atlasSplitConfigs[animID] = {} end
  147. self._atlasSplitConfigs[animID][act] = count
  148. end
  149. LoadTxt(filePath, ",", callback)
  150. end
  151. end
  152. self._atlasSplitConfigs = {}
  153. LoadConfig("data_config/ModelAtlasSplitConfigs_996.txt")
  154. LoadConfig("data_config/ModelAtlasSplitConfigs.txt")
  155. end
  156. function ModelConfigProxy:onRegister()
  157. ModelConfigProxy.super.onRegister(self)
  158. end
  159. function ModelConfigProxy:RequestUpdateConfig()
  160. LuaSendMsg(global.MsgType.MSG_CS_UPDATE_MODEL_CONFIG)
  161. end
  162. return ModelConfigProxy