StateManager.ts 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. import { _decorator, Component, Node } from 'cc';
  2. import { CreateMap } from './CreateMap';
  3. import { PlayerCtl } from './PlayerCtl';
  4. import { Singleton } from '../Tools/Singleton';
  5. const { ccclass, property } = _decorator;
  6. export enum GameState
  7. {
  8. start,
  9. play,
  10. pause,
  11. exit,
  12. win,
  13. fail
  14. }
  15. //状态模式
  16. export interface baseState
  17. {
  18. enterState();
  19. beingState();
  20. exitState();
  21. }
  22. @ccclass('StartState')
  23. export class StartState implements baseState{
  24. //初始化场景,生成地图,播放背景音乐
  25. enterState(){
  26. CreateMap.getInstance().onLoad();
  27. }
  28. beingState(){
  29. }
  30. //进入玩的状态
  31. exitState(){
  32. }
  33. }
  34. @ccclass('PlayState')
  35. export class PlayState implements baseState{
  36. //玩家能触摸以及发射射线,播放背景音乐
  37. enterState(){
  38. PlayerCtl.instance.touchLock=false;
  39. }
  40. beingState(){
  41. }
  42. //玩家进入新的状态
  43. exitState(){
  44. }
  45. }
  46. @ccclass('WinState')
  47. export class WinState implements baseState{
  48. //玩家赢了,弹出界面
  49. enterState(){
  50. }
  51. //禁止对当前UI外操作
  52. beingState(){
  53. }
  54. //返回大厅
  55. exitState(){
  56. }
  57. }
  58. @ccclass('FailState')
  59. export class FailState implements baseState{
  60. //玩家输了,弹出界面,停止播放当前背景音乐,播放失败音效
  61. enterState(){
  62. }
  63. //禁止对当前UI外操作
  64. beingState(){
  65. }
  66. //返回大厅
  67. exitState(){
  68. }
  69. }
  70. @ccclass('StateManager')
  71. export class StateManager{
  72. private currentState:baseState;
  73. public static getInstance(): StateManager {
  74. return Singleton.getInstance(StateManager);
  75. }
  76. //初始化状态
  77. public initState(){
  78. this.currentState=new StartState();
  79. this.currentState.enterState();
  80. }
  81. //修改状态
  82. setState(state: baseState) {
  83. if (this.currentState) {
  84. this.currentState.exitState();
  85. }
  86. this.currentState = state;
  87. this.currentState.enterState();
  88. }
  89. getState(){
  90. return this.currentState;
  91. }
  92. onDestroy() {
  93. if(this.currentState){
  94. this.currentState=null;
  95. }
  96. }
  97. }