import { _decorator, color, Color, Component, Enum, Node, sp } from 'cc'; import { CupHeight, WaterColorHex, WaterColors } from '../TakeGobletGlobalInstance'; import { Water } from './Water'; import { EventDispatcher } from 'db://assets/core_tgx/easy_ui_framework/EventDispatcher'; import { GameEvent } from '../Enum/GameEvent'; import { GameUtil } from '../GameUtil'; import { TakeGobletAudioMgr } from '../Manager/TakeGobletAudioMgr'; const { ccclass, property } = _decorator; //暂存杯状态 默认 接水 倒水 export enum TempCupState { Default, Pick, PourWater } @ccclass('TempCup') export class TempCup extends Component { @property({ type: Enum(CupHeight), displayName: '杯高度' }) cupHeight: CupHeight = CupHeight.One @property(Node) waters: Node = null!; //水节点 @property(sp.Skeleton) colorB: sp.Skeleton = null!; //水流骨骼 @property(sp.Skeleton) cupSkeleton: sp.Skeleton = null!; //杯骨骼 @property(Node) adNode: Node = null!; private _currentColor: WaterColors = WaterColors.Blue; private _isFull: boolean = false; get isFull(): boolean { return this._isFull; } get currentColor(): WaterColors { return this._currentColor; } get iconAd(): boolean { return this.adNode.active; } start() { this.node.on(Node.EventType.TOUCH_END, () => { this.onTouchEndAdCup(); }); } private onTouchEndAdCup() { if (this.iconAd) { this.adNode.active = false; console.log('关闭广告图标@@@@@'); } } /**暂存杯 接水动画*/ async fill(color: WaterColors) { if (this._isFull) return; const waterNode = this.waters.children[0]; if (waterNode && waterNode.getComponent(sp.Skeleton)) { waterNode.active = true; this._currentColor = color; let cupColor = new Color(WaterColorHex[color]); let waterSpine = waterNode.getComponent(sp.Skeleton)!; // console.log(`暂存水的颜色:${WaterColorHex[color]}`) this.colorB.color = cupColor; waterSpine.color = cupColor; this.playAnimation(TempCupState.Pick); this._isFull = true; await GameUtil.delay(0.5); } } playAnimation(state: TempCupState) { let animaStr = state === TempCupState.Pick ? 'pick_01' : state === TempCupState.PourWater ? 'pour_01' : 'idle'; const waterNode = this.waters.children[0]; if (waterNode && waterNode.getComponent(sp.Skeleton)) { let waterSpine = waterNode.getComponent(sp.Skeleton)!; waterSpine.setAnimation(0, animaStr, false); this.colorB.setAnimation(0, animaStr, false); this.cupSkeleton.setAnimation(0, animaStr, false); } } /**暂存杯 倒水动画*/ pour() { TakeGobletAudioMgr.playOneShot(TakeGobletAudioMgr.getMusicIdName(4), 1.0); this.playAnimation(TempCupState.PourWater); } reset() { this._currentColor = WaterColors.White; let cupColor = new Color(WaterColorHex[this.currentColor]); let waterNode = this.waters.children[0]; let waterSpine = waterNode.getComponent(sp.Skeleton)!; this.colorB.color = cupColor; waterSpine.color = cupColor; this._isFull = false; this.playAnimation(TempCupState.Default); } public getColors(): WaterColors[] { return [this.currentColor]; } public isEmpty(): boolean { return this.waters.children.every(node => !node.active); } }