@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.
- package/FW.d.ts +1845 -0
- package/FW.d.ts.meta +6 -0
- package/Framework.ts +148 -0
- package/Framework.ts.meta +10 -0
- package/README.md +93 -0
- package/README.md.meta +6 -0
- package/animation/FWAnimation.ts +13 -0
- package/animation/FWAnimation.ts.meta +10 -0
- package/animation/FWSkeleton.ts +176 -0
- package/animation/FWSkeleton.ts.meta +10 -0
- package/animation/FWTween.ts +60 -0
- package/animation/FWTween.ts.meta +10 -0
- package/animation.meta +13 -0
- package/component/FWVirtualViewComponent.ts +2080 -0
- package/component/FWVirtualViewComponent.ts.meta +10 -0
- package/component.meta +13 -0
- package/config/FWAssetConfig.ts +7 -0
- package/config/FWAssetConfig.ts.meta +10 -0
- package/config.meta +13 -0
- package/controller/FWLayerController.ts +236 -0
- package/controller/FWLayerController.ts.meta +10 -0
- package/controller.meta +13 -0
- package/data/FWData.ts +10 -0
- package/data/FWData.ts.meta +10 -0
- package/data.meta +13 -0
- package/define/FWEventDefine.ts +26 -0
- package/define/FWEventDefine.ts.meta +10 -0
- package/define/FWSystemDefine.ts +133 -0
- package/define/FWSystemDefine.ts.meta +10 -0
- package/define.meta +13 -0
- package/entry/FWEntry.ts +196 -0
- package/entry/FWEntry.ts.meta +10 -0
- package/entry.meta +13 -0
- package/expand/FWCocosExpand.ts +73 -0
- package/expand/FWCocosExpand.ts.meta +10 -0
- package/expand/FWDecorator.ts +256 -0
- package/expand/FWDecorator.ts.meta +10 -0
- package/expand/FWRollingViewNesting.ts +191 -0
- package/expand/FWRollingViewNesting.ts.meta +10 -0
- package/expand/FWTweenExpand.ts +44 -0
- package/expand/FWTweenExpand.ts.meta +10 -0
- package/expand.meta +13 -0
- package/item/FWVirtualListItem.ts +150 -0
- package/item/FWVirtualListItem.ts.meta +10 -0
- package/item.meta +13 -0
- package/language/FWLanguage.ts +69 -0
- package/language/FWLanguage.ts.meta +10 -0
- package/language/FWLanguageLabelLocalize.ts +144 -0
- package/language/FWLanguageLabelLocalize.ts.meta +10 -0
- package/language/FWLanguageSkeletonLocalize.ts +106 -0
- package/language/FWLanguageSkeletonLocalize.ts.meta +10 -0
- package/language/FWLanguageSpriteLocalize.ts +81 -0
- package/language/FWLanguageSpriteLocalize.ts.meta +10 -0
- package/language.meta +13 -0
- package/layer/FWLayer.ts +13 -0
- package/layer/FWLayer.ts.meta +10 -0
- package/layer.meta +13 -0
- package/log/FWLog.ts +115 -0
- package/log/FWLog.ts.meta +10 -0
- package/log.meta +13 -0
- package/logic/FWLogic.ts +10 -0
- package/logic/FWLogic.ts.meta +10 -0
- package/logic.meta +13 -0
- package/machine/FWAnimationMachine.ts +28 -0
- package/machine/FWAnimationMachine.ts.meta +10 -0
- package/machine/FWStateMachine.ts +75 -0
- package/machine/FWStateMachine.ts.meta +10 -0
- package/machine.meta +13 -0
- package/manager/FWAnimationManager.ts +128 -0
- package/manager/FWAnimationManager.ts.meta +10 -0
- package/manager/FWAssetManager.ts +349 -0
- package/manager/FWAssetManager.ts.meta +10 -0
- package/manager/FWAudioManager.ts +289 -0
- package/manager/FWAudioManager.ts.meta +10 -0
- package/manager/FWBundleManager.ts +91 -0
- package/manager/FWBundleManager.ts.meta +10 -0
- package/manager/FWComponentManager.ts +25 -0
- package/manager/FWComponentManager.ts.meta +10 -0
- package/manager/FWEngineManager.ts +63 -0
- package/manager/FWEngineManager.ts.meta +10 -0
- package/manager/FWEventManager.ts +275 -0
- package/manager/FWEventManager.ts.meta +10 -0
- package/manager/FWHotUpdateManager.ts +213 -0
- package/manager/FWHotUpdateManager.ts.meta +10 -0
- package/manager/FWLanguageManager.ts +116 -0
- package/manager/FWLanguageManager.ts.meta +10 -0
- package/manager/FWLayerManager.ts +490 -0
- package/manager/FWLayerManager.ts.meta +10 -0
- package/manager/FWManager.ts +8 -0
- package/manager/FWManager.ts.meta +10 -0
- package/manager/FWObjectManager.ts +91 -0
- package/manager/FWObjectManager.ts.meta +10 -0
- package/manager/FWResManager.ts +171 -0
- package/manager/FWResManager.ts.meta +10 -0
- package/manager/FWSocketManager.ts +94 -0
- package/manager/FWSocketManager.ts.meta +10 -0
- package/manager/FWStateManager.ts +102 -0
- package/manager/FWStateManager.ts.meta +10 -0
- package/manager/FWTaskManager.ts +38 -0
- package/manager/FWTaskManager.ts.meta +10 -0
- package/manager/FWTimeManager.ts +473 -0
- package/manager/FWTimeManager.ts.meta +10 -0
- package/manager/FWUiManager.ts +164 -0
- package/manager/FWUiManager.ts.meta +10 -0
- package/manager.meta +13 -0
- package/package.json +17 -0
- package/package.json.meta +6 -0
- package/scene/FWScene.ts +25 -0
- package/scene/FWScene.ts.meta +10 -0
- package/scene.meta +13 -0
- package/service/FWService.ts +7 -0
- package/service/FWService.ts.meta +10 -0
- package/service/http/FWHttp.ts +70 -0
- package/service/http/FWHttp.ts.meta +10 -0
- package/service/http.meta +13 -0
- package/service/socket/FWSocket.ts +236 -0
- package/service/socket/FWSocket.ts.meta +10 -0
- package/service/socket/FWSocketHandle.ts +17 -0
- package/service/socket/FWSocketHandle.ts.meta +10 -0
- package/service/socket/FWSocketSender.ts +16 -0
- package/service/socket/FWSocketSender.ts.meta +10 -0
- package/service/socket.meta +13 -0
- package/service.meta +13 -0
- package/state/FWState.ts +8 -0
- package/state/FWState.ts.meta +10 -0
- package/state.meta +13 -0
- package/utils/FWLodash.ts +105 -0
- package/utils/FWLodash.ts.meta +10 -0
- package/utils/FWMask.ts +222 -0
- package/utils/FWMask.ts.meta +10 -0
- package/utils/FWObject.ts +22 -0
- package/utils/FWObject.ts.meta +10 -0
- package/utils/FWObjectPool.ts +178 -0
- package/utils/FWObjectPool.ts.meta +10 -0
- package/utils/FWQueue.ts +47 -0
- package/utils/FWQueue.ts.meta +10 -0
- package/utils/FWTask.ts +223 -0
- package/utils/FWTask.ts.meta +10 -0
- package/utils.meta +13 -0
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import FWLog from '../log/FWLog';
|
|
2
|
+
|
|
3
|
+
const { ccclass, property, menu } = cc._decorator;
|
|
4
|
+
|
|
5
|
+
interface EventTouch extends cc.Event.EventTouch {
|
|
6
|
+
simulate?: boolean;
|
|
7
|
+
mock?: boolean; // 是否为模拟事件
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
@ccclass
|
|
11
|
+
@menu('CustomComponent/FWRollingViewNesting')
|
|
12
|
+
export default class FWRollingViewNesting extends cc.Component {
|
|
13
|
+
@property({
|
|
14
|
+
tooltip: '方向判定阈值(像素),小于该值不触发方向拦截',
|
|
15
|
+
min: 3,
|
|
16
|
+
max: 15,
|
|
17
|
+
})
|
|
18
|
+
dirThreshold = 15;
|
|
19
|
+
|
|
20
|
+
private scrollView: cc.ScrollView = null;
|
|
21
|
+
private _isBoundaryV = 0; //为没有开启滚动所以没有边界 1为上边界 2为下边界 3为不滑动;
|
|
22
|
+
private _isBoundaryH = 0; //为没有开启滚动所以没有边界 1为左边界 2为右边界 3为不滑动;
|
|
23
|
+
|
|
24
|
+
protected onEnable(): void {
|
|
25
|
+
this.scrollView = this.node.getComponent(cc.ScrollView);
|
|
26
|
+
if (this.scrollView) {
|
|
27
|
+
(this.scrollView as any).hasNestedViewGroup = (event, captureListeners) => {
|
|
28
|
+
if (event.eventPhase !== cc.Event.CAPTURING_PHASE) return false;
|
|
29
|
+
const hasNested = this._processNestedEvent(event, captureListeners);
|
|
30
|
+
// 只处理 TOUCH_END 和 TOUCH_CANCEL,且没有被嵌套拦截时,通知其他嵌套ViewGroup处理事件
|
|
31
|
+
if (
|
|
32
|
+
(event.type === cc.Node.EventType.TOUCH_END ||
|
|
33
|
+
event.type === cc.Node.EventType.TOUCH_CANCEL) &&
|
|
34
|
+
!hasNested
|
|
35
|
+
) {
|
|
36
|
+
for (const item of captureListeners) {
|
|
37
|
+
this.onEnd(event, captureListeners, item);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
this.onEnd(event, captureListeners, event.target);
|
|
41
|
+
}
|
|
42
|
+
return hasNested;
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
protected onDisable(): void {
|
|
48
|
+
this.unscheduleAllCallbacks();
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
private onEnd(event, captureListeners, item) {
|
|
52
|
+
if (item !== this.node) {
|
|
53
|
+
const viewGroup = item.getComponent(cc.ViewGroup);
|
|
54
|
+
if (viewGroup) {
|
|
55
|
+
if (
|
|
56
|
+
event.type === cc.Node.EventType.TOUCH_END &&
|
|
57
|
+
typeof viewGroup._onTouchEnded === 'function'
|
|
58
|
+
) {
|
|
59
|
+
let touch = event.touch;
|
|
60
|
+
if (viewGroup.content) {
|
|
61
|
+
viewGroup._handleReleaseLogic(touch);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
if (
|
|
65
|
+
event.type === cc.Node.EventType.TOUCH_CANCEL &&
|
|
66
|
+
typeof viewGroup._onTouchCancelled === 'function'
|
|
67
|
+
) {
|
|
68
|
+
if (!event.simulate) {
|
|
69
|
+
let touch = event.touch;
|
|
70
|
+
if (viewGroup.content) {
|
|
71
|
+
viewGroup._handleReleaseLogic(touch);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
private _processNestedEvent(event: EventTouch, captureListeners: any[]): boolean {
|
|
80
|
+
if (!captureListeners) return false;
|
|
81
|
+
|
|
82
|
+
for (let i = 0; i < captureListeners.length; ++i) {
|
|
83
|
+
const item = captureListeners[i];
|
|
84
|
+
if (this.node === item) {
|
|
85
|
+
return event.target?.getComponent(cc.ViewGroup)
|
|
86
|
+
? this.itemIsView(event.target, event)
|
|
87
|
+
: false;
|
|
88
|
+
}
|
|
89
|
+
if (item.getComponent(cc.ViewGroup)) {
|
|
90
|
+
return this.itemIsView(item, event);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
itemIsView(target: cc.Node, event: EventTouch): boolean {
|
|
97
|
+
const scrollView = target.getComponent(cc.ScrollView);
|
|
98
|
+
if (!scrollView) return false;
|
|
99
|
+
|
|
100
|
+
const delta = this._getTouchDelta(event);
|
|
101
|
+
this._checkBoundary(scrollView);
|
|
102
|
+
|
|
103
|
+
return this._shouldIntercept(delta, scrollView);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* 获取当前触摸的移动距离
|
|
108
|
+
* @returns {cc.Vec2} 触摸移动的偏移量
|
|
109
|
+
*/
|
|
110
|
+
private _getTouchDelta(event: EventTouch): cc.Vec2 {
|
|
111
|
+
if (!event) return cc.v2(0, 0);
|
|
112
|
+
// 使用事件的起始位置和当前位置计算偏移
|
|
113
|
+
const startPos = event.getStartLocation ? event.getStartLocation() : cc.v2(0, 0);
|
|
114
|
+
const currentPos = event.getLocation ? event.getLocation() : cc.v2(0, 0);
|
|
115
|
+
return currentPos.sub(startPos);
|
|
116
|
+
}
|
|
117
|
+
//边界检测
|
|
118
|
+
private _checkBoundary(scrollView: cc.ScrollView) {
|
|
119
|
+
const offset = scrollView.getScrollOffset();
|
|
120
|
+
const maxOffset = scrollView.getMaxScrollOffset();
|
|
121
|
+
|
|
122
|
+
// 垂直边界
|
|
123
|
+
if (!scrollView.vertical) {
|
|
124
|
+
this._isBoundaryV = 0;
|
|
125
|
+
} else if (maxOffset.y <= 2) {
|
|
126
|
+
this._isBoundaryV = 3; //内部不滑动
|
|
127
|
+
} else if (offset.y <= 10) {
|
|
128
|
+
this._isBoundaryV = 1; // 顶部边界
|
|
129
|
+
} else if (offset.y >= maxOffset.y - 10) {
|
|
130
|
+
this._isBoundaryV = 2; // 底部边界
|
|
131
|
+
} else {
|
|
132
|
+
this._isBoundaryV = 0;
|
|
133
|
+
}
|
|
134
|
+
// 水平边界
|
|
135
|
+
if (!scrollView.horizontal) {
|
|
136
|
+
this._isBoundaryH = 0;
|
|
137
|
+
} else if (maxOffset.x <= 2) {
|
|
138
|
+
this._isBoundaryH = 3; //内部不滑动
|
|
139
|
+
} else if (offset.x >= -10) {
|
|
140
|
+
this._isBoundaryH = 1; // 左边界
|
|
141
|
+
} else if (offset.x <= -maxOffset.x + 10) {
|
|
142
|
+
this._isBoundaryH = 2; // 右边界
|
|
143
|
+
} else {
|
|
144
|
+
this._isBoundaryH = 0;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// FWLog.response('_isBoundaryV:', this._isBoundaryV);
|
|
148
|
+
// FWLog.response('_isBoundaryH:', this._isBoundaryH);
|
|
149
|
+
// console.log('offsetx:%d,offsety:%d', offset.x, offset.y);
|
|
150
|
+
// console.log('maxOffsetx:%d,maxOffsety:%d', maxOffset.x, maxOffset.y);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
//方向拦截,边界拦截
|
|
154
|
+
private _shouldIntercept(delta: cc.Vec2, scrollView: cc.ScrollView): boolean {
|
|
155
|
+
//console.log('deltax:%d,deltay:%d', delta.x, delta.y);
|
|
156
|
+
//判断水平方向位移
|
|
157
|
+
if (scrollView.horizontal && this.scrollView.horizontal) {
|
|
158
|
+
//同向位移
|
|
159
|
+
if (Math.abs(delta.x) > this.dirThreshold) {
|
|
160
|
+
// 左边界且向左滚动,或右边界且向右滚动,交给父级处理
|
|
161
|
+
if (
|
|
162
|
+
(this._isBoundaryH === 1 && delta.x > 0) ||
|
|
163
|
+
(this._isBoundaryH === 2 && delta.x < 0) ||
|
|
164
|
+
this._isBoundaryH === 3
|
|
165
|
+
) {
|
|
166
|
+
return false;
|
|
167
|
+
}
|
|
168
|
+
// 非边界,自己处理
|
|
169
|
+
return true;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
// 垂直方向拦截
|
|
173
|
+
if (scrollView.vertical && this.scrollView.vertical) {
|
|
174
|
+
if (Math.abs(delta.y) > this.dirThreshold) {
|
|
175
|
+
// 顶部边界且向下滚动,或底部边界且向上滚动,交给父级处理
|
|
176
|
+
if (
|
|
177
|
+
(this._isBoundaryV === 1 && delta.y < 0) ||
|
|
178
|
+
(this._isBoundaryV === 2 && delta.y > 0) ||
|
|
179
|
+
this._isBoundaryV === 3
|
|
180
|
+
) {
|
|
181
|
+
return false;
|
|
182
|
+
}
|
|
183
|
+
// 非边界,自己处理
|
|
184
|
+
return true;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
// 默认不拦截
|
|
189
|
+
return false;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
@@ -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
|
+
};
|
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,150 @@
|
|
|
1
|
+
import FWVirtualViewComponent from '../component/FWVirtualViewComponent';
|
|
2
|
+
import FWObject from '../utils/FWObject';
|
|
3
|
+
|
|
4
|
+
/******************************************
|
|
5
|
+
* @author kL <klk0@qq.com>
|
|
6
|
+
* @date 2019/6/6
|
|
7
|
+
* @doc 列表Item组件.
|
|
8
|
+
* 说明:
|
|
9
|
+
* 1、此组件须配合List组件使用。(配套的配套的..)
|
|
10
|
+
* @end
|
|
11
|
+
******************************************/
|
|
12
|
+
const { ccclass, property, disallowMultiple, menu, executionOrder } = cc._decorator;
|
|
13
|
+
|
|
14
|
+
enum SelectedType {
|
|
15
|
+
NONE = 0,
|
|
16
|
+
TOGGLE = 1,
|
|
17
|
+
SWITCH = 2,
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
@ccclass
|
|
21
|
+
@disallowMultiple()
|
|
22
|
+
@menu('CustomComponent/FWVirtualListItem')
|
|
23
|
+
@executionOrder(-5001) //先于List
|
|
24
|
+
export default class FWVirtualListItem extends FWObject {
|
|
25
|
+
onGet(args: any) {}
|
|
26
|
+
onPut() {}
|
|
27
|
+
onInit() {}
|
|
28
|
+
|
|
29
|
+
//选择模式
|
|
30
|
+
@property({
|
|
31
|
+
type: cc.Enum(SelectedType),
|
|
32
|
+
tooltip: CC_DEV && '选择模式',
|
|
33
|
+
})
|
|
34
|
+
selectedMode: SelectedType = SelectedType.NONE;
|
|
35
|
+
|
|
36
|
+
//自适应尺寸
|
|
37
|
+
@property({
|
|
38
|
+
tooltip: CC_DEV && '自适应尺寸(宽或高)',
|
|
39
|
+
})
|
|
40
|
+
adaptiveSize: boolean = false;
|
|
41
|
+
|
|
42
|
+
//按钮组件
|
|
43
|
+
private _btnCom: any;
|
|
44
|
+
get btnCom() {
|
|
45
|
+
if (!this._btnCom) this._btnCom = this.node.getComponent(cc.Button);
|
|
46
|
+
return this._btnCom;
|
|
47
|
+
}
|
|
48
|
+
//依赖的List组件
|
|
49
|
+
public list: FWVirtualViewComponent;
|
|
50
|
+
//是否已经注册过事件
|
|
51
|
+
private _eventReg = false;
|
|
52
|
+
//序列id
|
|
53
|
+
public listId: number;
|
|
54
|
+
|
|
55
|
+
onLoad() {}
|
|
56
|
+
|
|
57
|
+
onDestroy() {
|
|
58
|
+
this.node.off(cc.Node.EventType.SIZE_CHANGED, this._onSizeChange, this);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
_registerEvent() {
|
|
62
|
+
if (!this._eventReg) {
|
|
63
|
+
if (this.btnCom && this.list.selectedMode > 0) {
|
|
64
|
+
this.btnCom.clickEvents.unshift(this.createEvt(this, 'onClickThis'));
|
|
65
|
+
}
|
|
66
|
+
if (this.adaptiveSize) {
|
|
67
|
+
this.node.on(cc.Node.EventType.SIZE_CHANGED, this._onSizeChange, this);
|
|
68
|
+
}
|
|
69
|
+
this._eventReg = true;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
_onSizeChange() {
|
|
74
|
+
this.list._onItemAdaptive(this.node);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* 创建事件
|
|
78
|
+
* @param {cc.Component} component 组件脚本
|
|
79
|
+
* @param {string} handlerName 触发函数名称
|
|
80
|
+
* @param {cc.Node} node 组件所在node(不传的情况下取component.node)
|
|
81
|
+
* @returns cc.Component.EventHandler
|
|
82
|
+
*/
|
|
83
|
+
createEvt(component: cc.Component, handlerName: string, node: cc.Node = null) {
|
|
84
|
+
if (!component.isValid) return; //有些异步加载的,节点以及销毁了。
|
|
85
|
+
component['comName'] =
|
|
86
|
+
component['comName'] ||
|
|
87
|
+
component.name
|
|
88
|
+
.match(/\<(.*?)\>/g)
|
|
89
|
+
.pop()
|
|
90
|
+
.replace(/\<|>/g, '');
|
|
91
|
+
let evt = new cc.Component.EventHandler();
|
|
92
|
+
evt.target = node || component.node;
|
|
93
|
+
evt.component = component['comName'];
|
|
94
|
+
evt.handler = handlerName;
|
|
95
|
+
return evt;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
showAni(aniType: number, callFunc: Function, del: boolean) {
|
|
99
|
+
let t: any = this;
|
|
100
|
+
let tween: cc.Tween;
|
|
101
|
+
switch (aniType) {
|
|
102
|
+
case 0: //向上消失
|
|
103
|
+
tween = cc
|
|
104
|
+
.tween(t.node)
|
|
105
|
+
.to(0.2, { scale: 0.7 })
|
|
106
|
+
.by(0.3, { y: t.node.height * 2 });
|
|
107
|
+
break;
|
|
108
|
+
case 1: //向右消失
|
|
109
|
+
tween = cc
|
|
110
|
+
.tween(t.node)
|
|
111
|
+
.to(0.2, { scale: 0.7 })
|
|
112
|
+
.by(0.3, { x: t.node.width * 2 });
|
|
113
|
+
break;
|
|
114
|
+
case 2: //向下消失
|
|
115
|
+
tween = cc
|
|
116
|
+
.tween(t.node)
|
|
117
|
+
.to(0.2, { scale: 0.7 })
|
|
118
|
+
.by(0.3, { y: t.node.height * -2 });
|
|
119
|
+
break;
|
|
120
|
+
case 3: //向左消失
|
|
121
|
+
tween = cc
|
|
122
|
+
.tween(t.node)
|
|
123
|
+
.to(0.2, { scale: 0.7 })
|
|
124
|
+
.by(0.3, { x: t.node.width * -2 });
|
|
125
|
+
break;
|
|
126
|
+
default: //默认:缩小消失
|
|
127
|
+
tween = cc.tween(t.node).to(0.3, { scale: 0.1 });
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
if (callFunc || del) {
|
|
131
|
+
tween.call(() => {
|
|
132
|
+
if (del) {
|
|
133
|
+
t.list._delSingleItem(t.node);
|
|
134
|
+
for (let n: number = t.list.displayData.length - 1; n >= 0; n--) {
|
|
135
|
+
if (t.list.displayData[n].id == t.listId) {
|
|
136
|
+
t.list.displayData.splice(n, 1);
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
callFunc();
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
tween.start();
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
onClickThis() {
|
|
148
|
+
this.list.selectedId = this.listId;
|
|
149
|
+
}
|
|
150
|
+
}
|
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,69 @@
|
|
|
1
|
+
import { FWEventDefine } from '../define/FWEventDefine';
|
|
2
|
+
import { FWLodash } from '../utils/FWLodash';
|
|
3
|
+
|
|
4
|
+
const { ccclass, property, executeInEditMode } = cc._decorator;
|
|
5
|
+
|
|
6
|
+
@ccclass
|
|
7
|
+
@executeInEditMode
|
|
8
|
+
export default abstract class FWLanguage extends cc.Component {
|
|
9
|
+
@property
|
|
10
|
+
protected _language: number = 0;
|
|
11
|
+
|
|
12
|
+
@property({
|
|
13
|
+
type: FWLodash.CCEnum(['请选择语言', ...FW.Entry.languageMgr.getSupportedLanguages()]),
|
|
14
|
+
displayName: 'language',
|
|
15
|
+
visible: true,
|
|
16
|
+
serializable: true,
|
|
17
|
+
})
|
|
18
|
+
get language() {
|
|
19
|
+
return this._language;
|
|
20
|
+
}
|
|
21
|
+
set language(value: number) {
|
|
22
|
+
this._language = value;
|
|
23
|
+
this.onLanguageChange();
|
|
24
|
+
}
|
|
25
|
+
protected refresh() {
|
|
26
|
+
if (CC_EDITOR) {
|
|
27
|
+
this.onRefresh();
|
|
28
|
+
this.refreshInspector();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
private refreshInspector() {
|
|
33
|
+
//@ts-ignore
|
|
34
|
+
Editor.Utils.refreshSelectedInspector('node', this.node.uuid);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
protected onLoad(): void {
|
|
38
|
+
FW.Entry.evtMgr.register(
|
|
39
|
+
FWEventDefine.LanguageEvent.LANGUAGE_CHANGE,
|
|
40
|
+
() => {
|
|
41
|
+
this._language = FW.Entry.languageMgr.getLanguageIndex();
|
|
42
|
+
this.onLanguageChange();
|
|
43
|
+
},
|
|
44
|
+
this,
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
protected onEnable(): void {
|
|
49
|
+
if (!CC_EDITOR) {
|
|
50
|
+
this._language = FW.Entry.languageMgr.getLanguageIndex();
|
|
51
|
+
this.onLanguageChange();
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
protected onDestroy(): void {
|
|
56
|
+
FW.Entry.evtMgr.targetOff(this);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
protected getSupportedLanguages(): string[] {
|
|
60
|
+
return FW.Entry.languageMgr.getSupportedLanguages();
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
protected getBundles(): string[] {
|
|
64
|
+
return FW.Entry.languageMgr.getBundles();
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
protected abstract onRefresh?(): void;
|
|
68
|
+
protected abstract onLanguageChange?(): void;
|
|
69
|
+
}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { FWLodash } from '../utils/FWLodash';
|
|
2
|
+
import FWLanguage from './FWLanguage';
|
|
3
|
+
|
|
4
|
+
const { ccclass, property, executeInEditMode, menu, requireComponent } = cc._decorator;
|
|
5
|
+
|
|
6
|
+
@ccclass
|
|
7
|
+
@menu('Language/FWLanguageLabelLocalize')
|
|
8
|
+
@requireComponent(cc.Label)
|
|
9
|
+
@executeInEditMode
|
|
10
|
+
export default class FWLanguageLabelLocalize extends FWLanguage {
|
|
11
|
+
@property({
|
|
12
|
+
type: FWLodash.CCEnum(['请选择语言包']),
|
|
13
|
+
displayName: 'bundle',
|
|
14
|
+
visible: true,
|
|
15
|
+
})
|
|
16
|
+
get bundle() {
|
|
17
|
+
return this._bundle;
|
|
18
|
+
}
|
|
19
|
+
set bundle(value: number) {
|
|
20
|
+
this._bundle = value;
|
|
21
|
+
this.onBundleChange();
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@property({
|
|
25
|
+
type: FWLodash.CCEnum(['请选择索引']),
|
|
26
|
+
displayName: 'key',
|
|
27
|
+
visible: true,
|
|
28
|
+
})
|
|
29
|
+
get key() {
|
|
30
|
+
return this._key;
|
|
31
|
+
}
|
|
32
|
+
set key(value: number) {
|
|
33
|
+
this._key = value;
|
|
34
|
+
this.refresh();
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
protected onLoad(): void {
|
|
38
|
+
super.onLoad?.();
|
|
39
|
+
this.label = this.node.getComponent(cc.Label);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
protected onEnable(): void {
|
|
43
|
+
super.onEnable?.();
|
|
44
|
+
this.onBundleChange();
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
public onRefresh(): void {
|
|
48
|
+
const label = this.node.getComponent(cc.Label);
|
|
49
|
+
if (this._language == 0 || this._bundle == 0 || this._key == 0) {
|
|
50
|
+
label.string = '';
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const keys = FW.Entry.languageMgr.getLanguagePackageEnumKeys(this.bundleName);
|
|
54
|
+
const str = FW.Entry.languageMgr.getLanguagePackageValue(
|
|
55
|
+
this.bundleName,
|
|
56
|
+
keys[this.key - 1],
|
|
57
|
+
this.languageName,
|
|
58
|
+
);
|
|
59
|
+
label.string = str;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
protected onBundleChange(): void {
|
|
63
|
+
this.updateKeys();
|
|
64
|
+
this.refreshKes();
|
|
65
|
+
this.refresh();
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
protected onLanguageChange(): void {
|
|
69
|
+
if (this._language == 0) {
|
|
70
|
+
this._bundle = 0;
|
|
71
|
+
this._key = 0;
|
|
72
|
+
}
|
|
73
|
+
this.updateBundles();
|
|
74
|
+
this.updateKeys();
|
|
75
|
+
this.refreshBundles();
|
|
76
|
+
this.refreshKes();
|
|
77
|
+
this.refresh();
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
protected refreshKes() {
|
|
81
|
+
if (CC_EDITOR) {
|
|
82
|
+
//@ts-ignore
|
|
83
|
+
cc.Class.Attr.setClassAttr(
|
|
84
|
+
this.constructor,
|
|
85
|
+
'key',
|
|
86
|
+
'enumList',
|
|
87
|
+
//@ts-ignore
|
|
88
|
+
cc.Enum.getList(CCEnum(this._keys)),
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
protected updateKeys() {
|
|
94
|
+
if (this._language > 0 && this._bundle > 0) {
|
|
95
|
+
this._keys = [
|
|
96
|
+
'请选择索引',
|
|
97
|
+
...Object.keys(FW.Entry.languageMgr.getLanguagePackageEnum(this.bundleName)),
|
|
98
|
+
];
|
|
99
|
+
} else {
|
|
100
|
+
this._keys = ['请选择索引'];
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
get bundleName() {
|
|
105
|
+
const bundles = this.getBundles();
|
|
106
|
+
return bundles[this._bundle - 1];
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
get languageName() {
|
|
110
|
+
const languages = this.getSupportedLanguages();
|
|
111
|
+
return languages[this._language - 1];
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
protected updateBundles() {
|
|
115
|
+
if (this._language > 0) {
|
|
116
|
+
this._bundles = ['请选择语言包', ...this.getBundles()];
|
|
117
|
+
} else {
|
|
118
|
+
this._bundles = ['请选择语言包'];
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
protected refreshBundles() {
|
|
123
|
+
if (CC_EDITOR) {
|
|
124
|
+
//@ts-ignore
|
|
125
|
+
cc.Class.Attr.setClassAttr(
|
|
126
|
+
this.constructor,
|
|
127
|
+
'bundle',
|
|
128
|
+
'enumList',
|
|
129
|
+
//@ts-ignore
|
|
130
|
+
cc.Enum.getList(CCEnum(this._bundles)),
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
protected label: cc.Label = null;
|
|
136
|
+
@property
|
|
137
|
+
protected _key: number = 0;
|
|
138
|
+
@property
|
|
139
|
+
protected _keys: string[] = [];
|
|
140
|
+
@property
|
|
141
|
+
protected _bundle: number = 0;
|
|
142
|
+
@property
|
|
143
|
+
protected _bundles: string[] = [];
|
|
144
|
+
}
|