源战役客户端
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.

591 lines
17 KiB

  1. GameSettingManager = GameSettingManager or BaseClass(EventDispatcher)
  2. --屏蔽
  3. GameSettingManager.BLOCK_SETTING_CHANGE = "BLOCK_SETTING_CHANGE"
  4. -- 性能设置
  5. GameSettingManager.PerformanceList = {
  6. [1] =
  7. {
  8. title = "帧 率",
  9. name_list = {"","",""},
  10. val_list = {40,45,50},
  11. setting_str = "fps",
  12. },
  13. [2] =
  14. {
  15. title = "画 质",
  16. name_list = {"","",""},
  17. val_list = {1,2,3},
  18. setting_str = "quality"
  19. },
  20. }
  21. -- 性能设置默认值
  22. GameSettingManager.performanceSetDefualt = {
  23. fps = 50,
  24. quality = 3,
  25. }
  26. -- 基础设置默认值
  27. GameSettingManager.basicDefualt = {
  28. music = 50,
  29. soundEffect = 100,
  30. playerCounts = 15,
  31. }
  32. --挂机界面的设置默认值
  33. GameSettingManager.autoSetDefualt = {
  34. reborn = false,
  35. flyShoe = false,
  36. powerSave = true,
  37. autoSwallow = false,
  38. }
  39. -- 等级分辨率比例
  40. GameSettingManager.Resolution = {
  41. [1] = 0.8,
  42. [2] = 0.85,
  43. [3] = 1,
  44. }
  45. --[[
  46. other =
  47. monster =
  48. shadow =
  49. flower =
  50. chatVoice =
  51. horse =
  52. wing =
  53. talisman =
  54. godWeapon =
  55. aiNiang = AI娘
  56. otherPtc =
  57. baby =
  58. fashion =
  59. title =
  60. pet =
  61. --]]
  62. GameSettingManager.blockDefualt = {
  63. other = false,
  64. monster = false,
  65. shadow = false,
  66. flower = false,
  67. chatVoice = true,
  68. horse = false,
  69. wing = false,
  70. talisman = true,
  71. godWeapon = false,
  72. aiNiang = true,
  73. otherPtc = true,
  74. baby = true,
  75. fashion = false,
  76. title = false,
  77. pet = true,
  78. }
  79. --频道屏蔽语音
  80. GameSettingManager.blockChannel = {
  81. [1] = "world",
  82. [3] = "area",
  83. [4] = "guild",
  84. [13] = "cross",
  85. }
  86. function GameSettingManager:__init()
  87. GameSettingManager.Instance = self
  88. self.blockSet = {}
  89. self.sysSet = CookieWrapper.Instance:GetCookie(CookieLevelType.Common,CookieKey.SYSTEM_SETTING)
  90. self.soundSet = CookieWrapper.Instance:GetCookie(CookieLevelType.Common,CookieKey.SOUND_SETTING)
  91. self.temp_blockSet = {}
  92. local performanceCfg = GameSettingManager.PerformanceList and GameSettingManager.PerformanceList[1].val_list or nil
  93. --系统设置
  94. if not self.sysSet then
  95. local effectQuality = 2
  96. local screenQuality = 3
  97. local frameCount = 50
  98. if SystemMemoryLevel.Cur == SystemMemoryLevel.Low then
  99. effectQuality = 1
  100. frameCount = performanceCfg and performanceCfg[SystemMemoryLevel.Low] or 40
  101. elseif SystemMemoryLevel.Cur == SystemMemoryLevel.Middle then
  102. effectQuality = 2
  103. frameCount = performanceCfg and performanceCfg[SystemMemoryLevel.Middle] or 50
  104. else
  105. effectQuality = 3
  106. frameCount = performanceCfg and performanceCfg[SystemMemoryLevel.Hight] or 60
  107. end
  108. self.sysSet = {quality = screenQuality, effect = effectQuality, fps = frameCount, playerCounts = 15,
  109. reborn = false, flyShoe = false, powerSave = true, autoSwallow = false,
  110. }
  111. else
  112. local frameCount = 50
  113. if SystemMemoryLevel.Cur == SystemMemoryLevel.Low then
  114. frameCount = performanceCfg and performanceCfg[SystemMemoryLevel.Low] or 40
  115. elseif SystemMemoryLevel.Cur == SystemMemoryLevel.Middle then
  116. frameCount = performanceCfg and performanceCfg[SystemMemoryLevel.Middle] or 50
  117. else
  118. frameCount = performanceCfg and performanceCfg[SystemMemoryLevel.Hight] or 60
  119. end
  120. if not self.sysSet.fps then self.sysSet.fps = frameCount end
  121. if not self.sysSet.quality then self.sysSet.quality = 2 end
  122. if not self.sysSet.powerSave then self.sysSet.powerSave = true end
  123. if not self.sysSet.playerCounts then self.sysSet.playerCounts = 15 end
  124. end
  125. --音效设置
  126. if not self.soundSet then
  127. self.soundSet = {sound = Config.ConfigSound.TotalVloume, effectSound = Config.ConfigSound.TotalSoundEffect}
  128. end
  129. --屏蔽设置
  130. local cookie_blockSet = CookieWrapper.Instance:GetCookie(CookieLevelType.Common,CookieKey.BLOCK_SETTING)
  131. if not cookie_blockSet then
  132. self.blockSet = GameSettingManager.blockDefualt
  133. self:CheckPerformBlock()
  134. else
  135. --低端机没有选择权,按系统的来
  136. if SystemMemoryLevel.Cur == SystemMemoryLevel.Low then
  137. self.blockSet = GameSettingManager.blockDefualt
  138. self:CheckPerformBlock()
  139. else
  140. self.blockSet = cookie_blockSet
  141. end
  142. end
  143. -- 设置shaderlod
  144. if SystemMemoryLevel.Cur == SystemMemoryLevel.Low then
  145. Optimizer.SetShaderLodValue(200)
  146. end
  147. -- 设置界面动画开关
  148. ClientConfig.view_ani_mode = false
  149. ClientConfig.tabwin_ani_mode = false
  150. if SystemMemoryLevel.Cur ~= SystemMemoryLevel.Low then
  151. ClientConfig.view_ani_mode = true
  152. ClientConfig.tabwin_ani_mode = true
  153. end
  154. end
  155. --未手动设置过屏蔽信息的话,每次上线都根据设备等级校正一次屏蔽项
  156. function GameSettingManager:CheckPerformBlock( )
  157. if SystemMemoryLevel.Cur then
  158. if SystemMemoryLevel.Cur == SystemMemoryLevel.Low then
  159. self.sysSet.playerCounts = 15
  160. self.sysSet.fps = 40
  161. self.performanceSetDefualt["fps"] = 40
  162. self.blockSet.other = false -- 屏蔽所有玩家
  163. self.blockSet.monster = false -- 屏蔽所有怪物
  164. self.blockSet.shadow = true -- 屏蔽动态阴影
  165. self.blockSet.flower = true -- 屏蔽礼物效果
  166. self.blockSet.chatVoice = true -- 屏蔽自动语音
  167. self.blockSet.horse = false -- 屏蔽他人座驾
  168. self.blockSet.wing = true -- 屏蔽他人炫翼
  169. self.blockSet.talisman = true -- 屏蔽他人宝具
  170. self.blockSet.godWeapon = true -- 屏蔽他人神兵
  171. self.blockSet.aiNiang = true -- 屏蔽他人AI娘
  172. self.blockSet.otherPtc = true -- 屏蔽他人技能
  173. self.blockSet.baby = true -- 屏蔽他人宝宝
  174. self.blockSet.fashion = false -- 屏蔽他人时装
  175. self.blockSet.title = true -- 屏蔽他人称号
  176. self.blockSet.pet = true -- 屏蔽他人宠物
  177. elseif SystemMemoryLevel.Cur == SystemMemoryLevel.Middle then
  178. self.sysSet.playerCounts = 15
  179. self.sysSet.fps = 45
  180. self.performanceSetDefualt["fps"] = 45
  181. self.blockSet.other = false -- 屏蔽所有玩家
  182. self.blockSet.monster = false -- 屏蔽所有怪物
  183. self.blockSet.shadow = false -- 屏蔽动态阴影
  184. self.blockSet.flower = false -- 屏蔽礼物效果
  185. self.blockSet.chatVoice = true -- 屏蔽自动语音
  186. self.blockSet.horse = false -- 屏蔽他人座驾
  187. self.blockSet.wing = false -- 屏蔽他人炫翼
  188. self.blockSet.talisman = true -- 屏蔽他人宝具
  189. self.blockSet.godWeapon = false -- 屏蔽他人神兵
  190. self.blockSet.aiNiang = true -- 屏蔽他人AI娘
  191. self.blockSet.otherPtc = true -- 屏蔽他人技能
  192. self.blockSet.baby = true -- 屏蔽他人宝宝
  193. self.blockSet.fashion = false -- 屏蔽他人时装
  194. self.blockSet.title = false -- 屏蔽他人称号
  195. self.blockSet.pet = true -- 屏蔽他人宠物
  196. elseif SystemMemoryLevel.Cur == SystemMemoryLevel.Hight then
  197. self.sysSet.playerCounts = 20
  198. self.sysSet.fps = 50
  199. self.performanceSetDefualt["fps"] = 50
  200. self.blockSet.other = false -- 屏蔽所有玩家
  201. self.blockSet.monster = false -- 屏蔽所有怪物
  202. self.blockSet.shadow = false -- 屏蔽动态阴影
  203. self.blockSet.flower = false -- 屏蔽礼物效果
  204. self.blockSet.chatVoice = true -- 屏蔽自动语音
  205. self.blockSet.horse = false -- 屏蔽他人座驾
  206. self.blockSet.wing = false -- 屏蔽他人炫翼
  207. self.blockSet.talisman = true -- 屏蔽他人宝具
  208. self.blockSet.godWeapon = false -- 屏蔽他人神兵
  209. self.blockSet.aiNiang = true -- 屏蔽他人AI娘
  210. self.blockSet.otherPtc = true -- 屏蔽他人技能
  211. self.blockSet.baby = true -- 屏蔽他人宝宝
  212. self.blockSet.fashion = false -- 屏蔽他人时装
  213. self.blockSet.title = false -- 屏蔽他人称号
  214. self.blockSet.pet = true -- 屏蔽他人宠物
  215. end
  216. end
  217. end
  218. function GameSettingManager:getInstance()
  219. if GameSettingManager.Instance == nil then
  220. GameSettingManager.New()
  221. end
  222. return GameSettingManager.Instance
  223. end
  224. function GameSettingManager:GetBasicDefualt(key)
  225. return self.basicDefualt[key]
  226. end
  227. --挂机界面的默认自动设置
  228. function GameSettingManager:GetAutoSetDefualt(key)
  229. return self.autoSetDefualt[key]
  230. end
  231. function GameSettingManager:GetBlockDefualt(key)
  232. return self.blockDefualt[key]
  233. end
  234. function GameSettingManager:GetPerformanceDefualt(key)
  235. return self.performanceSetDefualt[key]
  236. end
  237. -- 还原屏蔽默认设置
  238. function GameSettingManager:SetBlockDefualt()
  239. self.blockSet = GameSettingManager.blockDefualt
  240. self:SaveBlockSet()
  241. end
  242. function GameSettingManager:ApplySetting()
  243. self:ApplyQualityLevel()
  244. self:ApplyEffectLevel()
  245. self:ApplyPlayerCounts()
  246. self:ApplyFPSLevel()
  247. self:ApplySceneEffect()
  248. end
  249. function GameSettingManager:SaveSoundSet()
  250. CookieWrapper.Instance:SaveCookie(CookieLevelType.Common, CookieTimeType.TYPE_ALWAYS, CookieKey.SOUND_SETTING, self.soundSet)
  251. end
  252. function GameSettingManager:SaveSysSet()
  253. CookieWrapper.Instance:SaveCookie(CookieLevelType.Common, CookieTimeType.TYPE_ALWAYS, CookieKey.SYSTEM_SETTING, self.sysSet)
  254. CookieWrapper.Instance:WriteAll()
  255. end
  256. function GameSettingManager:SaveBlockSet()
  257. CookieWrapper.Instance:SaveCookie(CookieLevelType.Common, CookieTimeType.TYPE_ALWAYS, CookieKey.BLOCK_SETTING, self.blockSet)
  258. end
  259. ------挂机界面的自动设置----start
  260. function GameSettingManager:GetAutoRebornSet()
  261. return self.sysSet.reborn
  262. end
  263. function GameSettingManager:SetAutoRebornSet(state)
  264. self.sysSet.reborn = state
  265. self:SaveSysSet()
  266. end
  267. function GameSettingManager:GetAutoSwallowSet()
  268. return self.sysSet.autoSwallow
  269. end
  270. function GameSettingManager:SetAutoSwallowSet(state)
  271. self.sysSet.autoSwallow = state
  272. self:SaveSysSet()
  273. end
  274. function GameSettingManager:GetAutoFlyShoeSet()
  275. return self.sysSet.flyShoe
  276. end
  277. function GameSettingManager:SetAutoFlyShoeSet(state)
  278. self.sysSet.flyShoe = state
  279. self:SaveSysSet()
  280. end
  281. function GameSettingManager:GetAutoPowerSaveSet()
  282. return self.sysSet.powerSave
  283. end
  284. function GameSettingManager:SetAutoPowerSaveSet(state)
  285. self.sysSet.powerSave = state
  286. self:SaveSysSet()
  287. end
  288. ------挂机界面的自动设置----end
  289. function GameSettingManager:SetSoundValue(value)
  290. self.soundSet.sound = value
  291. self:SaveSoundSet()
  292. end
  293. function GameSettingManager:SetEffectSoundValue(value)
  294. self.soundSet.effectSound = value
  295. self:SaveSoundSet()
  296. end
  297. function GameSettingManager:GetQualityLevel()
  298. -- if self.sysSet.powerSave then
  299. -- return self.powerSet.quality
  300. -- else
  301. return self.sysSet.quality
  302. -- end
  303. end
  304. --设置屏幕分辨率
  305. function GameSettingManager:SetResolution(level)
  306. if RuntimePlatform then
  307. if SystemRuntimePlatform.IsAndroid() or SystemRuntimePlatform.IsIphone() then --or ClientConfig.iphone_x_model then
  308. local scale = GameSettingManager.Resolution[level] or 1
  309. if OriginalResolutionWidth < 1500 then
  310. scale = 1 --1500以下就不要缩放了
  311. end
  312. if scale >= 1 and OriginalResolutionWidth > 2500 then
  313. scale = 2340/OriginalResolutionWidth
  314. end
  315. ResolutionWidth = math.floor(OriginalResolutionWidth * scale)
  316. ResolutionHeight = math.floor(OriginalResolutionHeight * scale)
  317. UnityEngine.Screen.SetResolution(ResolutionWidth, ResolutionHeight, true)
  318. ScreenConvertRatio = math.min(ResolutionWidth / OriginalScreenWidth,ResolutionHeight / OriginalScreenHeight)
  319. ScreenWidth = ResolutionWidth / ScreenConvertRatio --游戏中的屏幕逻辑像素宽度 也就是所谓的视口坐标 用来逻辑运算用的
  320. ScreenHeight = ResolutionHeight / ScreenConvertRatio --游戏中的屏幕逻辑像素高度 也就是所谓的视口坐标 用来逻辑运算用的
  321. if SystemRuntimePlatform.IsIphone() then
  322. CheckIphoneXState()
  323. end
  324. end
  325. end
  326. end
  327. function GameSettingManager:SetQualityLevel(level)
  328. if self.sysSet.quality and self.sysSet.quality == level then
  329. return
  330. end
  331. self.sysSet.quality = level
  332. self:ApplyQualityLevel()
  333. self:SaveSysSet()
  334. GlobalEventSystem:Fire(GameSettingEvent.ON_QUALITY_SETTING_CHANGE, level)
  335. end
  336. function GameSettingManager:ApplyQualityLevel(level)
  337. local level = level or self.sysSet.quality
  338. QualitySettings.SetQualityLevel(level - 1, false)
  339. self:SetResolution(level)
  340. end
  341. --切换画质的时候手动修改后处理效果,进入游戏之后才能调用
  342. function GameSettingManager:SetPostEffectLevel( level )
  343. local level = level or self.sysSet.quality
  344. if not MainCamera then
  345. return
  346. end
  347. --后处理设定,画质:1低 2中 3高
  348. print("tanar: [GameSettingManager 387]=> level: ",level)
  349. if level == 3 then
  350. -- 主摄像机
  351. local is_support_main_effect = MainCamera:getInstance():IsSupportPostEffect()
  352. if is_support_main_effect then
  353. if MainCamera:getInstance().main_postEffect then
  354. MainCamera:getInstance().main_postEffect.enabled = true
  355. end
  356. end
  357. -- 模型摄像机泛光
  358. local is_support_ui_effect = lua_viewM:IsSupportUIEffect()
  359. if is_support_ui_effect then
  360. if lua_viewM.bloom_effect then
  361. lua_viewM.bloom_effect.enabled = true
  362. -- 抗锯齿
  363. -- if lua_viewM:IsSupportUIEffect() then
  364. -- lua_viewM.bloom_effect.EnableFXAA = true
  365. -- lua_viewM.bloom_effect.subpixelBlending = 0.4
  366. -- lua_viewM.bloom_effect.lowQuality = true
  367. -- lua_viewM.bloom_effect:ApplyFXAAMaterialProperties()
  368. -- else
  369. lua_viewM.bloom_effect.EnableFXAA = false
  370. -- end
  371. end
  372. end
  373. elseif level == 2 then
  374. -- 主摄像机
  375. if MainCamera:getInstance().main_postEffect then
  376. MainCamera:getInstance().main_postEffect.enabled = false
  377. end
  378. -- 模型摄像机泛光
  379. local is_support_ui_effect = lua_viewM:IsSupportUIEffect()
  380. if is_support_ui_effect then
  381. if lua_viewM.bloom_effect then
  382. lua_viewM.bloom_effect.enabled = true
  383. -- 抗锯齿
  384. lua_viewM.bloom_effect.EnableFXAA = false
  385. -- lua_viewM.bloom_effect:ApplyFXAAMaterialProperties()
  386. end
  387. end
  388. elseif level == 1 then
  389. if MainCamera:getInstance().main_postEffect then
  390. MainCamera:getInstance().main_postEffect.enabled = false
  391. end
  392. if lua_viewM.bloom_effect then
  393. lua_viewM.bloom_effect.enabled = false
  394. end
  395. end
  396. end
  397. function GameSettingManager:GetEffectLevel()
  398. return self.sysSet.effect
  399. end
  400. function GameSettingManager:SetEffectLevel(level)
  401. self.sysSet.effect = level
  402. self:SaveSysSet()
  403. self:ApplyEffectLevel()
  404. end
  405. function GameSettingManager:ApplyEffectLevel(level)
  406. end
  407. function GameSettingManager:ApplySceneEffect()
  408. -- if MapView and MapView.Instance then
  409. -- MapView.Instance:RefreshEffect()
  410. -- end
  411. end
  412. function GameSettingManager:GetFPSLevel()
  413. return self.sysSet.fps
  414. end
  415. function GameSettingManager:SetSceneEffect(state )
  416. if MapView and MapView.Instance then
  417. MapView.Instance:SetHideRefreshEffect(state)
  418. end
  419. end
  420. function GameSettingManager:ApplyFPSLevel()
  421. FINAL_FRAMERATE = self.sysSet.fps or FINAL_FRAMERATE
  422. SetGameFrameRate(FINAL_FRAMERATE)
  423. end
  424. function GameSettingManager:GetPlayerCounts()
  425. return self.sysSet.playerCounts
  426. end
  427. function GameSettingManager:SetPlayerCounts(number)
  428. self.sysSet.playerCounts = number
  429. self:SaveSysSet()
  430. end
  431. function GameSettingManager:ApplyPlayerCounts()
  432. GlobalEventSystem:Fire(SceneEventType.UPDATE_ROLE_LIMIT)
  433. end
  434. function GameSettingManager:ApplyMonsterVisibleState()
  435. if self:GetBlockProperty("monster") then
  436. GlobalEventSystem:Fire(SceneEventType.HIDE_ALL_MONSTER)
  437. else
  438. GlobalEventSystem:Fire(SceneEventType.SHOW_ALL_MONSTER)
  439. end
  440. end
  441. function GameSettingManager:EnableEffectSound(state)
  442. self.sysSet.effectSound = state
  443. self:SaveSysSet()
  444. lua_soundM:SwitchEffectState(state)
  445. end
  446. function GameSettingManager:EnableMusicSound(state)
  447. self.sysSet.musicSound = state
  448. self:SaveSysSet()
  449. lua_soundM:SwitchMusicState(state)
  450. end
  451. function GameSettingManager:EnablePowerSave(state)
  452. self.sysSet.powerSave = state
  453. self:SaveSysSet()
  454. end
  455. function GameSettingManager:GetTargetPriority()
  456. return 2
  457. end
  458. function GameSettingManager:GetBlockProperty(key)
  459. if SceneManager.Instance:IsPkRankFightScene() then
  460. return false
  461. end
  462. return self.blockSet[key]
  463. end
  464. function GameSettingManager:SetBlockProperty(key, value)
  465. if self.blockSet[key] and self.blockSet[key] == value then return end
  466. self.blockSet[key] = value
  467. self:SaveBlockSet()
  468. self:Fire(GameSettingManager.BLOCK_SETTING_CHANGE, key, value)
  469. end
  470. -- performance的cookie也存在sysSet里面
  471. function GameSettingManager:GetPerformanceProperty(key)
  472. return self.sysSet[key]
  473. end
  474. function GameSettingManager:SetPerformanceProperty(key, value)
  475. if self.sysSet[key] and self.sysSet[key] == value then return end
  476. self.sysSet[key] = value
  477. self:SaveSysSet()
  478. if key == "quality" then
  479. self:SetQualityLevel(value)
  480. elseif key == "fps" then
  481. self:ApplyFPSLevel()
  482. end
  483. end
  484. --临时设置屏蔽标识
  485. function GameSettingManager:SetBlockPropertyTemp(key, value)
  486. if (self.blockSet[key] and self.blockSet[key] == value) or (self.temp_blockSet[key] and self.temp_blockSet[key] == value) then return end
  487. self.temp_blockSet[key] = value
  488. self:Fire(GameSettingManager.BLOCK_SETTING_CHANGE, key, value)
  489. end
  490. --获得是否存在标识
  491. function GameSettingManager:ExistBlockSet(key)
  492. return self.blockSet[key] or self.temp_blockSet[key]
  493. end
  494. --是否屏蔽特效副本场景
  495. function GameSettingManager:NotBlockEffecScene(sceneId)
  496. --以下玩法需要根据内存情况 判断是否默认开启特效
  497. if SceneManager:getInstance():IsLeagueWarScene(sceneId) or SceneManager:getInstance():IsCSPvP(sceneId) or SceneManager:getInstance():IsPkBattleScene(sceneId) then
  498. if SystemMemoryLevel.Cur == SystemMemoryLevel.Hight then
  499. return true
  500. else
  501. return false
  502. end
  503. end
  504. if SceneManager:getInstance():IsDiamondFightScene(sceneId) or SceneManager:getInstance():IsTopPkScene(sceneId) then
  505. return true
  506. end
  507. return false
  508. end
  509. --获得帧率上限
  510. function GameSettingManager:GetFrameRate( )
  511. return self.sysSet.frameRate or 60
  512. end