@kkarum/framework 2.3.17

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 (171) hide show
  1. package/Framework.ts +337 -0
  2. package/Framework.ts.meta +10 -0
  3. package/FrameworkBase.ts +207 -0
  4. package/FrameworkBase.ts.meta +10 -0
  5. package/FrameworkInitialize.ts +79 -0
  6. package/FrameworkInitialize.ts.meta +10 -0
  7. package/README.md +93 -0
  8. package/README.md.meta +6 -0
  9. package/animation/FWAnimation.ts +13 -0
  10. package/animation/FWAnimation.ts.meta +10 -0
  11. package/animation/FWSkeleton.ts +174 -0
  12. package/animation/FWSkeleton.ts.meta +10 -0
  13. package/animation/FWTween.ts +60 -0
  14. package/animation/FWTween.ts.meta +10 -0
  15. package/animation.meta +13 -0
  16. package/component/FWVirtuaScrollViewComponent.ts +56 -0
  17. package/component/FWVirtuaScrollViewComponent.ts.meta +10 -0
  18. package/component/FWVirtualViewComponent.ts +2212 -0
  19. package/component/FWVirtualViewComponent.ts.meta +10 -0
  20. package/component.meta +13 -0
  21. package/config/FWAssetConfig.ts +7 -0
  22. package/config/FWAssetConfig.ts.meta +10 -0
  23. package/config/FWSystemConfig.ts +29 -0
  24. package/config/FWSystemConfig.ts.meta +10 -0
  25. package/config.meta +13 -0
  26. package/controller/FWLayerController.ts +178 -0
  27. package/controller/FWLayerController.ts.meta +10 -0
  28. package/controller.meta +13 -0
  29. package/data/FWData.ts +6 -0
  30. package/data/FWData.ts.meta +10 -0
  31. package/data.meta +13 -0
  32. package/define/FWEventDefine.ts +28 -0
  33. package/define/FWEventDefine.ts.meta +10 -0
  34. package/define/FWSystemDefine.ts +154 -0
  35. package/define/FWSystemDefine.ts.meta +10 -0
  36. package/define.meta +13 -0
  37. package/entry/FWEntry.ts +219 -0
  38. package/entry/FWEntry.ts.meta +10 -0
  39. package/entry.meta +13 -0
  40. package/expand/FWCocosExpand.ts +73 -0
  41. package/expand/FWCocosExpand.ts.meta +10 -0
  42. package/expand/FWDecorator.ts +366 -0
  43. package/expand/FWDecorator.ts.meta +10 -0
  44. package/expand/FWNodeExpand.ts +147 -0
  45. package/expand/FWNodeExpand.ts.meta +10 -0
  46. package/expand/FWRollingViewNesting.ts +195 -0
  47. package/expand/FWRollingViewNesting.ts.meta +10 -0
  48. package/expand/FWTweenExpand.ts +44 -0
  49. package/expand/FWTweenExpand.ts.meta +10 -0
  50. package/expand.meta +13 -0
  51. package/item/FWVirtualListItem.ts +141 -0
  52. package/item/FWVirtualListItem.ts.meta +10 -0
  53. package/item.meta +13 -0
  54. package/language/FWLanguage.ts +71 -0
  55. package/language/FWLanguage.ts.meta +10 -0
  56. package/language/FWLanguageLabelLocalize.ts +144 -0
  57. package/language/FWLanguageLabelLocalize.ts.meta +10 -0
  58. package/language/FWLanguageSkeletonLocalize.ts +106 -0
  59. package/language/FWLanguageSkeletonLocalize.ts.meta +10 -0
  60. package/language/FWLanguageSpriteLocalize.ts +81 -0
  61. package/language/FWLanguageSpriteLocalize.ts.meta +10 -0
  62. package/language.meta +13 -0
  63. package/layer/FWLayer.ts +14 -0
  64. package/layer/FWLayer.ts.meta +10 -0
  65. package/layer.meta +13 -0
  66. package/log/FWLog.ts +135 -0
  67. package/log/FWLog.ts.meta +10 -0
  68. package/log.meta +13 -0
  69. package/logic/FWLogic.ts +6 -0
  70. package/logic/FWLogic.ts.meta +10 -0
  71. package/logic.meta +13 -0
  72. package/machine/FWAnimationMachine.ts +28 -0
  73. package/machine/FWAnimationMachine.ts.meta +10 -0
  74. package/machine/FWStateMachine.ts +74 -0
  75. package/machine/FWStateMachine.ts.meta +10 -0
  76. package/machine.meta +13 -0
  77. package/manager/FWAnimationManager.ts +89 -0
  78. package/manager/FWAnimationManager.ts.meta +10 -0
  79. package/manager/FWAssetManager.ts +451 -0
  80. package/manager/FWAssetManager.ts.meta +10 -0
  81. package/manager/FWAudioManager.ts +339 -0
  82. package/manager/FWAudioManager.ts.meta +10 -0
  83. package/manager/FWBundleManager.ts +97 -0
  84. package/manager/FWBundleManager.ts.meta +10 -0
  85. package/manager/FWComponentManager.ts +24 -0
  86. package/manager/FWComponentManager.ts.meta +10 -0
  87. package/manager/FWEngineManager.ts +74 -0
  88. package/manager/FWEngineManager.ts.meta +10 -0
  89. package/manager/FWEventManager.ts +361 -0
  90. package/manager/FWEventManager.ts.meta +10 -0
  91. package/manager/FWHotUpdateManager.ts +344 -0
  92. package/manager/FWHotUpdateManager.ts.meta +10 -0
  93. package/manager/FWLanguageManager.ts +114 -0
  94. package/manager/FWLanguageManager.ts.meta +10 -0
  95. package/manager/FWLayerManager.ts +862 -0
  96. package/manager/FWLayerManager.ts.meta +10 -0
  97. package/manager/FWManager.ts +9 -0
  98. package/manager/FWManager.ts.meta +10 -0
  99. package/manager/FWObjectManager.ts +161 -0
  100. package/manager/FWObjectManager.ts.meta +10 -0
  101. package/manager/FWPerformanceManager.ts +198 -0
  102. package/manager/FWPerformanceManager.ts.meta +10 -0
  103. package/manager/FWPromiseManager.ts +504 -0
  104. package/manager/FWPromiseManager.ts.meta +10 -0
  105. package/manager/FWResManager.ts +299 -0
  106. package/manager/FWResManager.ts.meta +10 -0
  107. package/manager/FWSocketManager.ts +93 -0
  108. package/manager/FWSocketManager.ts.meta +10 -0
  109. package/manager/FWStateManager.ts +100 -0
  110. package/manager/FWStateManager.ts.meta +10 -0
  111. package/manager/FWTaskManager.ts +41 -0
  112. package/manager/FWTaskManager.ts.meta +10 -0
  113. package/manager/FWTimeManager.ts +442 -0
  114. package/manager/FWTimeManager.ts.meta +10 -0
  115. package/manager/FWUiManager.ts +217 -0
  116. package/manager/FWUiManager.ts.meta +10 -0
  117. package/manager.meta +13 -0
  118. package/package.json +11 -0
  119. package/package.json.meta +6 -0
  120. package/registry/FWRegistry.ts +62 -0
  121. package/registry/FWRegistry.ts.meta +10 -0
  122. package/registry.meta +13 -0
  123. package/render/FWRenderAssembler.ts +620 -0
  124. package/render/FWRenderAssembler.ts.meta +10 -0
  125. package/render.meta +13 -0
  126. package/scene/FWScene.ts +23 -0
  127. package/scene/FWScene.ts.meta +10 -0
  128. package/scene.meta +13 -0
  129. package/service/FWService.ts +11 -0
  130. package/service/FWService.ts.meta +10 -0
  131. package/service/http/FWHttp.ts +103 -0
  132. package/service/http/FWHttp.ts.meta +10 -0
  133. package/service/http.meta +13 -0
  134. package/service/socket/FWSocket.ts +367 -0
  135. package/service/socket/FWSocket.ts.meta +10 -0
  136. package/service/socket/FWSocketHandle.ts +16 -0
  137. package/service/socket/FWSocketHandle.ts.meta +10 -0
  138. package/service/socket/FWSocketSender.ts +14 -0
  139. package/service/socket/FWSocketSender.ts.meta +10 -0
  140. package/service/socket/mock/FWSocketMock.ts +202 -0
  141. package/service/socket/mock/FWSocketMock.ts.meta +10 -0
  142. package/service/socket/mock.meta +13 -0
  143. package/service/socket.meta +13 -0
  144. package/service.meta +13 -0
  145. package/state/FWState.ts +8 -0
  146. package/state/FWState.ts.meta +10 -0
  147. package/state.meta +13 -0
  148. package/types/Creator.d.ts +121 -0
  149. package/types/Creator.d.ts.meta +6 -0
  150. package/types/FW.d.ts +3016 -0
  151. package/types/FW.d.ts.meta +6 -0
  152. package/types/Global.d.ts +22 -0
  153. package/types/Global.d.ts.meta +10 -0
  154. package/types.meta +13 -0
  155. package/utils/FWLodash.ts +105 -0
  156. package/utils/FWLodash.ts.meta +10 -0
  157. package/utils/FWMask.ts +222 -0
  158. package/utils/FWMask.ts.meta +10 -0
  159. package/utils/FWObject.ts +27 -0
  160. package/utils/FWObject.ts.meta +10 -0
  161. package/utils/FWObjectPool.ts +177 -0
  162. package/utils/FWObjectPool.ts.meta +10 -0
  163. package/utils/FWQueue.ts +55 -0
  164. package/utils/FWQueue.ts.meta +10 -0
  165. package/utils/FWResLoader.ts +139 -0
  166. package/utils/FWResLoader.ts.meta +10 -0
  167. package/utils/FWTask.ts +227 -0
  168. package/utils/FWTask.ts.meta +10 -0
  169. package/utils/FWUtils.ts +15 -0
  170. package/utils/FWUtils.ts.meta +10 -0
  171. package/utils.meta +13 -0
@@ -0,0 +1,147 @@
1
+ if (!CC_EDITOR) {
2
+ const component = {
3
+ dragon_bones: globalThis?.dragonBones?.ArmatureDisplay,
4
+ graphics: cc.Graphics,
5
+ label: cc.Label,
6
+ label_outline: cc.LabelOutline,
7
+ label_shadow: cc.LabelShadow,
8
+ light: cc.Light,
9
+ mask: cc.Mask,
10
+ particle_system: cc.ParticleSystem,
11
+ particle_system_3d: cc.ParticleSystem3D,
12
+ rich_text: cc.RichText,
13
+ sp_skeleton: globalThis?.sp?.Skeleton,
14
+ sprite: cc.Sprite,
15
+ tiled_map: cc.TiledMap,
16
+ tiled_tile: cc.TiledTile,
17
+ mesh_renderer: cc.MeshRenderer,
18
+ skinned_mesh_renderer: cc.SkinnedMeshRenderer,
19
+ block_input_events: cc.BlockInputEvents,
20
+ button: cc.Button,
21
+ canvas: cc.Canvas,
22
+ edit_box: cc.EditBox,
23
+ layout: cc.Layout,
24
+ page_view: cc.PageView,
25
+ page_view_indicator: cc.PageViewIndicator,
26
+ progress_bar: cc.ProgressBar,
27
+ scroll_bar: cc.Scrollbar,
28
+ scroll_view: cc.ScrollView,
29
+ slider: cc.Slider,
30
+ toggle: cc.Toggle,
31
+ toggle_container: cc.ToggleContainer,
32
+ video_player: cc.VideoPlayer,
33
+ web_view: cc.WebView,
34
+ widget: cc.Widget,
35
+ box_collider: cc.BoxCollider,
36
+ circle_collider: cc.CircleCollider,
37
+ polygon_collider: cc.PolygonCollider,
38
+ physics_box_collider: cc.PhysicsBoxCollider,
39
+ box_collider_3d: cc.BoxCollider3D,
40
+ physics_chain_collider: cc.PhysicsChainCollider,
41
+ physics_circle_collider: cc.PhysicsCircleCollider,
42
+ physics_polygon_collider: cc.PhysicsPolygonCollider,
43
+ sphere_collider_3d: cc.SphereCollider3D,
44
+ constant_force: cc.ConstantForce,
45
+ distance_joint: cc.DistanceJoint,
46
+ motor_joint: cc.MotorJoint,
47
+ mouse_joint: cc.MouseJoint,
48
+ prismatic_joint: cc.PrismaticJoint,
49
+ revolute_joint: cc.RevoluteJoint,
50
+ rope_joint: cc.RopeJoint,
51
+ weld_joint: cc.WeldJoint,
52
+ wheel_joint: cc.WheelJoint,
53
+ rigid_body: cc.RigidBody,
54
+ rigid_body_3d: cc.RigidBody3D,
55
+ animation: cc.Animation,
56
+ audio_source: cc.AudioSource,
57
+ camera: cc.Camera,
58
+ motion_streak: cc.MotionStreak,
59
+ skeleton_animation: cc.SkeletonAnimation,
60
+ swan_sub_context_view: cc.SwanSubContextView,
61
+ wx_sub_context_view: cc.WXSubContextView,
62
+ };
63
+
64
+ Object.defineProperty(cc.Node.prototype, 'node_prototype', {
65
+ get: function () {
66
+ if (!this.node_cache) {
67
+ this.node_cache = {
68
+ component_map: new Map<string, cc.Component>(),
69
+ child_map: new Map<string, cc.Node>(),
70
+ child_update: false,
71
+ };
72
+ }
73
+ return this.node_cache;
74
+ },
75
+ });
76
+
77
+ Object.defineProperty(cc.Node.prototype, 'child_update', {
78
+ get: function () {
79
+ return this.node_prototype.child_update;
80
+ },
81
+ set: function () {
82
+ const target = this;
83
+ if (this.node_prototype.child_update) {
84
+ this.node_prototype.child_update = false;
85
+ this.off(
86
+ cc.Node.EventType.CHILD_REMOVED,
87
+ function (node: cc.Node) {
88
+ return target.node_prototype.child_map.delete(node.name);
89
+ },
90
+ this,
91
+ );
92
+ }
93
+ this.on(
94
+ cc.Node.EventType.CHILD_REMOVED,
95
+ function (node: cc.Node) {
96
+ return target.node_prototype.child_map.delete(node.name);
97
+ },
98
+ this,
99
+ );
100
+ },
101
+ });
102
+
103
+ const find = function (k) {
104
+ Object.defineProperty(cc.Node.prototype, k, {
105
+ get: function () {
106
+ let c = this.node_prototype.component_map.get(k);
107
+ if (!c) {
108
+ c = this.getComponent(component[k]);
109
+ this.node_prototype.component_map.set(k, c);
110
+ }
111
+ return c;
112
+ },
113
+ set: function () {
114
+ this.node_prototype.component_map.delete(k);
115
+ },
116
+ });
117
+ };
118
+
119
+ for (const k in component) {
120
+ find(k);
121
+ }
122
+
123
+ cc.Node.prototype.child = function (path: string, autoUpdate: boolean) {
124
+ const path_ss = path.split('/');
125
+ let self = this;
126
+ let t: cc.Node;
127
+ for (let _i = 0, path_ss_1 = path_ss; _i < path_ss_1.length; _i++) {
128
+ const path_s = path_ss_1[_i];
129
+ if (autoUpdate) {
130
+ self.node_prototype.child_map.delete(path_s);
131
+ t = self.getChildByName(path_s);
132
+ self.node_prototype.child_map.set(path_s, t);
133
+ } else {
134
+ t = self.node_prototype.child_map.get(path_s);
135
+ if (!t) {
136
+ t = self.getChildByName(path_s);
137
+ self.node_prototype.child_map.set(path_s, t);
138
+ }
139
+ }
140
+ if (!t) {
141
+ break;
142
+ }
143
+ self = t;
144
+ }
145
+ return t;
146
+ };
147
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "ver": "1.1.0",
3
+ "uuid": "4398ba04-97b1-4790-8ec8-b15a69460d2e",
4
+ "importer": "typescript",
5
+ "isPlugin": false,
6
+ "loadPluginInWeb": true,
7
+ "loadPluginInNative": true,
8
+ "loadPluginInEditor": false,
9
+ "subMetas": {}
10
+ }
@@ -0,0 +1,195 @@
1
+ const { ccclass, property, menu } = cc._decorator;
2
+
3
+ interface EventTouch extends cc.Event.EventTouch {
4
+ simulate?: boolean;
5
+ mock?: boolean; // 是否为模拟事件
6
+ }
7
+
8
+ @ccclass
9
+ @menu('CustomComponent/FWRollingViewNesting')
10
+ export default class FWRollingViewNesting extends cc.Component {
11
+ @property({
12
+ tooltip: '方向判定阈值(像素),小于该值不触发方向拦截',
13
+ min: 3,
14
+ max: 15,
15
+ })
16
+ dirThreshold = 15;
17
+
18
+ private scrollView: cc.ScrollView = null;
19
+ private _isBoundaryV = 0; //为没有开启滚动所以没有边界 1为上边界 2为下边界 3为不滑动;
20
+ private _isBoundaryH = 0; //为没有开启滚动所以没有边界 1为左边界 2为右边界 3为不滑动;
21
+
22
+ protected onEnable(): void {
23
+ this.scrollView = this.node.getComponent(cc.ScrollView);
24
+ if (this.scrollView) {
25
+ (this.scrollView as any).hasNestedViewGroup = (event, captureListeners) => {
26
+ if (event.eventPhase !== cc.Event.CAPTURING_PHASE) return false;
27
+ const hasNested = this._processNestedEvent(event, captureListeners);
28
+ // 只处理 TOUCH_END 和 TOUCH_CANCEL,且没有被嵌套拦截时,通知其他嵌套ViewGroup处理事件
29
+ if (
30
+ (event.type === cc.Node.EventType.TOUCH_END ||
31
+ event.type === cc.Node.EventType.TOUCH_CANCEL) &&
32
+ !hasNested
33
+ ) {
34
+ for (const item of captureListeners) {
35
+ this.onEnd(event, captureListeners, item);
36
+ }
37
+
38
+ this.onEnd(event, captureListeners, event.target);
39
+ }
40
+ return hasNested;
41
+ };
42
+ }
43
+ }
44
+
45
+ protected onDisable(): void {
46
+ this.unscheduleAllCallbacks();
47
+ }
48
+
49
+ private onEnd(event, captureListeners, item) {
50
+ if (item !== this.node) {
51
+ const viewGroup = item.getComponent(cc.ViewGroup);
52
+ if (viewGroup) {
53
+ if (
54
+ event.type === cc.Node.EventType.TOUCH_END &&
55
+ typeof viewGroup._onTouchEnded === 'function'
56
+ ) {
57
+ let touch = event.touch;
58
+ if (viewGroup.content) {
59
+ if (viewGroup instanceof cc.PageView) {
60
+ viewGroup['_touchEndPosition'] = touch.getLocation();
61
+ }
62
+ viewGroup._handleReleaseLogic(touch);
63
+ }
64
+ }
65
+ if (
66
+ event.type === cc.Node.EventType.TOUCH_CANCEL &&
67
+ typeof viewGroup._onTouchCancelled === 'function'
68
+ ) {
69
+ if (!event.simulate) {
70
+ let touch = event.touch;
71
+ if (viewGroup.content) {
72
+ if (viewGroup instanceof cc.PageView) {
73
+ viewGroup['_touchEndPosition'] = touch.getLocation();
74
+ }
75
+ viewGroup._handleReleaseLogic(touch);
76
+ }
77
+ }
78
+ }
79
+ }
80
+ }
81
+ }
82
+
83
+ private _processNestedEvent(event: EventTouch, captureListeners: any[]): boolean {
84
+ if (!captureListeners) return false;
85
+
86
+ for (let i = 0; i < captureListeners.length; ++i) {
87
+ const item = captureListeners[i];
88
+ if (this.node === item) {
89
+ return event.target?.getComponent(cc.ViewGroup)
90
+ ? this.itemIsView(event.target, event)
91
+ : false;
92
+ }
93
+ if (item.getComponent(cc.ViewGroup)) {
94
+ return this.itemIsView(item, event);
95
+ }
96
+ }
97
+ return false;
98
+ }
99
+
100
+ itemIsView(target: cc.Node, event: EventTouch): boolean {
101
+ const scrollView = target.getComponent(cc.ScrollView);
102
+ if (!scrollView) return false;
103
+
104
+ const delta = this._getTouchDelta(event);
105
+ this._checkBoundary(scrollView);
106
+
107
+ return this._shouldIntercept(delta, scrollView);
108
+ }
109
+
110
+ /**
111
+ * 获取当前触摸的移动距离
112
+ * @returns {cc.Vec2} 触摸移动的偏移量
113
+ */
114
+ private _getTouchDelta(event: EventTouch): cc.Vec2 {
115
+ if (!event) return cc.v2(0, 0);
116
+ // 使用事件的起始位置和当前位置计算偏移
117
+ const startPos = event.getStartLocation ? event.getStartLocation() : cc.v2(0, 0);
118
+ const currentPos = event.getLocation ? event.getLocation() : cc.v2(0, 0);
119
+ return currentPos.sub(startPos);
120
+ }
121
+ //边界检测
122
+ private _checkBoundary(scrollView: cc.ScrollView) {
123
+ const offset = scrollView.getScrollOffset();
124
+ const maxOffset = scrollView.getMaxScrollOffset();
125
+
126
+ // 垂直边界
127
+ if (!scrollView.vertical) {
128
+ this._isBoundaryV = 0;
129
+ } else if (maxOffset.y <= 2) {
130
+ this._isBoundaryV = 3; //内部不滑动
131
+ } else if (offset.y <= 10) {
132
+ this._isBoundaryV = 1; // 顶部边界
133
+ } else if (offset.y >= maxOffset.y - 10) {
134
+ this._isBoundaryV = 2; // 底部边界
135
+ } else {
136
+ this._isBoundaryV = 0;
137
+ }
138
+ // 水平边界
139
+ if (!scrollView.horizontal) {
140
+ this._isBoundaryH = 0;
141
+ } else if (maxOffset.x <= 2) {
142
+ this._isBoundaryH = 3; //内部不滑动
143
+ } else if (offset.x >= -10) {
144
+ this._isBoundaryH = 1; // 左边界
145
+ } else if (offset.x <= -maxOffset.x + 10) {
146
+ this._isBoundaryH = 2; // 右边界
147
+ } else {
148
+ this._isBoundaryH = 0;
149
+ }
150
+
151
+ // FWLog.response('_isBoundaryV:', this._isBoundaryV);
152
+ // FWLog.response('_isBoundaryH:', this._isBoundaryH);
153
+ // console.log('offsetx:%d,offsety:%d', offset.x, offset.y);
154
+ // console.log('maxOffsetx:%d,maxOffsety:%d', maxOffset.x, maxOffset.y);
155
+ }
156
+
157
+ //方向拦截,边界拦截
158
+ private _shouldIntercept(delta: cc.Vec2, scrollView: cc.ScrollView): boolean {
159
+ //console.log('deltax:%d,deltay:%d', delta.x, delta.y);
160
+ //判断水平方向位移
161
+ if (scrollView.horizontal && this.scrollView.horizontal) {
162
+ //同向位移
163
+ if (Math.abs(delta.x) > this.dirThreshold) {
164
+ // 左边界且向左滚动,或右边界且向右滚动,交给父级处理
165
+ if (
166
+ (this._isBoundaryH === 1 && delta.x > 0) ||
167
+ (this._isBoundaryH === 2 && delta.x < 0) ||
168
+ this._isBoundaryH === 3
169
+ ) {
170
+ return false;
171
+ }
172
+ // 非边界,自己处理
173
+ return true;
174
+ }
175
+ }
176
+ // 垂直方向拦截
177
+ if (scrollView.vertical && this.scrollView.vertical) {
178
+ if (Math.abs(delta.y) > this.dirThreshold) {
179
+ // 顶部边界且向下滚动,或底部边界且向上滚动,交给父级处理
180
+ if (
181
+ (this._isBoundaryV === 1 && delta.y < 0) ||
182
+ (this._isBoundaryV === 2 && delta.y > 0) ||
183
+ this._isBoundaryV === 3
184
+ ) {
185
+ return false;
186
+ }
187
+ // 非边界,自己处理
188
+ return true;
189
+ }
190
+ }
191
+
192
+ // 默认不拦截
193
+ return false;
194
+ }
195
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "ver": "1.1.0",
3
+ "uuid": "3107e3b8-c4c4-41f0-8223-3e85b0b40821",
4
+ "importer": "typescript",
5
+ "isPlugin": false,
6
+ "loadPluginInWeb": true,
7
+ "loadPluginInNative": true,
8
+ "loadPluginInEditor": false,
9
+ "subMetas": {}
10
+ }
@@ -0,0 +1,44 @@
1
+ cc.ActionInterval.prototype.step = function (dt: number) {
2
+ if (this.paused) {
3
+ return;
4
+ }
5
+ if (this._firstTick && !this._goto) {
6
+ this._firstTick = false;
7
+ this._elapsed = 0;
8
+ } else {
9
+ this._elapsed += dt;
10
+ }
11
+ let t =
12
+ this._elapsed / (this._duration > 0.0000001192092896 ? this._duration : 0.0000001192092896);
13
+ t = 1 > t ? t : 1;
14
+ this.update(t > 0 ? t : 0);
15
+ //Compatible with repeat class, Discard after can be deleted (this._repeatMethod)
16
+ if (this._repeatMethod && this._timesForRepeat > 1 && this.isDone()) {
17
+ if (!this._repeatForever) {
18
+ this._timesForRepeat--;
19
+ }
20
+ this.startWithTarget(this.target);
21
+ this.step(this._elapsed - this._duration);
22
+ }
23
+ };
24
+
25
+ cc.Tween.prototype.pause = function () {
26
+ this._finalAction.paused = true;
27
+ };
28
+
29
+ cc.Tween.prototype.resume = function () {
30
+ this._finalAction.paused = false;
31
+ };
32
+
33
+ cc.Tween.prototype.setSpeed = function (speed: number) {
34
+ this._finalAction._speedMethod = true;
35
+ this._finalAction._speed = speed;
36
+ };
37
+
38
+ cc.Tween.prototype.getDuration = function () {
39
+ return this._finalAction._duration;
40
+ };
41
+
42
+ cc.Tween.prototype.getElapsed = function () {
43
+ return this._finalAction._elapsed;
44
+ };
@@ -0,0 +1,10 @@
1
+ {
2
+ "ver": "1.1.0",
3
+ "uuid": "93bd79eb-6b88-4783-a4c8-37d56fe720b4",
4
+ "importer": "typescript",
5
+ "isPlugin": false,
6
+ "loadPluginInWeb": true,
7
+ "loadPluginInNative": true,
8
+ "loadPluginInEditor": false,
9
+ "subMetas": {}
10
+ }
package/expand.meta ADDED
@@ -0,0 +1,13 @@
1
+ {
2
+ "ver": "1.1.3",
3
+ "uuid": "3261d225-82a8-4353-bd88-35178ac39c7a",
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,141 @@
1
+ import FWVirtualViewComponent from '../component/FWVirtualViewComponent';
2
+
3
+ const { ccclass, property, disallowMultiple, menu, executionOrder } = cc._decorator;
4
+
5
+ enum SelectedType {
6
+ NONE = 0,
7
+ TOGGLE = 1,
8
+ SWITCH = 2,
9
+ }
10
+
11
+ @ccclass
12
+ @disallowMultiple()
13
+ @menu('CustomComponent/FWVirtualListItem')
14
+ @executionOrder(-5001) //先于List
15
+ export default class FWVirtualListItem extends FW.Object {
16
+ onGet(args: any) {}
17
+ onPut() {}
18
+ onInit() {}
19
+
20
+ //选择模式
21
+ @property({
22
+ type: cc.Enum(SelectedType),
23
+ tooltip: CC_DEV && '选择模式',
24
+ })
25
+ selectedMode: SelectedType = SelectedType.NONE;
26
+
27
+ //自适应尺寸
28
+ @property({
29
+ tooltip: CC_DEV && '自适应尺寸(宽或高)',
30
+ })
31
+ adaptiveSize: boolean = false;
32
+
33
+ //按钮组件
34
+ private _btnCom: any;
35
+ get btnCom() {
36
+ if (!this._btnCom) this._btnCom = this.node.getComponent(cc.Button);
37
+ return this._btnCom;
38
+ }
39
+ //依赖的List组件
40
+ public list: FWVirtualViewComponent;
41
+ //是否已经注册过事件
42
+ private _eventReg = false;
43
+ //序列id
44
+ public listId: number;
45
+
46
+ onLoad() {}
47
+
48
+ onDestroy() {
49
+ this.node.off(cc.Node.EventType.SIZE_CHANGED, this._onSizeChange, this);
50
+ }
51
+
52
+ _registerEvent() {
53
+ if (!this._eventReg) {
54
+ if (this.btnCom && (this.list.selectedMode as number) > 0) {
55
+ this.btnCom.clickEvents.unshift(this.createEvt(this, 'onClickThis'));
56
+ }
57
+ if (this.adaptiveSize) {
58
+ this.node.on(cc.Node.EventType.SIZE_CHANGED, this._onSizeChange, this);
59
+ }
60
+ this._eventReg = true;
61
+ }
62
+ }
63
+
64
+ _onSizeChange() {
65
+ this.list._onItemAdaptive(this.node);
66
+ }
67
+ /**
68
+ * 创建事件
69
+ * @param {cc.Component} component 组件脚本
70
+ * @param {string} handlerName 触发函数名称
71
+ * @param {cc.Node} node 组件所在node(不传的情况下取component.node)
72
+ * @returns cc.Component.EventHandler
73
+ */
74
+ createEvt(component: cc.Component, handlerName: string, node: cc.Node = null) {
75
+ if (!component.isValid) return; //有些异步加载的,节点以及销毁了。
76
+ component['comName'] =
77
+ component['comName'] ||
78
+ component.name
79
+ .match(/\<(.*?)\>/g)
80
+ .pop()
81
+ .replace(/\<|>/g, '');
82
+ let evt = new cc.Component.EventHandler();
83
+ evt.target = node || component.node;
84
+ evt.component = component['comName'];
85
+ evt.handler = handlerName;
86
+ return evt;
87
+ }
88
+
89
+ showAni(aniType: number, callFunc: Function, del: boolean) {
90
+ let t: any = this;
91
+ let tween: cc.Tween;
92
+ switch (aniType) {
93
+ case 0: //向上消失
94
+ tween = cc
95
+ .tween(t.node)
96
+ .to(0.2, { scale: 0.7 })
97
+ .by(0.3, { y: t.node.height * 2 });
98
+ break;
99
+ case 1: //向右消失
100
+ tween = cc
101
+ .tween(t.node)
102
+ .to(0.2, { scale: 0.7 })
103
+ .by(0.3, { x: t.node.width * 2 });
104
+ break;
105
+ case 2: //向下消失
106
+ tween = cc
107
+ .tween(t.node)
108
+ .to(0.2, { scale: 0.7 })
109
+ .by(0.3, { y: t.node.height * -2 });
110
+ break;
111
+ case 3: //向左消失
112
+ tween = cc
113
+ .tween(t.node)
114
+ .to(0.2, { scale: 0.7 })
115
+ .by(0.3, { x: t.node.width * -2 });
116
+ break;
117
+ default: //默认:缩小消失
118
+ tween = cc.tween(t.node).to(0.3, { scale: 0.1 });
119
+ break;
120
+ }
121
+ if (callFunc || del) {
122
+ tween.call(() => {
123
+ if (del) {
124
+ t.list._delSingleItem(t.node);
125
+ for (let n: number = t.list.displayData.length - 1; n >= 0; n--) {
126
+ if (t.list.displayData[n].id == t.listId) {
127
+ t.list.displayData.splice(n, 1);
128
+ break;
129
+ }
130
+ }
131
+ }
132
+ callFunc();
133
+ });
134
+ }
135
+ tween.start();
136
+ }
137
+
138
+ onClickThis() {
139
+ this.list.selectedId = this.listId;
140
+ }
141
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "ver": "1.1.0",
3
+ "uuid": "32751987-766e-44d4-af5a-4625d46aabf6",
4
+ "importer": "typescript",
5
+ "isPlugin": false,
6
+ "loadPluginInWeb": true,
7
+ "loadPluginInNative": true,
8
+ "loadPluginInEditor": false,
9
+ "subMetas": {}
10
+ }
package/item.meta ADDED
@@ -0,0 +1,13 @@
1
+ {
2
+ "ver": "1.1.3",
3
+ "uuid": "8c7436d1-86e8-49f9-86ee-e4a41a6010de",
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,71 @@
1
+ import { FWLodash } from '../utils/FWLodash';
2
+
3
+ const { ccclass, property, executeInEditMode } = cc._decorator;
4
+
5
+ @ccclass
6
+ @executeInEditMode
7
+ export default abstract class FWLanguage extends cc.Component {
8
+ @property
9
+ protected _language: number = 0;
10
+
11
+ @property({
12
+ type: FWLodash.CCEnum(['请选择语言', ...FW.Entry.languageMgr.getSupportedLanguages()]),
13
+ displayName: 'language',
14
+ visible: true,
15
+ serializable: true,
16
+ })
17
+ get language() {
18
+ return this._language;
19
+ }
20
+ set language(value: number) {
21
+ this._language = value;
22
+ this.onLanguageChange();
23
+ }
24
+ protected refresh() {
25
+ if (CC_EDITOR) {
26
+ this.onRefresh();
27
+ this.refreshInspector();
28
+ }
29
+ }
30
+
31
+ private refreshInspector() {
32
+ //@ts-ignore
33
+ Editor.Utils.refreshSelectedInspector('node', this.node.uuid);
34
+ }
35
+
36
+ protected onLoad(): void {
37
+ FW.Entry.uiMgr.register({
38
+ FWEvent: [
39
+ {
40
+ eventName: FW.EventDefine.LanguageEvent.LANGUAGE_CHANGE,
41
+ cb: () => {
42
+ this._language = FW.Entry.languageMgr.getLanguageIndex();
43
+ this.onLanguageChange();
44
+ },
45
+ },
46
+ ],
47
+ });
48
+ }
49
+
50
+ protected onEnable(): void {
51
+ if (!CC_EDITOR) {
52
+ this._language = FW.Entry.languageMgr.getLanguageIndex();
53
+ this.onLanguageChange();
54
+ }
55
+ }
56
+
57
+ protected onDestroy(): void {
58
+ FW.Entry.evtMgr.targetOff(this);
59
+ }
60
+
61
+ protected getSupportedLanguages(): string[] {
62
+ return FW.Entry.languageMgr.getSupportedLanguages();
63
+ }
64
+
65
+ protected getBundles(): string[] {
66
+ return FW.Entry.languageMgr.getBundles();
67
+ }
68
+
69
+ protected abstract onRefresh?(): void;
70
+ protected abstract onLanguageChange?(): void;
71
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "ver": "1.1.0",
3
+ "uuid": "cfffdc57-7607-48db-be11-91ba8da0e96c",
4
+ "importer": "typescript",
5
+ "isPlugin": false,
6
+ "loadPluginInWeb": true,
7
+ "loadPluginInNative": true,
8
+ "loadPluginInEditor": false,
9
+ "subMetas": {}
10
+ }