processCtr.ts 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. import { _decorator, Component, Game, Node } from "cc"
  2. import { GameCtr } from "../gameCtr"
  3. const { ccclass, property } = _decorator
  4. @ccclass("processCtr")
  5. export class processCtr extends Component {
  6. //消息队列
  7. public messageQueue = []
  8. public isProcessing = false
  9. private gameCtr: GameCtr = null;
  10. start() {
  11. }
  12. update(deltaTime: number) {
  13. }
  14. public init(gameCtr: GameCtr) {
  15. this.gameCtr = gameCtr;
  16. }
  17. processNextMessage = function () {
  18. console.log('加入队列')
  19. console.log(this.messageQueue)
  20. if (this.isProcessing || this.messageQueue.length === 0) {
  21. return; // If a message is currently being processed or there's no message in the queue, exit
  22. }
  23. const data = this.messageQueue.shift(); // Dequeue the next message
  24. this.isProcessing = true;
  25. console.log("processDoing 处理消息:" + data.type + " 消息队列剩余:" + this.messageQueue.length)
  26. switch (data.type) {
  27. case "plot":
  28. this.handlePlotMessage(data)
  29. break
  30. case "options":
  31. this.handleOptionsMessage(data)
  32. break
  33. case "votes":
  34. this.handleVotesMessage(data)
  35. break
  36. case "voteResult":
  37. this.handleVoteResultMessage(data)
  38. break
  39. case "state":
  40. this.handleStateMessage(data)
  41. break
  42. case "timeChange":
  43. this.handleTimeMessage(data)
  44. break
  45. case "newCharactor":
  46. this.handleNewPalyerMessage(data)
  47. break
  48. case "death":
  49. this.handleDeathMessage(data)
  50. break
  51. case "reset":
  52. this.handleResetMessage(data)
  53. break
  54. default:
  55. console.warn("Unknown message type:", data.type)
  56. this.doneProcessing(); // Ensure processing flag is reset even for unknown types
  57. }
  58. };
  59. doneProcessing = () => {
  60. this.isProcessing = false;
  61. this.processNextMessage(); // Check if there are more messages to process after current one is done
  62. };
  63. private handlePlotMessage(data: any) {
  64. console.log("Received plot message:", data)
  65. // 在这里处理 "展示剧情" 类型的消息
  66. this.gameCtr.handleStoryPannelMove(data);
  67. }
  68. private handleOptionsMessage(data: any) {
  69. console.log("Received options message:", data)
  70. // 在这里处理 "options" 类型的消息
  71. this.gameCtr.handleOptions(data);
  72. }
  73. private handleVoteResultMessage(data: any) {
  74. console.log("Received VoteResult message:", data)
  75. // 在这里处理 "VoteResult" 类型的消息
  76. this.gameCtr.handleVoteResul(data);
  77. }
  78. private handleVotesMessage(data: any) {
  79. console.log("Received votes message:", data)
  80. this.gameCtr.handleVotes(data);
  81. }
  82. private handleStateMessage(data: any) {
  83. console.log("Received State message:", data)
  84. // 在这里处理 "State" 类型的消息.
  85. this.gameCtr.handleStateResul(data);
  86. }
  87. private handleTimeMessage(data: any) {
  88. console.log("Received timeChange message:", data)
  89. // 在这里处理 "time change" 类型的消息.
  90. this.gameCtr.updateDateByWS(data);
  91. }
  92. private handleNewPalyerMessage(data: any) {
  93. console.log("Received newPlayer message:", data)
  94. // 在这里处理 "time change" 类型的消息.
  95. this.gameCtr.handleNewPlayer(data);
  96. }
  97. private handleResetMessage(data: any) {
  98. console.log("Received reset message:", data)
  99. // 在这里处理 "reset" 类型的消息.
  100. this.gameCtr.handleReset(data);
  101. }
  102. private handleDeathMessage(data: any) {
  103. console.log("Received death message:", data)
  104. // 在这里处理 "death" 类型的消息.
  105. this.gameCtr.handleDeath(data);
  106. }
  107. }