HomeUI.ts 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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. const { ccclass, property } = _decorator;
  7. @ccclass('HomeUI')
  8. export class HomeUI extends Component {
  9. @property(Label)
  10. public lbPower: Label = null;
  11. @property(Label)
  12. public lbTimeCount: Label = null; // 倒计时组件
  13. //体力恢复时间
  14. private powerRecoverTime: number = 1;
  15. //体力最大值
  16. private powerMax: number = 1;
  17. //当前体力
  18. private powerCurrent: number = 0;
  19. //剩余恢复时间
  20. private remainingTime: number = 0;
  21. start() {
  22. const {powerRecoverTime,powerMax,powerCurrent} = UserManager.instance.userModel;
  23. this.powerRecoverTime = powerRecoverTime;
  24. this.powerMax = powerMax;
  25. this.powerCurrent = powerCurrent;
  26. const lastLeave = localStorage.getItem("lastLeaveTime");
  27. if (lastLeave) {
  28. const lastTime = parseInt(lastLeave);
  29. const now = Date.now();
  30. const offlineSeconds = Math.floor((now - lastTime) / 1000);
  31. // 计算可以恢复的体力数量
  32. const recoverCount = Math.floor(offlineSeconds / this.powerRecoverTime);
  33. this.powerCurrent = Math.min(this.powerCurrent + recoverCount, this.powerMax);
  34. // 计算剩余恢复时间
  35. if (this.powerCurrent < this.powerMax) {
  36. this.remainingTime = this.powerRecoverTime - (offlineSeconds % this.powerRecoverTime);
  37. } else {
  38. this.remainingTime = 0;
  39. }
  40. console.log(`离线恢复: ${recoverCount}点体力, 当前体力: ${this.powerCurrent}/${this.powerMax}`);
  41. } else {
  42. this.remainingTime = this.powerRecoverTime;
  43. }
  44. // 保存当前时间为新的退出时间
  45. localStorage.setItem("lastLeaveTime", Date.now().toString());
  46. this.updatePowerUI();
  47. }
  48. update(deltaTime: number) {
  49. if(!this.lbTimeCount || !this.lbPower) return;
  50. if (this.powerCurrent >= this.powerMax) {
  51. this.lbTimeCount.string = 'Max';
  52. return;
  53. }
  54. this.remainingTime -= deltaTime;
  55. if (this.remainingTime <= 0) {
  56. this.powerCurrent = Math.min(this.powerCurrent + 1, this.powerMax);
  57. this.remainingTime = this.powerRecoverTime;
  58. this.updatePowerUI();
  59. }
  60. this.lbTimeCount.string = GameUtil.formatToTimeString(Math.ceil(this.remainingTime));
  61. }
  62. private updatePowerUI() {
  63. if(!this.lbPower) return;
  64. this.lbPower.string = this.powerCurrent.toString();
  65. if (this.powerCurrent >= this.powerMax) {
  66. this.lbTimeCount.string = 'Max';
  67. }
  68. }
  69. }