123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- import { _decorator, Component, Label, Node } from 'cc';
- import { UserManager } from './Manager/UserMgr';
- import { GameUtil } from './GameUtil';
- import { tgxUIMgr } from '../../core_tgx/tgx';
- import { UI_BattleGambit, UI_PowerUp } from '../../scripts/UIDef';
- import { EventDispatcher } from '../../core_tgx/easy_ui_framework/EventDispatcher';
- import { GameEvent } from './Enum/GameEvent';
- import { GlobalConfig } from '../../start/Config/GlobalConfig';
- const { ccclass, property } = _decorator;
- @ccclass('HomeUI')
- export class HomeUI extends Component {
- @property(Label)
- public lbPower: Label = null;
- @property(Label)
- public lbTimeCount: Label = null; // 倒计时组件
- //体力恢复时间
- private powerRecoverTime: number = 1;
- //体力最大值
- private powerMax: number = 1;
- //当前体力
- private powerCurrent: number = 0;
- //剩余恢复时间
- private remainingTime: number = 0;
- protected onLoad(): void {
- this.registerListener();
- }
- protected onDestroy(): void {
- this.unregisterListener();
- }
- start() {
- const {powerRecoverTime,powerMax,powerCurrent} = UserManager.instance.userModel;
- this.powerRecoverTime = powerRecoverTime;
- if(GlobalConfig.isDebug){
- this.powerRecoverTime = 30;
- }
- this.powerMax = powerMax;
- this.powerCurrent = powerCurrent;
- const lastLeave = localStorage.getItem("lastLeaveTime");
- if (lastLeave) {
- const lastTime = parseInt(lastLeave);
- const now = Date.now();
- const offlineSeconds = Math.floor((now - lastTime) / 1000);
-
- // 计算可以恢复的体力数量
- const recoverCount = Math.floor(offlineSeconds / this.powerRecoverTime);
- this.powerCurrent = Math.min(this.powerCurrent + recoverCount, this.powerMax);
-
- // 计算剩余恢复时间
- if (this.powerCurrent < this.powerMax) {
- this.remainingTime = this.powerRecoverTime - (offlineSeconds % this.powerRecoverTime);
- } else {
- this.remainingTime = 0;
- }
-
- console.log(`离线恢复: ${recoverCount}点体力, 当前体力: ${this.powerCurrent}/${this.powerMax}`);
- } else {
- this.remainingTime = this.powerRecoverTime;
- }
- // 保存当前时间为新的退出时间
- localStorage.setItem("lastLeaveTime", Date.now().toString());
- this.updatePowerUI();
- }
- private registerListener() {
- EventDispatcher.instance.on(GameEvent.EVENT_REFRESH_PLAYER_INFO,this.updatePowerUI,this);
- const btnPowerUp = this.node.getChildByPath('HomeUI/Power/BtnPowerUp')!;
- btnPowerUp.on(Node.EventType.TOUCH_END, this.onClickPowerUp,this);
- }
- update(deltaTime: number) {
- if(!this.lbTimeCount || !this.lbPower) return;
- if (this.powerCurrent >= this.powerMax) {
- this.lbTimeCount.string = 'Max';
- return;
- }
- this.remainingTime -= deltaTime;
- if (this.remainingTime <= 0) {
- this.powerCurrent = Math.min(this.powerCurrent + 1, this.powerMax);
- this.remainingTime = this.powerRecoverTime;
- this.updatePowerUI();
- }
- this.lbTimeCount.string = GameUtil.formatToTimeString(Math.ceil(this.remainingTime));
- }
- private updatePowerUI() {
- if(!this.lbPower) return;
- const {powerCurrent} = UserManager.instance.userModel;
- this.lbPower.string = powerCurrent.toString();
- if (powerCurrent >= this.powerMax) {
- this.lbTimeCount.string = 'Max';
- }
- }
- private onClickPowerUp() {
- const match = tgxUIMgr.inst.isShowing(UI_PowerUp);
- if (!match) {
- tgxUIMgr.inst.showUI(UI_PowerUp);
- }
- }
- private unregisterListener() {
- EventDispatcher.instance.off(GameEvent.EVENT_REFRESH_PLAYER_INFO,this.updatePowerUI,this);
- }
- }
|