1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- import { _decorator, Component, Label, math, Node, ProgressBar, Sprite, tween, UIOpacity, v3, Vec3 } from 'cc';
- import { Global } from '../Global';
- import { CfgCombo } from '../config/CfgCombo';
- import { GameMgr } from '../manager/GameMgr';
- import { ResMgr } from '../manager/ResMgr';
- import { Bundle } from '../enum/Bundle';
- const { ccclass, property } = _decorator;
- @ccclass('Game/ComboBox')
- export class ComboBox extends Component {
- @property(ProgressBar)
- private progressBar: ProgressBar = null
- @property(Label)
- private lbCombo: Label = null
- private curCombo: number = 0
- public get CurCombo(): number {
- return this.curCombo
- }
- public set CurCombo(v: number) {
- this.curCombo = math.clamp(v, 0, Global.Max_Combo)
- this.node.active = this.curCombo > 0
- if (this.curCombo <= 0) return
- this.lbCombo.string = `x${this.curCombo}`
- const comboData = CfgCombo[this.curCombo]
- const { durarion } = comboData
- this.speed = 1 / durarion
- this.progressBar.progress = 1
- }
- private speed: number = 0
- protected start(): void {
- this.CurCombo = 0
- }
- protected update(dt: number): void {
- if (GameMgr.Pause) return
- if (this.curCombo <= 0) return
- this.progressBar.progress = math.clamp(this.progressBar.progress - this.speed * dt, 0, 1)
- if (this.progressBar.progress <= 0) {
- this.CurCombo = 0
- }
- }
- public createFloatText(shelveWorldPos: Vec3): void {
- const floatText: Node = new Node()
- const sp: Sprite = floatText.addComponent(Sprite)
- const uiOpacity: UIOpacity = floatText.addComponent(UIOpacity)
- const comboData = CfgCombo[this.curCombo]
- const { icon } = comboData
- if(!icon) return
- sp.spriteFrame = ResMgr.getSpriteFrame(Bundle.Game, icon)
- this.node.parent.addChild(floatText)
- floatText.setWorldPosition(shelveWorldPos)
- const tw = tween(floatText)
- tw.set({ scale: v3(0.5, 0.5, 1) })
- tw.to(0.5, { scale: v3(1, 1, 1) }, { easing: 'backOut' })
- tw.by(0.5, { position: v3(0, 50, 0) }, { easing: 'sineOut' })
- tw.call(() => {
- floatText.destroy()
- })
- tw.start()
- tween(uiOpacity).delay(0.5).to(0.5, { opacity: 0 }, { easing: 'sineOut' }).start()
- }
- }
|