HomeUI.ts 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. import { _decorator, Component, Label, Node } from 'cc';
  2. import { UserManager } from './Manager/UserMgr';
  3. import { GameUtil } from './GameUtil';
  4. import { tgxUIMgr } from '../../core_tgx/tgx';
  5. import { UI_BattleGambit } from '../../scripts/UIDef';
  6. import { EventDispatcher } from '../../core_tgx/easy_ui_framework/EventDispatcher';
  7. import { GameEvent } from './Enum/GameEvent';
  8. import { GlobalConfig } from '../../start/Config/GlobalConfig';
  9. const { ccclass, property } = _decorator;
  10. @ccclass('HomeUI')
  11. export class HomeUI extends Component {
  12. @property(Label)
  13. public lbPower: Label = null;
  14. @property(Label)
  15. public lbTimeCount: Label = null; // 倒计时组件
  16. //体力恢复时间
  17. private powerRecoverTime: number = 1;
  18. //体力最大值
  19. private powerMax: number = 1;
  20. //当前体力
  21. private powerCurrent: number = 0;
  22. //剩余恢复时间
  23. private remainingTime: number = 0;
  24. protected onLoad(): void {
  25. this.registerListener();
  26. }
  27. protected onDestroy(): void {
  28. this.unregisterListener();
  29. }
  30. start() {
  31. const {powerRecoverTime,powerMax,powerCurrent} = UserManager.instance.userModel;
  32. this.powerRecoverTime = powerRecoverTime;
  33. if(GlobalConfig.isDebug){
  34. this.powerRecoverTime = 30;
  35. }
  36. this.powerMax = powerMax;
  37. this.powerCurrent = powerCurrent;
  38. const lastLeave = localStorage.getItem("lastLeaveTime");
  39. if (lastLeave) {
  40. const lastTime = parseInt(lastLeave);
  41. const now = Date.now();
  42. const offlineSeconds = Math.floor((now - lastTime) / 1000);
  43. // 计算可以恢复的体力数量
  44. const recoverCount = Math.floor(offlineSeconds / this.powerRecoverTime);
  45. this.powerCurrent = Math.min(this.powerCurrent + recoverCount, this.powerMax);
  46. // 计算剩余恢复时间
  47. if (this.powerCurrent < this.powerMax) {
  48. this.remainingTime = this.powerRecoverTime - (offlineSeconds % this.powerRecoverTime);
  49. } else {
  50. this.remainingTime = 0;
  51. }
  52. console.log(`离线恢复: ${recoverCount}点体力, 当前体力: ${this.powerCurrent}/${this.powerMax}`);
  53. } else {
  54. this.remainingTime = this.powerRecoverTime;
  55. }
  56. // 保存当前时间为新的退出时间
  57. localStorage.setItem("lastLeaveTime", Date.now().toString());
  58. this.updatePowerUI();
  59. }
  60. private registerListener() {
  61. EventDispatcher.instance.on(GameEvent.EVENT_REFRESH_PLAYER_INFO,this.updatePowerUI,this);
  62. }
  63. update(deltaTime: number) {
  64. if(!this.lbTimeCount || !this.lbPower) return;
  65. if (this.powerCurrent >= this.powerMax) {
  66. this.lbTimeCount.string = 'Max';
  67. return;
  68. }
  69. this.remainingTime -= deltaTime;
  70. if (this.remainingTime <= 0) {
  71. this.powerCurrent = Math.min(this.powerCurrent + 1, this.powerMax);
  72. this.remainingTime = this.powerRecoverTime;
  73. this.updatePowerUI();
  74. }
  75. this.lbTimeCount.string = GameUtil.formatToTimeString(Math.ceil(this.remainingTime));
  76. }
  77. private updatePowerUI() {
  78. if(!this.lbPower) return;
  79. const {powerCurrent} = UserManager.instance.userModel;
  80. this.lbPower.string = powerCurrent.toString();
  81. if (powerCurrent >= this.powerMax) {
  82. this.lbTimeCount.string = 'Max';
  83. }
  84. }
  85. private unregisterListener() {
  86. EventDispatcher.instance.off(GameEvent.EVENT_REFRESH_PLAYER_INFO,this.updatePowerUI,this);
  87. }
  88. }