PhoneTrigger.ts 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import { _decorator, Component, Node } from 'cc';
  2. import { PhoneManager } from './PhoneManager';
  3. import { GameFlowManager } from './GameFlowManager';
  4. const { ccclass, property } = _decorator;
  5. /**
  6. * 电话触发器,用于点击场景中的电话物体时激活电话UI和对话
  7. */
  8. @ccclass('PhoneTrigger')
  9. export class PhoneTrigger extends Component {
  10. @property({
  11. type: PhoneManager,
  12. tooltip: '电话管理器引用 (已弃用,请使用GameFlowManager中的电话管理器)'
  13. })
  14. phoneManager: PhoneManager = null;
  15. @property({
  16. type: Node,
  17. tooltip: '游戏流程管理器所在的节点'
  18. })
  19. gameFlowManagerNode: Node = null;
  20. @property({
  21. tooltip: '是否启用触发器'
  22. })
  23. isEnabled: boolean = true;
  24. // 游戏流程管理器引用
  25. private gameFlowManager: GameFlowManager = null;
  26. start() {
  27. // 注册节点点击事件
  28. this.node.on(Node.EventType.TOUCH_END, this.onPhoneClicked, this);
  29. // 从节点获取GameFlowManager组件
  30. if (this.gameFlowManagerNode) {
  31. this.gameFlowManager = this.gameFlowManagerNode.getComponent(GameFlowManager);
  32. if (!this.gameFlowManager) {
  33. console.error('游戏流程管理器节点上没有GameFlowManager组件');
  34. }
  35. } else {
  36. // 尝试在场景中查找
  37. this.gameFlowManager = this.node.scene.getComponentInChildren(GameFlowManager);
  38. if (!this.gameFlowManager) {
  39. console.error('无法在场景中找到GameFlowManager组件');
  40. }
  41. }
  42. }
  43. /**
  44. * 电话被点击时的处理
  45. */
  46. private onPhoneClicked() {
  47. if (!this.isEnabled) {
  48. return;
  49. }
  50. console.log('电话被点击');
  51. // 优先通过GameFlowManager获取电话管理器
  52. if (this.gameFlowManager) {
  53. this.gameFlowManager.showPhoneUI();
  54. } else if (this.phoneManager) {
  55. // 兼容:如果直接设置了phoneManager属性,则使用它
  56. this.phoneManager.showPhonePanel();
  57. } else {
  58. console.error('未设置电话管理器引用,无法显示电话UI');
  59. }
  60. }
  61. /**
  62. * 启用触发器
  63. */
  64. public enable() {
  65. this.isEnabled = true;
  66. }
  67. /**
  68. * 禁用触发器
  69. */
  70. public disable() {
  71. this.isEnabled = false;
  72. }
  73. onDestroy() {
  74. // 移除事件监听
  75. this.node.off(Node.EventType.TOUCH_END, this.onPhoneClicked, this);
  76. }
  77. }