ToggleExtend.ts 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import { _decorator, Component, EventHandler, Toggle } from 'cc';
  2. import { AudioMgr } from '../manager/AudioMgr';
  3. const { ccclass, property, disallowMultiple, requireComponent } = _decorator;
  4. @ccclass('UIExtend/ToggleExtend')
  5. @disallowMultiple(true)
  6. @requireComponent(Toggle)
  7. export class ToggleExtend extends Component {
  8. @property({ range: [0, 1, 0.1], slide: true })
  9. private safeTime: number = 0.5
  10. @property
  11. private clickSfx: string = 'btnClick'
  12. private toggle: Toggle = null
  13. private checkEvents: EventHandler[]
  14. private isSafe: boolean = true
  15. onLoad() {
  16. this.toggle = this.getComponent(Toggle)
  17. }
  18. protected start(): void {
  19. this.toggle.node.on(Toggle.EventType.TOGGLE, this.onToggle, this)
  20. }
  21. protected onToggle() {
  22. this.handleSafe()
  23. this.handleClickSfx()
  24. }
  25. private handleSafe(): void {
  26. if (!this.isSafe) return
  27. this.isSafe = false
  28. this.scheduleOnce(() => {
  29. this.checkEvents = this.toggle.checkEvents
  30. this.toggle.checkEvents = []
  31. this.scheduleOnce(this.recover, this.safeTime)
  32. })
  33. }
  34. private handleClickSfx(): void {
  35. if (!this.clickSfx) return
  36. AudioMgr.playSfx(this.clickSfx)
  37. }
  38. private recover(): void {
  39. this.isSafe = true
  40. this.toggle.checkEvents = this.checkEvents
  41. }
  42. }