UILuckySpin.ts 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import { Widget, _decorator, Node, tween, math, Toggle } from 'cc';
  2. import { UIBase } from '../scriptBase/UIBase';
  3. import { CoinItem } from '../uiItem/CoinItem';
  4. import { CoinMgr } from '../manager/CoinMgr';
  5. import { Global } from '../Global';
  6. import { UI } from '../enum/UI';
  7. import { CfgLuckySpin } from '../config/CfgLuckySpin';
  8. import { InputBlock } from '../misc/InputBlock';
  9. import { DtoReward } from '../dto/DtoReward';
  10. import { AudioMgr } from '../manager/AudioMgr';
  11. const { ccclass, property, requireComponent } = _decorator;
  12. @ccclass('UI/UILuckySpin')
  13. @requireComponent(Widget)
  14. export class UILuckySpin extends UIBase {
  15. private coinItem: CoinItem = null
  16. private zhuanPan: Node = null
  17. private lights: Toggle = null
  18. private orgAngle: number = 0
  19. protected onLoad(): void {
  20. this.coinItem = this.findComp('CoinItem', CoinItem)
  21. this.zhuanPan = this.findNode('ZhuanPan')
  22. this.lights = this.findComp('Lights', Toggle)
  23. }
  24. public onOpen(data?: any): void {
  25. this.coinItem.init(CoinMgr.CurCoin)
  26. this.orgAngle = this.zhuanPan.angle
  27. }
  28. public onClose(data?: any): void {
  29. }
  30. private spin(): void {
  31. AudioMgr.playSfx('抽奖转盘')
  32. this.orgAngle = this.zhuanPan.angle
  33. const targetAngle: number = this.orgAngle - (720 + 60 * math.randomRangeInt(0, 6))
  34. const idx: number = (6 + (targetAngle % 360) / 60) % 6
  35. const data = CfgLuckySpin[idx]
  36. if (!data) {
  37. return
  38. }
  39. this.scheduleOnce(() => {
  40. const reward: DtoReward = {
  41. itemId: data.itemId,
  42. cnt: data.cnt
  43. }
  44. this.open(UI.GetReward, [reward])
  45. }, 3)
  46. InputBlock.setActive(3)
  47. tween(this.zhuanPan).to(3, { angle: targetAngle }, { easing: 'sineInOut' }).start()
  48. this.schedule(() => {
  49. this.lights.isChecked = !this.lights.isChecked
  50. }, 0.25, 10)
  51. }
  52. protected onBtnSpinClick(): void {
  53. if (CoinMgr.CurCoin < Global.Lucky_Spin_Coin_Cost) {
  54. this.open(UI.Toast, '星星币不足')
  55. return
  56. }
  57. CoinMgr.CurCoin -= Global.Lucky_Spin_Coin_Cost
  58. this.coinItem.updateCoin(CoinMgr.CurCoin, false)
  59. this.spin()
  60. }
  61. }