@ives_xxz/framework 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/FW.d.ts +1845 -0
  2. package/FW.d.ts.meta +6 -0
  3. package/Framework.ts +148 -0
  4. package/Framework.ts.meta +10 -0
  5. package/README.md +93 -0
  6. package/README.md.meta +6 -0
  7. package/animation/FWAnimation.ts +13 -0
  8. package/animation/FWAnimation.ts.meta +10 -0
  9. package/animation/FWSkeleton.ts +176 -0
  10. package/animation/FWSkeleton.ts.meta +10 -0
  11. package/animation/FWTween.ts +60 -0
  12. package/animation/FWTween.ts.meta +10 -0
  13. package/animation.meta +13 -0
  14. package/component/FWVirtualViewComponent.ts +2080 -0
  15. package/component/FWVirtualViewComponent.ts.meta +10 -0
  16. package/component.meta +13 -0
  17. package/config/FWAssetConfig.ts +7 -0
  18. package/config/FWAssetConfig.ts.meta +10 -0
  19. package/config.meta +13 -0
  20. package/controller/FWLayerController.ts +236 -0
  21. package/controller/FWLayerController.ts.meta +10 -0
  22. package/controller.meta +13 -0
  23. package/data/FWData.ts +10 -0
  24. package/data/FWData.ts.meta +10 -0
  25. package/data.meta +13 -0
  26. package/define/FWEventDefine.ts +26 -0
  27. package/define/FWEventDefine.ts.meta +10 -0
  28. package/define/FWSystemDefine.ts +133 -0
  29. package/define/FWSystemDefine.ts.meta +10 -0
  30. package/define.meta +13 -0
  31. package/entry/FWEntry.ts +196 -0
  32. package/entry/FWEntry.ts.meta +10 -0
  33. package/entry.meta +13 -0
  34. package/expand/FWCocosExpand.ts +73 -0
  35. package/expand/FWCocosExpand.ts.meta +10 -0
  36. package/expand/FWDecorator.ts +256 -0
  37. package/expand/FWDecorator.ts.meta +10 -0
  38. package/expand/FWRollingViewNesting.ts +191 -0
  39. package/expand/FWRollingViewNesting.ts.meta +10 -0
  40. package/expand/FWTweenExpand.ts +44 -0
  41. package/expand/FWTweenExpand.ts.meta +10 -0
  42. package/expand.meta +13 -0
  43. package/item/FWVirtualListItem.ts +150 -0
  44. package/item/FWVirtualListItem.ts.meta +10 -0
  45. package/item.meta +13 -0
  46. package/language/FWLanguage.ts +69 -0
  47. package/language/FWLanguage.ts.meta +10 -0
  48. package/language/FWLanguageLabelLocalize.ts +144 -0
  49. package/language/FWLanguageLabelLocalize.ts.meta +10 -0
  50. package/language/FWLanguageSkeletonLocalize.ts +106 -0
  51. package/language/FWLanguageSkeletonLocalize.ts.meta +10 -0
  52. package/language/FWLanguageSpriteLocalize.ts +81 -0
  53. package/language/FWLanguageSpriteLocalize.ts.meta +10 -0
  54. package/language.meta +13 -0
  55. package/layer/FWLayer.ts +13 -0
  56. package/layer/FWLayer.ts.meta +10 -0
  57. package/layer.meta +13 -0
  58. package/log/FWLog.ts +115 -0
  59. package/log/FWLog.ts.meta +10 -0
  60. package/log.meta +13 -0
  61. package/logic/FWLogic.ts +10 -0
  62. package/logic/FWLogic.ts.meta +10 -0
  63. package/logic.meta +13 -0
  64. package/machine/FWAnimationMachine.ts +28 -0
  65. package/machine/FWAnimationMachine.ts.meta +10 -0
  66. package/machine/FWStateMachine.ts +75 -0
  67. package/machine/FWStateMachine.ts.meta +10 -0
  68. package/machine.meta +13 -0
  69. package/manager/FWAnimationManager.ts +128 -0
  70. package/manager/FWAnimationManager.ts.meta +10 -0
  71. package/manager/FWAssetManager.ts +349 -0
  72. package/manager/FWAssetManager.ts.meta +10 -0
  73. package/manager/FWAudioManager.ts +289 -0
  74. package/manager/FWAudioManager.ts.meta +10 -0
  75. package/manager/FWBundleManager.ts +91 -0
  76. package/manager/FWBundleManager.ts.meta +10 -0
  77. package/manager/FWComponentManager.ts +25 -0
  78. package/manager/FWComponentManager.ts.meta +10 -0
  79. package/manager/FWEngineManager.ts +63 -0
  80. package/manager/FWEngineManager.ts.meta +10 -0
  81. package/manager/FWEventManager.ts +275 -0
  82. package/manager/FWEventManager.ts.meta +10 -0
  83. package/manager/FWHotUpdateManager.ts +213 -0
  84. package/manager/FWHotUpdateManager.ts.meta +10 -0
  85. package/manager/FWLanguageManager.ts +116 -0
  86. package/manager/FWLanguageManager.ts.meta +10 -0
  87. package/manager/FWLayerManager.ts +490 -0
  88. package/manager/FWLayerManager.ts.meta +10 -0
  89. package/manager/FWManager.ts +8 -0
  90. package/manager/FWManager.ts.meta +10 -0
  91. package/manager/FWObjectManager.ts +91 -0
  92. package/manager/FWObjectManager.ts.meta +10 -0
  93. package/manager/FWResManager.ts +171 -0
  94. package/manager/FWResManager.ts.meta +10 -0
  95. package/manager/FWSocketManager.ts +94 -0
  96. package/manager/FWSocketManager.ts.meta +10 -0
  97. package/manager/FWStateManager.ts +102 -0
  98. package/manager/FWStateManager.ts.meta +10 -0
  99. package/manager/FWTaskManager.ts +38 -0
  100. package/manager/FWTaskManager.ts.meta +10 -0
  101. package/manager/FWTimeManager.ts +473 -0
  102. package/manager/FWTimeManager.ts.meta +10 -0
  103. package/manager/FWUiManager.ts +164 -0
  104. package/manager/FWUiManager.ts.meta +10 -0
  105. package/manager.meta +13 -0
  106. package/package.json +17 -0
  107. package/package.json.meta +6 -0
  108. package/scene/FWScene.ts +25 -0
  109. package/scene/FWScene.ts.meta +10 -0
  110. package/scene.meta +13 -0
  111. package/service/FWService.ts +7 -0
  112. package/service/FWService.ts.meta +10 -0
  113. package/service/http/FWHttp.ts +70 -0
  114. package/service/http/FWHttp.ts.meta +10 -0
  115. package/service/http.meta +13 -0
  116. package/service/socket/FWSocket.ts +236 -0
  117. package/service/socket/FWSocket.ts.meta +10 -0
  118. package/service/socket/FWSocketHandle.ts +17 -0
  119. package/service/socket/FWSocketHandle.ts.meta +10 -0
  120. package/service/socket/FWSocketSender.ts +16 -0
  121. package/service/socket/FWSocketSender.ts.meta +10 -0
  122. package/service/socket.meta +13 -0
  123. package/service.meta +13 -0
  124. package/state/FWState.ts +8 -0
  125. package/state/FWState.ts.meta +10 -0
  126. package/state.meta +13 -0
  127. package/utils/FWLodash.ts +105 -0
  128. package/utils/FWLodash.ts.meta +10 -0
  129. package/utils/FWMask.ts +222 -0
  130. package/utils/FWMask.ts.meta +10 -0
  131. package/utils/FWObject.ts +22 -0
  132. package/utils/FWObject.ts.meta +10 -0
  133. package/utils/FWObjectPool.ts +178 -0
  134. package/utils/FWObjectPool.ts.meta +10 -0
  135. package/utils/FWQueue.ts +47 -0
  136. package/utils/FWQueue.ts.meta +10 -0
  137. package/utils/FWTask.ts +223 -0
  138. package/utils/FWTask.ts.meta +10 -0
  139. package/utils.meta +13 -0
@@ -0,0 +1,106 @@
1
+ import { FWLodash } from '../utils/FWLodash';
2
+ import FWLanguage from './FWLanguage';
3
+
4
+ const { ccclass, property, menu, requireComponent } = cc._decorator;
5
+
6
+ const languageEnum = FWLodash.CCEnum([
7
+ '请选择语言',
8
+ ...FW.Entry.languageMgr.getSupportedLanguages(),
9
+ ]);
10
+ @ccclass('FWLanguageSkeleton')
11
+ class FWLanguageSkeleton {
12
+ @property({
13
+ type: languageEnum,
14
+ displayName: 'language',
15
+ visible: true,
16
+ serializable: true,
17
+ })
18
+ language: number = 0;
19
+
20
+ @property({
21
+ type: sp.SkeletonData,
22
+ displayName: 'skeletonData',
23
+ serializable: true,
24
+ })
25
+ skeleton: sp.SkeletonData = null;
26
+
27
+ @property({
28
+ visible: true,
29
+ serializable: true,
30
+ displayName: 'loop',
31
+ })
32
+ loop: boolean = true;
33
+
34
+ @property({
35
+ visible: true,
36
+ serializable: true,
37
+ displayName: 'premultipliedAlpha',
38
+ })
39
+ premultipliedAlpha: boolean = false;
40
+
41
+ @property({
42
+ visible: true,
43
+ serializable: true,
44
+ displayName: 'timeScale',
45
+ })
46
+ timeScale: number = 1;
47
+ }
48
+ @ccclass
49
+ @menu('Language/FWLanguageSkeletonLocalize')
50
+ @requireComponent(sp.Skeleton)
51
+ export default class FWLanguageSkeletonLocalize extends FWLanguage {
52
+ @property
53
+ private _inspector: FWLanguageSkeleton[] = [];
54
+ private _skeleton: sp.Skeleton;
55
+ private _animation: FW.Skeleton;
56
+
57
+ @property({ type: [FWLanguageSkeleton] })
58
+ get inspector() {
59
+ return this._inspector;
60
+ }
61
+
62
+ set inspector(value: FWLanguageSkeleton[]) {
63
+ this._inspector = value;
64
+ }
65
+
66
+ protected onLanguageChange(): void {
67
+ this.onRefresh();
68
+ }
69
+
70
+ protected onLoad(): void {
71
+ super.onLoad?.();
72
+ this._skeleton = this.node.getComponent(sp.Skeleton);
73
+ this._animation = FW.Entry.animationMgr.createSkeleton(this._skeleton);
74
+ }
75
+
76
+ protected onRefresh(): void {
77
+ if (this._language == 0 && CC_EDITOR) {
78
+ this._skeleton.skeletonData = null;
79
+ //@ts-ignore
80
+ CC_EDITOR && Editor.log('未选择语言!');
81
+ return;
82
+ }
83
+ const index = this.inspector.findIndex((v) => {
84
+ return v.language == this._language;
85
+ });
86
+ if (index == -1) {
87
+ this._skeleton.skeletonData = null;
88
+ //@ts-ignore
89
+ CC_EDITOR && Editor.log('当前语言未配置!');
90
+ return;
91
+ }
92
+ const skeleton = this.inspector[index];
93
+ if (!skeleton?.skeleton) {
94
+ //@ts-ignore
95
+ CC_EDITOR && Editor.log('当前语言skeletonData不存在!');
96
+ this.language = 0;
97
+ return;
98
+ }
99
+ this._skeleton.skeletonData = skeleton.skeleton;
100
+ this._skeleton.animation = this._animation.getAnimationNames()?.[0];
101
+ this._animation.play({
102
+ loop: skeleton.loop,
103
+ timeScale: skeleton.timeScale,
104
+ });
105
+ }
106
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "ver": "1.1.0",
3
+ "uuid": "26a2ce4f-316b-4f43-bb02-c984bf6cd049",
4
+ "importer": "typescript",
5
+ "isPlugin": false,
6
+ "loadPluginInWeb": true,
7
+ "loadPluginInNative": true,
8
+ "loadPluginInEditor": false,
9
+ "subMetas": {}
10
+ }
@@ -0,0 +1,81 @@
1
+ import { FWLodash } from '../utils/FWLodash';
2
+ import FWLanguage from './FWLanguage';
3
+
4
+ const { ccclass, property, executeInEditMode, menu, requireComponent } = cc._decorator;
5
+
6
+ const languageEnum = FWLodash.CCEnum([
7
+ '请选择语言',
8
+ ...FW.Entry.languageMgr.getSupportedLanguages(),
9
+ ]);
10
+
11
+ @ccclass('FWLanguageSprite')
12
+ class FWLanguageSprite {
13
+ @property({
14
+ type: languageEnum,
15
+ displayName: 'language',
16
+ visible: true,
17
+ serializable: true,
18
+ })
19
+ language: number = 0;
20
+
21
+ @property({
22
+ type: cc.SpriteFrame,
23
+ displayName: 'spriteFrame',
24
+ serializable: true,
25
+ })
26
+ spriteFrame: cc.SpriteFrame = null;
27
+ }
28
+
29
+ @ccclass
30
+ @menu('Language/FWLanguageSpriteLocalize')
31
+ @requireComponent(cc.Sprite)
32
+ @executeInEditMode
33
+ export default class FWLanguageSpriteLocalize extends FWLanguage {
34
+ @property
35
+ private _inspector: FWLanguageSprite[] = [];
36
+ private _sprite: cc.Sprite;
37
+
38
+ @property({ type: [FWLanguageSprite] })
39
+ get inspector() {
40
+ return this._inspector;
41
+ }
42
+
43
+ set inspector(value: FWLanguageSprite[]) {
44
+ this._inspector = value;
45
+ }
46
+
47
+ protected onLanguageChange(): void {
48
+ this.onRefresh();
49
+ }
50
+
51
+ protected onLoad(): void {
52
+ super.onLoad?.();
53
+ this._sprite = this.node.getComponent(cc.Sprite);
54
+ }
55
+
56
+ protected onRefresh(): void {
57
+ if (this._language == 0 && CC_EDITOR) {
58
+ this._sprite.spriteFrame = null;
59
+ //@ts-ignore
60
+ CC_EDITOR && Editor.log('未选择语言!');
61
+ return;
62
+ }
63
+ const index = this.inspector.findIndex((v) => {
64
+ return v.language == this._language;
65
+ });
66
+ if (index == -1) {
67
+ this._sprite.spriteFrame = null;
68
+ //@ts-ignore
69
+ CC_EDITOR && Editor.log('当前语言未配置!');
70
+ return;
71
+ }
72
+ const spriteFrame = this.inspector[index].spriteFrame;
73
+ if (!spriteFrame) {
74
+ //@ts-ignore
75
+ CC_EDITOR && Editor.log('当前语言SpriteFrame不存在!');
76
+ this.language = 0;
77
+ return;
78
+ }
79
+ this._sprite.spriteFrame = spriteFrame;
80
+ }
81
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "ver": "1.1.0",
3
+ "uuid": "8d3766e4-d7dd-4dd7-9939-acc3bf5104d0",
4
+ "importer": "typescript",
5
+ "isPlugin": false,
6
+ "loadPluginInWeb": true,
7
+ "loadPluginInNative": true,
8
+ "loadPluginInEditor": false,
9
+ "subMetas": {}
10
+ }
package/language.meta ADDED
@@ -0,0 +1,13 @@
1
+ {
2
+ "ver": "1.1.3",
3
+ "uuid": "8a2ce5d1-31a5-45bb-8b09-7f0054ace394",
4
+ "importer": "folder",
5
+ "isBundle": false,
6
+ "bundleName": "",
7
+ "priority": 1,
8
+ "compressionType": {},
9
+ "optimizeHotUpdate": {},
10
+ "inlineSpriteFrames": {},
11
+ "isRemoteBundle": {},
12
+ "subMetas": {}
13
+ }
@@ -0,0 +1,13 @@
1
+ const { ccclass, property } = cc._decorator;
2
+
3
+ @ccclass
4
+ export default class FWLayer extends cc.Component implements FW.Layer {
5
+ public readonly entry: FW.Entry = FW.Entry;
6
+ public onLoad(): void {}
7
+ public start(): void {}
8
+ public onEnable(): void {}
9
+ public onDisable(): void {}
10
+ public onDestroy(): void {}
11
+ public update(dt: number): void {}
12
+ public lateUpdate(dt: number): void {}
13
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "ver": "1.1.0",
3
+ "uuid": "226f949f-5699-4b17-aba1-ad43af651630",
4
+ "importer": "typescript",
5
+ "isPlugin": false,
6
+ "loadPluginInWeb": true,
7
+ "loadPluginInNative": true,
8
+ "loadPluginInEditor": false,
9
+ "subMetas": {}
10
+ }
package/layer.meta ADDED
@@ -0,0 +1,13 @@
1
+ {
2
+ "ver": "1.1.3",
3
+ "uuid": "ce98c254-9c3e-4d9d-94ff-216bd92484e7",
4
+ "importer": "folder",
5
+ "isBundle": false,
6
+ "bundleName": "",
7
+ "priority": 1,
8
+ "compressionType": {},
9
+ "optimizeHotUpdate": {},
10
+ "inlineSpriteFrames": {},
11
+ "isRemoteBundle": {},
12
+ "subMetas": {}
13
+ }
package/log/FWLog.ts ADDED
@@ -0,0 +1,115 @@
1
+ import { FWSystemDefine } from '../define/FWSystemDefine';
2
+
3
+ export const FWLogColorMap: Map<FWSystemDefine.FWLogType, string> = new Map<
4
+ FWSystemDefine.FWLogType,
5
+ string
6
+ >([
7
+ [FWSystemDefine.FWLogType.DEBUG, '#FFFFFF'],
8
+ [FWSystemDefine.FWLogType.SOCKET_SEND, '#50BBE4'],
9
+ [FWSystemDefine.FWLogType.SOCKET_RECEIVE, '#F423DF'],
10
+ [FWSystemDefine.FWLogType.REQUEST, '#23F4C6'],
11
+ [FWSystemDefine.FWLogType.RESPONSE, '#FF8A00'],
12
+ [FWSystemDefine.FWLogType.WARN, '#FFC107'],
13
+ [FWSystemDefine.FWLogType.ERROR, '#DC3545'],
14
+ [FWSystemDefine.FWLogType.SYSTEM, '#9b1eeeff'],
15
+ ]);
16
+
17
+ class FWLog {
18
+ private static instance: FWLog;
19
+ public static getInstance() {
20
+ if (!this.instance) {
21
+ this.instance = new FWLog();
22
+ }
23
+ return this.instance;
24
+ }
25
+
26
+ private constructor() {}
27
+
28
+ public get debug() {
29
+ return window.console.log.bind(
30
+ window.console,
31
+ `%c[debug]:${FW.Entry.timeMgr.getTime()}`,
32
+ `color: black; background-color: ${FWLogColorMap.get(
33
+ FWSystemDefine.FWLogType.DEBUG,
34
+ )}; font-weight: bold; font-size: 10;`,
35
+ );
36
+ }
37
+
38
+ get send() {
39
+ return window.console.log.bind(
40
+ window.console,
41
+ `%c[sendMsg]:${FW.Entry.timeMgr.getTime()}`,
42
+ `color: black; background-color: ${FWLogColorMap.get(
43
+ FWSystemDefine.FWLogType.SOCKET_SEND,
44
+ )}; font-weight: bold; font-size: 10;`,
45
+ );
46
+ }
47
+
48
+ get receive() {
49
+ return window.console.log.bind(
50
+ window.console,
51
+ `%c[receiveMsg]:${FW.Entry.timeMgr.getTime()}`,
52
+ `color: black; background-color: ${FWLogColorMap.get(
53
+ FWSystemDefine.FWLogType.SOCKET_RECEIVE,
54
+ )}; font-weight: bold; font-size: 10;`,
55
+ );
56
+ }
57
+
58
+ get request() {
59
+ return window.console.log.bind(
60
+ window.console,
61
+ `%c[request]:${FW.Entry.timeMgr.getTime()}`,
62
+ `color: black; background-color: ${FWLogColorMap.get(
63
+ FWSystemDefine.FWLogType.REQUEST,
64
+ )}; font-weight: bold; font-size: 10;`,
65
+ );
66
+ }
67
+
68
+ get response() {
69
+ return window.console.log.bind(
70
+ window.console,
71
+ `%c[response]:${FW.Entry.timeMgr.getTime()}`,
72
+ `color: black; background-color: ${FWLogColorMap.get(
73
+ FWSystemDefine.FWLogType.RESPONSE,
74
+ )}; font-weight: bold; font-size: 10;`,
75
+ );
76
+ }
77
+
78
+ get system() {
79
+ return window.console.log.bind(
80
+ window.console,
81
+ `%c[system]:${FW.Entry.timeMgr.getTime()}`,
82
+ `color: black; background-color: ${FWLogColorMap.get(
83
+ FWSystemDefine.FWLogType.SYSTEM,
84
+ )}; font-weight: bold; font-size: 10;`,
85
+ );
86
+ }
87
+
88
+ get warn() {
89
+ return window.console.warn.bind(
90
+ window.console,
91
+ `%c[warn]:${FW.Entry.timeMgr.getTime()}`,
92
+ `color: black; background-color: ${FWLogColorMap.get(
93
+ FWSystemDefine.FWLogType.WARN,
94
+ )}; font-weight: bold; font-size: 10;`,
95
+ );
96
+ }
97
+
98
+ get error() {
99
+ return window.console.error.bind(
100
+ window.console,
101
+ `%c[error]:${FW.Entry.timeMgr.getTime()}`,
102
+ `color: black; background-color: ${FWLogColorMap.get(
103
+ FWSystemDefine.FWLogType.ERROR,
104
+ )}; font-weight: bold; font-size: 10;`,
105
+ );
106
+ }
107
+ }
108
+
109
+ if (!CC_DEBUG && !CC_DEV && !CC_BUILD) {
110
+ window.console.log = () => {};
111
+ window.console.warn = () => {};
112
+ window.console.error = () => {};
113
+ }
114
+
115
+ export default FWLog.getInstance();
@@ -0,0 +1,10 @@
1
+ {
2
+ "ver": "1.1.0",
3
+ "uuid": "c96accd4-65f8-4a49-86e1-b161092f7b85",
4
+ "importer": "typescript",
5
+ "isPlugin": false,
6
+ "loadPluginInWeb": true,
7
+ "loadPluginInNative": true,
8
+ "loadPluginInEditor": false,
9
+ "subMetas": {}
10
+ }
package/log.meta ADDED
@@ -0,0 +1,13 @@
1
+ {
2
+ "ver": "1.1.3",
3
+ "uuid": "cc6fa493-d506-4224-9ef5-fcccfe52b409",
4
+ "importer": "folder",
5
+ "isBundle": false,
6
+ "bundleName": "",
7
+ "priority": 1,
8
+ "compressionType": {},
9
+ "optimizeHotUpdate": {},
10
+ "inlineSpriteFrames": {},
11
+ "isRemoteBundle": {},
12
+ "subMetas": {}
13
+ }
@@ -0,0 +1,10 @@
1
+ import { injectable } from 'inversify';
2
+ @injectable()
3
+ export default class FWLogic implements FW.Logic {
4
+ constructor() {
5
+ this.initialize?.();
6
+ }
7
+ public readonly entry: FW.Entry = FW.Entry;
8
+ public initialize?();
9
+ public onDestroy?();
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "ver": "1.1.0",
3
+ "uuid": "84c16595-ccc9-41c3-92cb-caf8e96bdb7b",
4
+ "importer": "typescript",
5
+ "isPlugin": false,
6
+ "loadPluginInWeb": true,
7
+ "loadPluginInNative": true,
8
+ "loadPluginInEditor": false,
9
+ "subMetas": {}
10
+ }
package/logic.meta ADDED
@@ -0,0 +1,13 @@
1
+ {
2
+ "ver": "1.1.3",
3
+ "uuid": "c760a8a3-325a-434f-8375-bd9406a8496d",
4
+ "importer": "folder",
5
+ "isBundle": false,
6
+ "bundleName": "",
7
+ "priority": 1,
8
+ "compressionType": {},
9
+ "optimizeHotUpdate": {},
10
+ "inlineSpriteFrames": {},
11
+ "isRemoteBundle": {},
12
+ "subMetas": {}
13
+ }
@@ -0,0 +1,28 @@
1
+ import { FWAnimation } from "../animation/FWAnimation";
2
+
3
+ export class FWAnimationMachine {
4
+ private animationMap: Map<string, FWAnimation>;
5
+
6
+ constructor() {
7
+ this.initialize();
8
+ }
9
+ private initialize(): void {
10
+ this.animationMap = new Map<string, FWAnimation>();
11
+ }
12
+
13
+ addAnimation(animation: FWAnimation) {
14
+ this.animationMap.set(animation.animationName, animation);
15
+ }
16
+
17
+ getAnimation(animationName: string) {
18
+ return this.animationMap.get(animationName);
19
+ }
20
+
21
+ pause() {
22
+ this.animationMap.forEach((v) => v.pause());
23
+ }
24
+
25
+ resume() {
26
+ this.animationMap.forEach((v) => v.resume());
27
+ }
28
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "ver": "1.1.0",
3
+ "uuid": "0a8490a5-adc2-4788-bd9b-5691685ece7d",
4
+ "importer": "typescript",
5
+ "isPlugin": false,
6
+ "loadPluginInWeb": true,
7
+ "loadPluginInNative": true,
8
+ "loadPluginInEditor": false,
9
+ "subMetas": {}
10
+ }
@@ -0,0 +1,75 @@
1
+ import FWLog from '../log/FWLog';
2
+ import { FWState } from '../state/FWState';
3
+
4
+ export default class FWStateMachine implements FW.StateMachine {
5
+ private stateMap: Map<number, FWState>;
6
+ private stateType: number;
7
+ private paused: boolean;
8
+
9
+ public get state() {
10
+ return this.stateType;
11
+ }
12
+ constructor() {
13
+ this.stateMap = new Map<number, FWState>();
14
+ this.stateType = 0;
15
+ this.paused = false;
16
+ }
17
+ /** 进入状态 */
18
+ enter(stateType: number, ...args: any): void {
19
+ if (this.stateMap.size == 0) {
20
+ FWLog.error('stateMachine is not register!');
21
+ return;
22
+ }
23
+
24
+ if (this.paused) return;
25
+ if (this.state == stateType) return;
26
+
27
+ if (this.stateMap.has(this.stateType)) {
28
+ this.stateMap?.get(this.stateType)?.onExit();
29
+ }
30
+ this.stateType = stateType;
31
+ if (this.stateMap.has(this.stateType)) {
32
+ this.stateMap?.get(this.stateType)?.onEnter(args);
33
+ }
34
+ }
35
+ /**
36
+ * 暂停状态机
37
+ * */
38
+ pause() {
39
+ this.paused = true;
40
+ FW.Entry.timeMgr.pauseSchedule(this);
41
+ }
42
+ /**
43
+ * 恢复状态机
44
+ */
45
+ resume() {
46
+ this.paused = false;
47
+ FW.Entry.timeMgr.resumeSchedule(this);
48
+ }
49
+ /**
50
+ * 注册
51
+ * @param type
52
+ * @param state
53
+ */
54
+ register<T extends FWState>(state: FW.StateMachineRegisterArgs<T>) {
55
+ const constructor = new state.stateConstructor();
56
+ constructor.onInit();
57
+ FW.Entry.timeMgr.update(constructor.onUpdate.bind(state), this);
58
+ this.stateMap.set(state.stateType, constructor);
59
+ }
60
+ /**
61
+ * 注销
62
+ * @param type
63
+ */
64
+ unRegister(stateType: number) {
65
+ if (!this.stateMap.has(stateType)) return;
66
+ const constructor = this.stateMap.get(stateType);
67
+ constructor.onDestroy();
68
+ FW.Entry.timeMgr.unSchedule(this);
69
+ this.stateMap.delete(stateType);
70
+ }
71
+ onDestroy() {
72
+ this.stateMap.clear();
73
+ this.stateMap = null;
74
+ }
75
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "ver": "1.1.0",
3
+ "uuid": "71dbc901-1182-44eb-9c23-111d7a3e2963",
4
+ "importer": "typescript",
5
+ "isPlugin": false,
6
+ "loadPluginInWeb": true,
7
+ "loadPluginInNative": true,
8
+ "loadPluginInEditor": false,
9
+ "subMetas": {}
10
+ }
package/machine.meta ADDED
@@ -0,0 +1,13 @@
1
+ {
2
+ "ver": "1.1.3",
3
+ "uuid": "a2c00ae3-16c2-4bd9-9cc7-e4ad4e9c0c88",
4
+ "importer": "folder",
5
+ "isBundle": false,
6
+ "bundleName": "",
7
+ "priority": 1,
8
+ "compressionType": {},
9
+ "optimizeHotUpdate": {},
10
+ "inlineSpriteFrames": {},
11
+ "isRemoteBundle": {},
12
+ "subMetas": {}
13
+ }