@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
package/utils/FWMask.ts
ADDED
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
export enum FWMaskType {
|
|
2
|
+
/**
|
|
3
|
+
* !#en Rect mask.
|
|
4
|
+
* !#zh 使用矩形作为遮罩
|
|
5
|
+
* @property {Number} RECT
|
|
6
|
+
*/
|
|
7
|
+
RECT = 0,
|
|
8
|
+
/**
|
|
9
|
+
* !#en Ellipse Mask.
|
|
10
|
+
* !#zh 使用椭圆作为遮罩
|
|
11
|
+
* @property {Number} ELLIPSE
|
|
12
|
+
*/
|
|
13
|
+
ELLIPSE = 1,
|
|
14
|
+
/**
|
|
15
|
+
* !#en Image Stencil Mask.
|
|
16
|
+
* !#zh 使用图像模版作为遮罩
|
|
17
|
+
* @property {Number} IMAGE_STENCIL
|
|
18
|
+
*/
|
|
19
|
+
IMAGE_STENCIL = 2,
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* 多边形遮罩
|
|
23
|
+
*/
|
|
24
|
+
POLYGON = 3,
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
let _vec2_temp = new cc.Vec2();
|
|
28
|
+
let _mat4_temp = new cc.Mat4();
|
|
29
|
+
|
|
30
|
+
let _circlepoints = [];
|
|
31
|
+
function _calculateCircle(center, radius, segements) {
|
|
32
|
+
_circlepoints.length = 0;
|
|
33
|
+
let anglePerStep = (Math.PI * 2) / segements;
|
|
34
|
+
for (let step = 0; step < segements; ++step) {
|
|
35
|
+
_circlepoints.push(
|
|
36
|
+
cc.v2(
|
|
37
|
+
radius.x * Math.cos(anglePerStep * step) + center.x,
|
|
38
|
+
radius.y * Math.sin(anglePerStep * step) + center.y,
|
|
39
|
+
),
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return _circlepoints;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
class EllipseConfig {
|
|
47
|
+
center: cc.Vec2;
|
|
48
|
+
r: cc.Vec2;
|
|
49
|
+
segments: number;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* 遮罩扩展
|
|
54
|
+
* 自定义多边形遮罩
|
|
55
|
+
*/
|
|
56
|
+
const { ccclass, property, executeInEditMode, menu, help, inspector } = cc._decorator;
|
|
57
|
+
@ccclass
|
|
58
|
+
@executeInEditMode
|
|
59
|
+
@inspector('packages://maskplus/inspector.js')
|
|
60
|
+
@menu('CustomComponent/FWMask')
|
|
61
|
+
export default class FWMask extends cc.Mask {
|
|
62
|
+
static Type = FWMaskType;
|
|
63
|
+
|
|
64
|
+
@property({ type: cc.Enum(FWMaskType), override: true })
|
|
65
|
+
_type: FWMaskType = 0;
|
|
66
|
+
@property({ type: cc.Enum(FWMaskType), override: true })
|
|
67
|
+
// @ts-ignore
|
|
68
|
+
get type() {
|
|
69
|
+
return this._type;
|
|
70
|
+
}
|
|
71
|
+
// @ts-ignore
|
|
72
|
+
set type(value) {
|
|
73
|
+
if (this._type !== value) {
|
|
74
|
+
this['_resetAssembler']();
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
this._type = value;
|
|
78
|
+
|
|
79
|
+
if (this._type === FWMaskType.POLYGON) {
|
|
80
|
+
if (this._polygon.length === 0) {
|
|
81
|
+
let [x, y, width, height] = this.getNodeRect();
|
|
82
|
+
this._polygon.push(
|
|
83
|
+
cc.v2(x, y),
|
|
84
|
+
cc.v2(x + width, y),
|
|
85
|
+
cc.v2(x + width, y + height),
|
|
86
|
+
cc.v2(x, y + height),
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (this._type !== FWMaskType.IMAGE_STENCIL) {
|
|
92
|
+
this.spriteFrame = null;
|
|
93
|
+
this.alphaThreshold = 0;
|
|
94
|
+
this._updateGraphics();
|
|
95
|
+
}
|
|
96
|
+
this['_activateMaterial']();
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
@property({ type: [cc.Vec2], serializable: true })
|
|
100
|
+
_polygon: cc.Vec2[] = [];
|
|
101
|
+
@property({ type: [cc.Vec2], serializable: true })
|
|
102
|
+
public get polygon() {
|
|
103
|
+
return this._polygon;
|
|
104
|
+
}
|
|
105
|
+
public set polygon(points: cc.Vec2[]) {
|
|
106
|
+
this._polygon = points;
|
|
107
|
+
this._updateGraphics();
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
private ellipse: EllipseConfig = new EllipseConfig();
|
|
111
|
+
public setEllipse(center?: cc.Vec2, r?: cc.Vec2, segments?: number) {
|
|
112
|
+
this.ellipse.center = center;
|
|
113
|
+
this.ellipse.r = r;
|
|
114
|
+
this.ellipse.segments = segments || this.segements;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
_updateGraphics() {
|
|
118
|
+
let node = this.node;
|
|
119
|
+
let graphics = this['_graphics'];
|
|
120
|
+
// Share render data with graphics content
|
|
121
|
+
graphics.clear(false);
|
|
122
|
+
let [x, y, width, height] = this.getNodeRect();
|
|
123
|
+
if (this['_type'] === FWMaskType.RECT) {
|
|
124
|
+
graphics.rect(x, y, width, height);
|
|
125
|
+
} else if (this['_type'] === FWMaskType.ELLIPSE) {
|
|
126
|
+
let center = this.ellipse.center || cc.v2(x + width / 2, y + height / 2);
|
|
127
|
+
let radius = this.ellipse.r || { x: width / 2, y: height / 2 };
|
|
128
|
+
let segments = this.ellipse.segments || this['_segments'];
|
|
129
|
+
let points = _calculateCircle(center, radius, segments);
|
|
130
|
+
for (let i = 0; i < points.length; ++i) {
|
|
131
|
+
let point = points[i];
|
|
132
|
+
if (i === 0) {
|
|
133
|
+
graphics.moveTo(point.x, point.y);
|
|
134
|
+
} else {
|
|
135
|
+
graphics.lineTo(point.x, point.y);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
graphics.close();
|
|
139
|
+
} else if (this['_type'] === FWMaskType.POLYGON) {
|
|
140
|
+
if (this._polygon.length === 0) this._polygon.push(cc.v2(0, 0));
|
|
141
|
+
graphics.moveTo(this._polygon[0].x, this._polygon[0].y);
|
|
142
|
+
for (let i = 1; i < this._polygon.length; i++) {
|
|
143
|
+
graphics.lineTo(this._polygon[i].x, this._polygon[i].y);
|
|
144
|
+
}
|
|
145
|
+
graphics.lineTo(this._polygon[0].x, this._polygon[0].y);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
if (cc.game.renderType === cc.game.RENDER_TYPE_CANVAS) {
|
|
149
|
+
graphics.stroke();
|
|
150
|
+
} else {
|
|
151
|
+
graphics.fill();
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
_hitTest(cameraPt: cc.Vec2) {
|
|
156
|
+
let node = this.node;
|
|
157
|
+
let size = node.getContentSize(),
|
|
158
|
+
w = size.width,
|
|
159
|
+
h = size.height,
|
|
160
|
+
testPt = _vec2_temp;
|
|
161
|
+
|
|
162
|
+
node['_updateWorldMatrix']();
|
|
163
|
+
if (!cc.Mat4.invert(_mat4_temp, node['_worldMatrix'])) {
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
let point = cc.v2(0, 0);
|
|
167
|
+
cc.Vec2.transformMat4(point, cameraPt, _mat4_temp);
|
|
168
|
+
testPt.x = point.x + node['_anchorPoint'].x * w;
|
|
169
|
+
testPt.y = point.y + node['_anchorPoint'].y * h;
|
|
170
|
+
|
|
171
|
+
let result = false;
|
|
172
|
+
if (this.type === FWMaskType.RECT || this.type === FWMaskType.IMAGE_STENCIL) {
|
|
173
|
+
result = testPt.x >= 0 && testPt.y >= 0 && testPt.x <= w && testPt.y <= h;
|
|
174
|
+
} else if (this.type === FWMaskType.ELLIPSE) {
|
|
175
|
+
let rx = w / 2,
|
|
176
|
+
ry = h / 2;
|
|
177
|
+
let px = testPt.x - 0.5 * w,
|
|
178
|
+
py = testPt.y - 0.5 * h;
|
|
179
|
+
result = (px * px) / (rx * rx) + (py * py) / (ry * ry) < 1;
|
|
180
|
+
} else if (this.type === FWMaskType.POLYGON) {
|
|
181
|
+
result = this.isInPolygon(point, this.polygon);
|
|
182
|
+
}
|
|
183
|
+
if (this.inverted) {
|
|
184
|
+
result = !result;
|
|
185
|
+
}
|
|
186
|
+
return result;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
private getNodeRect() {
|
|
190
|
+
let width = this.node['_contentSize'].width;
|
|
191
|
+
let height = this.node['_contentSize'].height;
|
|
192
|
+
let x = -width * this.node['_anchorPoint'].x;
|
|
193
|
+
let y = -height * this.node['_anchorPoint'].y;
|
|
194
|
+
return [x, y, width, height];
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
public isInPolygon(checkPoint: cc.Vec2, polygonPoints: cc.Vec2[]) {
|
|
198
|
+
let counter = 0,
|
|
199
|
+
i: number,
|
|
200
|
+
xinters: number;
|
|
201
|
+
let p1: cc.Vec2, p2: cc.Vec2;
|
|
202
|
+
let pointCount = polygonPoints.length;
|
|
203
|
+
p1 = polygonPoints[0];
|
|
204
|
+
|
|
205
|
+
for (i = 1; i <= pointCount; i++) {
|
|
206
|
+
p2 = polygonPoints[i % pointCount];
|
|
207
|
+
if (checkPoint.x > Math.min(p1.x, p2.x) && checkPoint.x <= Math.max(p1.x, p2.x)) {
|
|
208
|
+
if (checkPoint.y <= Math.max(p1.y, p2.y)) {
|
|
209
|
+
if (p1.x != p2.x) {
|
|
210
|
+
xinters = ((checkPoint.x - p1.x) * (p2.y - p1.y)) / (p2.x - p1.x) + p1.y;
|
|
211
|
+
if (p1.y == p2.y || checkPoint.y <= xinters) {
|
|
212
|
+
counter++;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
p1 = p2;
|
|
218
|
+
}
|
|
219
|
+
return (counter & 1) !== 0;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
cc['FWMask'] = FWMask;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export default abstract class FWObject extends cc.Component implements FW.Object {
|
|
2
|
+
/** 是否已经初始化 */
|
|
3
|
+
public initialize: boolean;
|
|
4
|
+
/** 对象唯一id */
|
|
5
|
+
public uniqueId: number;
|
|
6
|
+
/** 对象是否启用 */
|
|
7
|
+
public enable: boolean;
|
|
8
|
+
|
|
9
|
+
public readonly entry: FW.Entry = FW.Entry;
|
|
10
|
+
|
|
11
|
+
constructor() {
|
|
12
|
+
super();
|
|
13
|
+
this.initialize = false;
|
|
14
|
+
this.uniqueId = 0;
|
|
15
|
+
this.enable = false;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
abstract onGet(args: any);
|
|
19
|
+
abstract onPut();
|
|
20
|
+
abstract onInit();
|
|
21
|
+
abstract onDestroy();
|
|
22
|
+
}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { FWSystemDefine } from '../define/FWSystemDefine';
|
|
2
|
+
import FWLog from '../log/FWLog';
|
|
3
|
+
import FWObject from './FWObject';
|
|
4
|
+
|
|
5
|
+
const POOL_DISABLE_POSITION: cc.Vec3 = cc.v3(50000, 50000);
|
|
6
|
+
|
|
7
|
+
export class FWObjectPool<T extends FWObject = FWObject> implements FW.ObjectPool {
|
|
8
|
+
private uniqueId: number;
|
|
9
|
+
private type: FWSystemDefine.FWObjectType;
|
|
10
|
+
private enablePoolMap: Map<number, FW.ObjectProperty>;
|
|
11
|
+
private disablePoolMap: Map<number, FW.ObjectProperty>;
|
|
12
|
+
|
|
13
|
+
constructor(
|
|
14
|
+
protected node: cc.Node,
|
|
15
|
+
protected parent: cc.Node,
|
|
16
|
+
type?: FWSystemDefine.FWObjectType,
|
|
17
|
+
) {
|
|
18
|
+
this.uniqueId = 0;
|
|
19
|
+
this.type = type !== undefined ? type : FWSystemDefine.FWObjectType.OPACITY;
|
|
20
|
+
this.enablePoolMap = new Map<number, FW.ObjectProperty>();
|
|
21
|
+
this.disablePoolMap = new Map<number, FW.ObjectProperty>();
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* 获取所有已经启用对象
|
|
26
|
+
*/
|
|
27
|
+
public getEnableObjectMap() {
|
|
28
|
+
return this.enablePoolMap;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* 获取未启用对象
|
|
32
|
+
* @returns
|
|
33
|
+
*/
|
|
34
|
+
public getDisableObjectMap() {
|
|
35
|
+
return this.disablePoolMap;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* 获取所有已经创建对象
|
|
39
|
+
*/
|
|
40
|
+
public getAllObjectMap() {
|
|
41
|
+
return [...this.enablePoolMap, ...this.disablePoolMap];
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
findObjectProperty(node: cc.Node);
|
|
45
|
+
findObjectProperty(component: FW.Object);
|
|
46
|
+
findObjectProperty(uniqueId: number);
|
|
47
|
+
findObjectProperty() {
|
|
48
|
+
const map = new Map([...this.enablePoolMap, ...this.disablePoolMap]);
|
|
49
|
+
|
|
50
|
+
for (const [uniqueId, property] of map) {
|
|
51
|
+
if (arguments[0] instanceof cc.Node) {
|
|
52
|
+
const uuid = arguments[0].uuid;
|
|
53
|
+
if (property.node.uuid == uuid) {
|
|
54
|
+
return property;
|
|
55
|
+
}
|
|
56
|
+
} else if (arguments[0] instanceof FWObject) {
|
|
57
|
+
if (uniqueId == arguments[0]?.uniqueId) {
|
|
58
|
+
return property;
|
|
59
|
+
}
|
|
60
|
+
} else {
|
|
61
|
+
if (property?.uniqueId == arguments[0]) {
|
|
62
|
+
return property;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/** 是否禁用缓存池中存在剩余对象 */
|
|
70
|
+
private isEmpty() {
|
|
71
|
+
return this.disablePoolMap.size == 0;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
get(...args: any): FW.ObjectProperty {
|
|
75
|
+
let node: cc.Node;
|
|
76
|
+
let element: T;
|
|
77
|
+
let ObjectProperty: FW.ObjectProperty = {
|
|
78
|
+
uniqueId: -1,
|
|
79
|
+
};
|
|
80
|
+
if (this.isEmpty()) {
|
|
81
|
+
node = cc.instantiate(this.node);
|
|
82
|
+
element = (node.getComponent(FWObject) as T) || undefined;
|
|
83
|
+
ObjectProperty.uniqueId = ++this.uniqueId;
|
|
84
|
+
ObjectProperty.node = node;
|
|
85
|
+
ObjectProperty.component = element;
|
|
86
|
+
if (ObjectProperty.component) {
|
|
87
|
+
ObjectProperty.component.uniqueId = ObjectProperty.uniqueId;
|
|
88
|
+
}
|
|
89
|
+
} else {
|
|
90
|
+
const entry = this.disablePoolMap.entries().next().value;
|
|
91
|
+
const key = entry[0];
|
|
92
|
+
ObjectProperty = entry[1] as FW.ObjectProperty;
|
|
93
|
+
node = ObjectProperty.node;
|
|
94
|
+
element = ObjectProperty.component as T;
|
|
95
|
+
this.disablePoolMap.delete(key);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if (!cc.isValid(node)) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
ObjectProperty.enable = true;
|
|
103
|
+
|
|
104
|
+
this.enablePoolMap.set(ObjectProperty.uniqueId, ObjectProperty);
|
|
105
|
+
if (this.type == FWSystemDefine.FWObjectType.OPACITY) {
|
|
106
|
+
node.opacity = 255;
|
|
107
|
+
} else {
|
|
108
|
+
node.active = true;
|
|
109
|
+
node.setParent(this.parent);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
if (element) {
|
|
113
|
+
if (!element.initialize) {
|
|
114
|
+
element.initialize = true;
|
|
115
|
+
element.onInit();
|
|
116
|
+
}
|
|
117
|
+
element.enable = true;
|
|
118
|
+
node.setParent(this.parent);
|
|
119
|
+
element.onGet(args);
|
|
120
|
+
FW.Entry.evtMgr?.targetResume(element);
|
|
121
|
+
} else {
|
|
122
|
+
node.setParent(this.parent);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
node.resumeSystemEvents(true);
|
|
126
|
+
|
|
127
|
+
return ObjectProperty;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
puts(nodes: cc.Node[]);
|
|
131
|
+
puts(components: cc.Component[]);
|
|
132
|
+
puts(uniqueId: number[]);
|
|
133
|
+
puts() {
|
|
134
|
+
const arr = (arguments[0] as any[]).concat();
|
|
135
|
+
for (let i = 0; i < arr.length; i++) {
|
|
136
|
+
this.put(arr[i]);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
put(node: cc.Node);
|
|
141
|
+
put(component: FW.Object);
|
|
142
|
+
put(uniqueId: number);
|
|
143
|
+
put() {
|
|
144
|
+
let property: FW.ObjectProperty = this.findObjectProperty(arguments[0]);
|
|
145
|
+
|
|
146
|
+
const node: cc.Node = property.node;
|
|
147
|
+
const element = (node.getComponent(FWObject) as T) || undefined;
|
|
148
|
+
|
|
149
|
+
if (!cc.isValid(node)) {
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
if (this.type == FWSystemDefine.FWObjectType.OPACITY) {
|
|
154
|
+
node.opacity = 0;
|
|
155
|
+
} else {
|
|
156
|
+
node.active = false;
|
|
157
|
+
node.removeFromParent(false);
|
|
158
|
+
}
|
|
159
|
+
node.pauseSystemEvents(true);
|
|
160
|
+
node.setPosition(POOL_DISABLE_POSITION);
|
|
161
|
+
this.disablePoolMap.set(property.uniqueId, property);
|
|
162
|
+
if (element) {
|
|
163
|
+
FW.Entry.evtMgr?.targetPause(element);
|
|
164
|
+
element.onPut();
|
|
165
|
+
element.enable = false;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
onDestroy() {
|
|
170
|
+
const map = new Map([...this.enablePoolMap, ...this.disablePoolMap]);
|
|
171
|
+
|
|
172
|
+
for (const [uniqueId, property] of map) {
|
|
173
|
+
property.component?.onDestroy?.();
|
|
174
|
+
}
|
|
175
|
+
this.enablePoolMap.clear();
|
|
176
|
+
this.disablePoolMap.clear();
|
|
177
|
+
}
|
|
178
|
+
}
|
package/utils/FWQueue.ts
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export class FWQueue<T> {
|
|
2
|
+
private queue: T[];
|
|
3
|
+
constructor() {
|
|
4
|
+
this.queue = [];
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* 添加元素进入队列末尾
|
|
9
|
+
* @param element
|
|
10
|
+
*/
|
|
11
|
+
public add(element: T) {
|
|
12
|
+
this.queue.push(element);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* 删除并返回元素第一个元素
|
|
17
|
+
* */
|
|
18
|
+
public shift() {
|
|
19
|
+
return this.queue.shift();
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* 查看并返回元素第一个元素
|
|
24
|
+
* */
|
|
25
|
+
public peek() {
|
|
26
|
+
if (!this.isEmpty()) {
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
return this.queue[0];
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* 队列是否为空
|
|
34
|
+
* @returns
|
|
35
|
+
*/
|
|
36
|
+
public isEmpty() {
|
|
37
|
+
return this.size() == 0;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* 队列剩余数量
|
|
42
|
+
* @returns
|
|
43
|
+
*/
|
|
44
|
+
public size() {
|
|
45
|
+
return this.queue.length;
|
|
46
|
+
}
|
|
47
|
+
}
|