Merge feature/legacy-layer-migration: legacy-layer → Cocos prefab migration tool
- 12 plan tasks complete (readLayerXml, coord-calculator, group-builder, gameabc.min.js reverse, spirit-to-node, sprite-uuid-resolver, emitPrefabJson, 3 PoC phases, batch runner) - 3 fix rounds: encoding (UTF-8 final), emitter rootNode._children wiring, PoC 3 CLI bypass for sprite atlas dep - final fix wave: 3 Critical (Widget alignment, full readLayerXml fields, Label _string from XML Text) + 7 load-bearing Important fixes - 217/217 tests PASS Co-Authored-By: Claude Opus 5 (1M context> <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5 (1M context> <noreply@anthropic.com>
commit
5311780ad3
@@ -0,0 +1,442 @@
|
||||
[
|
||||
{
|
||||
"__type__": "cc.Prefab",
|
||||
"_name": "BackHall_Layer",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_native": "",
|
||||
"data": {
|
||||
"__id__": 1
|
||||
},
|
||||
"optimizationPolicy": 0,
|
||||
"persistent": false
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "BackHall_Layer",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": null,
|
||||
"_children": [
|
||||
{
|
||||
"__id__": 2
|
||||
}
|
||||
],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 17
|
||||
},
|
||||
{
|
||||
"__id__": 19
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 20
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1,
|
||||
"y": 1,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1073741824,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "group-55",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_children": [
|
||||
{
|
||||
"__id__": 3
|
||||
}
|
||||
],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 12
|
||||
},
|
||||
{
|
||||
"__id__": 14
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 15
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1,
|
||||
"y": 1,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1073741824,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "Spirit465",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 5
|
||||
},
|
||||
{
|
||||
"__id__": 7
|
||||
},
|
||||
{
|
||||
"__id__": 9
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 10
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 569.5,
|
||||
"y": 168.5,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1,
|
||||
"y": 1,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1073741824,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "lgvoSUemylfiHKFuWFPrqX"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 3
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 4
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 91,
|
||||
"height": 91
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "LUTmhhVpqmVn2kRVYdSgxQ"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.ProgressBar",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 3
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 6
|
||||
},
|
||||
"_customMaterial": null,
|
||||
"_srcBlendFactor": 2,
|
||||
"_dstBlendFactor": 4,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 255,
|
||||
"g": 255,
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_spriteFrame": {
|
||||
"__uuid__": "8e3905be-b629-4c4d-858b-b8a76e9f7752@f9941",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
"_type": 0,
|
||||
"_reverse": false,
|
||||
"_totalLength": 100,
|
||||
"_progress": 0,
|
||||
"_barSprite": null,
|
||||
"_mode": 0,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "rghHHiUfsTaKB6HqUSMPkz"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Widget",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 3
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 8
|
||||
},
|
||||
"_alignFlags": 24,
|
||||
"_target": null,
|
||||
"_left": 0,
|
||||
"_right": 0,
|
||||
"_top": 0,
|
||||
"_bottom": 0,
|
||||
"_horizontalCenter": 569.5,
|
||||
"_verticalCenter": 168.5,
|
||||
"_isAbsLeft": true,
|
||||
"_isAbsRight": true,
|
||||
"_isAbsTop": true,
|
||||
"_isAbsBottom": true,
|
||||
"_isAbsHorizontalCenter": true,
|
||||
"_isAbsVerticalCenter": true,
|
||||
"_originalWidth": 0,
|
||||
"_originalHeight": 0,
|
||||
"_alignMode": 2,
|
||||
"_lockFlags": 0,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "YEmQgvK5JPmp4C97yoIGyw",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "VTWhI5Krt1Tl1PaqyNMZon"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 11
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 1600,
|
||||
"height": 720
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "yL4foD2NoKexjcw320r6Zv"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Widget",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 13
|
||||
},
|
||||
"_alignFlags": 45,
|
||||
"_target": null,
|
||||
"_left": 0,
|
||||
"_right": 0,
|
||||
"_top": 0,
|
||||
"_bottom": 0,
|
||||
"_horizontalCenter": 0,
|
||||
"_verticalCenter": 0,
|
||||
"_isAbsLeft": true,
|
||||
"_isAbsRight": true,
|
||||
"_isAbsTop": true,
|
||||
"_isAbsBottom": true,
|
||||
"_isAbsHorizontalCenter": true,
|
||||
"_isAbsVerticalCenter": true,
|
||||
"_originalWidth": 0,
|
||||
"_originalHeight": 0,
|
||||
"_alignMode": 2,
|
||||
"_lockFlags": 0,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "YbZwuoc1Ik2eMvbYtIThrx",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "Oboy7HvfDZjdE4wduUnatv"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 16
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 1600,
|
||||
"height": 720
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "d57ausRj4Y5wkaGB3TmLhi"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Widget",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 18
|
||||
},
|
||||
"_alignFlags": 45,
|
||||
"_target": null,
|
||||
"_left": 0,
|
||||
"_right": 0,
|
||||
"_top": 0,
|
||||
"_bottom": 0,
|
||||
"_horizontalCenter": 0,
|
||||
"_verticalCenter": 0,
|
||||
"_isAbsLeft": true,
|
||||
"_isAbsRight": true,
|
||||
"_isAbsTop": true,
|
||||
"_isAbsBottom": true,
|
||||
"_isAbsHorizontalCenter": true,
|
||||
"_isAbsVerticalCenter": true,
|
||||
"_originalWidth": 0,
|
||||
"_originalHeight": 0,
|
||||
"_alignMode": 2,
|
||||
"_lockFlags": 0,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "9E4FREnUmy3G7q42HYy9QW",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
}
|
||||
]
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,828 @@
|
||||
[
|
||||
{
|
||||
"__type__": "cc.Prefab",
|
||||
"_name": "Kick_Layer",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_native": "",
|
||||
"data": {
|
||||
"__id__": 1
|
||||
},
|
||||
"optimizationPolicy": 0,
|
||||
"persistent": false
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "Kick_Layer",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": null,
|
||||
"_children": [
|
||||
{
|
||||
"__id__": 2
|
||||
}
|
||||
],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 33
|
||||
},
|
||||
{
|
||||
"__id__": 35
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 36
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1,
|
||||
"y": 1,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1073741824,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "group-33",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_children": [
|
||||
{
|
||||
"__id__": 3
|
||||
},
|
||||
{
|
||||
"__id__": 11
|
||||
},
|
||||
{
|
||||
"__id__": 19
|
||||
}
|
||||
],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 28
|
||||
},
|
||||
{
|
||||
"__id__": 30
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 31
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1,
|
||||
"y": 1,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1073741824,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "强制下线提示",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 5
|
||||
},
|
||||
{
|
||||
"__id__": 7
|
||||
},
|
||||
{
|
||||
"__id__": 9
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 10
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1,
|
||||
"y": 1,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1073741824,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "kE6LE7ZPngpEnTZDG56jD7"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 3
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 4
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 1280,
|
||||
"height": 720
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "oSQP3GSET4d28wsIcHNQc3"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Sprite",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 3
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 6
|
||||
},
|
||||
"_customMaterial": null,
|
||||
"_srcBlendFactor": 2,
|
||||
"_dstBlendFactor": 4,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 255,
|
||||
"g": 255,
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_spriteFrame": {
|
||||
"__uuid__": "eabf148a-fa6a-460a-be4f-8e586eb80e07@f9941",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
"_type": 0,
|
||||
"_fillType": 0,
|
||||
"_sizeMode": 0,
|
||||
"_fillCenter": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"_fillStart": 0,
|
||||
"_fillRange": 0,
|
||||
"_isTrimmedMode": true,
|
||||
"_useGrayscale": false,
|
||||
"_atlas": null,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "PvQKqEgyrqGIpVxldLH0dF"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Widget",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 3
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 8
|
||||
},
|
||||
"_alignFlags": 24,
|
||||
"_target": null,
|
||||
"_left": 0,
|
||||
"_right": 0,
|
||||
"_top": 0,
|
||||
"_bottom": 0,
|
||||
"_horizontalCenter": 0,
|
||||
"_verticalCenter": 0,
|
||||
"_isAbsLeft": true,
|
||||
"_isAbsRight": true,
|
||||
"_isAbsTop": true,
|
||||
"_isAbsBottom": true,
|
||||
"_isAbsHorizontalCenter": true,
|
||||
"_isAbsVerticalCenter": true,
|
||||
"_originalWidth": 0,
|
||||
"_originalHeight": 0,
|
||||
"_alignMode": 2,
|
||||
"_lockFlags": 0,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "UOL7tlMjiwPHxFhVuVIU1G",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "强制下线提示底",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 13
|
||||
},
|
||||
{
|
||||
"__id__": 15
|
||||
},
|
||||
{
|
||||
"__id__": 17
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 18
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": -1,
|
||||
"y": 15.5,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1,
|
||||
"y": 1,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1073741824,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "hI59LMXSIgnC3dATfcasVw"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 11
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 12
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 600,
|
||||
"height": 105
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "VIjQgaWrTQvUZQTQn04wBA"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Sprite",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 11
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 14
|
||||
},
|
||||
"_customMaterial": null,
|
||||
"_srcBlendFactor": 2,
|
||||
"_dstBlendFactor": 4,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 255,
|
||||
"g": 255,
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_spriteFrame": {
|
||||
"__uuid__": "c6295419-a30e-4e88-b7d7-d4099114319d@f9941",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
"_type": 0,
|
||||
"_fillType": 0,
|
||||
"_sizeMode": 0,
|
||||
"_fillCenter": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"_fillStart": 0,
|
||||
"_fillRange": 0,
|
||||
"_isTrimmedMode": true,
|
||||
"_useGrayscale": false,
|
||||
"_atlas": null,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "6GTM8rYIooqs41rRqOfoGc"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Widget",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 11
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 16
|
||||
},
|
||||
"_alignFlags": 24,
|
||||
"_target": null,
|
||||
"_left": 0,
|
||||
"_right": 0,
|
||||
"_top": 0,
|
||||
"_bottom": 0,
|
||||
"_horizontalCenter": -1,
|
||||
"_verticalCenter": 15.5,
|
||||
"_isAbsLeft": true,
|
||||
"_isAbsRight": true,
|
||||
"_isAbsTop": true,
|
||||
"_isAbsBottom": true,
|
||||
"_isAbsHorizontalCenter": true,
|
||||
"_isAbsVerticalCenter": true,
|
||||
"_originalWidth": 0,
|
||||
"_originalHeight": 0,
|
||||
"_alignMode": 2,
|
||||
"_lockFlags": 0,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "wUFYQuewcIysSKXSSLXJIT",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "强制退出提示文字",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 21
|
||||
},
|
||||
{
|
||||
"__id__": 23
|
||||
},
|
||||
{
|
||||
"__id__": 25
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 26
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": -18,
|
||||
"y": 16,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1,
|
||||
"y": 1,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1073741824,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "KIzyOmPUHM7PJQZRfbStvp"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 19
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 20
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 168,
|
||||
"height": 28
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "D6OsEVypgMO97M6JZyvK3m"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Label",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 19
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 22
|
||||
},
|
||||
"_customMaterial": null,
|
||||
"_srcBlendFactor": 2,
|
||||
"_dstBlendFactor": 4,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 255,
|
||||
"g": 255,
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_string": "强制退出提示文字",
|
||||
"_horizontalAlign": 1,
|
||||
"_verticalAlign": 1,
|
||||
"_actualFontSize": 40,
|
||||
"_fontSize": 40,
|
||||
"_fontFamily": "Arial",
|
||||
"_lineHeight": 40,
|
||||
"_overflow": 0,
|
||||
"_enableWrapText": true,
|
||||
"_font": null,
|
||||
"_isSystemFontUsed": true,
|
||||
"_spacingX": 0,
|
||||
"_isItalic": false,
|
||||
"_isBold": false,
|
||||
"_isUnderline": false,
|
||||
"_underlineHeight": 2,
|
||||
"_cacheMode": 0,
|
||||
"_enableOutline": false,
|
||||
"_outlineColor": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 0,
|
||||
"g": 0,
|
||||
"b": 0,
|
||||
"a": 255
|
||||
},
|
||||
"_outlineWidth": 2,
|
||||
"_enableShadow": false,
|
||||
"_shadowColor": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 0,
|
||||
"g": 0,
|
||||
"b": 0,
|
||||
"a": 255
|
||||
},
|
||||
"_shadowOffset": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 2,
|
||||
"y": 2
|
||||
},
|
||||
"_shadowBlur": 2,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "t4axDsffNbZYDEKWhffiOq"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Widget",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 19
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 24
|
||||
},
|
||||
"_alignFlags": 24,
|
||||
"_target": null,
|
||||
"_left": 0,
|
||||
"_right": 0,
|
||||
"_top": 0,
|
||||
"_bottom": 0,
|
||||
"_horizontalCenter": -18,
|
||||
"_verticalCenter": 16,
|
||||
"_isAbsLeft": true,
|
||||
"_isAbsRight": true,
|
||||
"_isAbsTop": true,
|
||||
"_isAbsBottom": true,
|
||||
"_isAbsHorizontalCenter": true,
|
||||
"_isAbsVerticalCenter": true,
|
||||
"_originalWidth": 0,
|
||||
"_originalHeight": 0,
|
||||
"_alignMode": 2,
|
||||
"_lockFlags": 0,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "uPd70tPS9q3q5mFmmNiHfU",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "fK5DGde6yegBQW88QWoEmP"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 27
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 1600,
|
||||
"height": 720
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "3GYFqKOFRiYD4fZuXCm8YA"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Widget",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 29
|
||||
},
|
||||
"_alignFlags": 45,
|
||||
"_target": null,
|
||||
"_left": 0,
|
||||
"_right": 0,
|
||||
"_top": 0,
|
||||
"_bottom": 0,
|
||||
"_horizontalCenter": 0,
|
||||
"_verticalCenter": 0,
|
||||
"_isAbsLeft": true,
|
||||
"_isAbsRight": true,
|
||||
"_isAbsTop": true,
|
||||
"_isAbsBottom": true,
|
||||
"_isAbsHorizontalCenter": true,
|
||||
"_isAbsVerticalCenter": true,
|
||||
"_originalWidth": 0,
|
||||
"_originalHeight": 0,
|
||||
"_alignMode": 2,
|
||||
"_lockFlags": 0,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "txcDTI6tYUpR526yfdOOud",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "mshy5g4OCtb7bYwiOM5jAe"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 32
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 1600,
|
||||
"height": 720
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "rzopmrTi01pnv3jRtmsHuW"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Widget",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 34
|
||||
},
|
||||
"_alignFlags": 45,
|
||||
"_target": null,
|
||||
"_left": 0,
|
||||
"_right": 0,
|
||||
"_top": 0,
|
||||
"_bottom": 0,
|
||||
"_horizontalCenter": 0,
|
||||
"_verticalCenter": 0,
|
||||
"_isAbsLeft": true,
|
||||
"_isAbsRight": true,
|
||||
"_isAbsTop": true,
|
||||
"_isAbsBottom": true,
|
||||
"_isAbsHorizontalCenter": true,
|
||||
"_isAbsVerticalCenter": true,
|
||||
"_originalWidth": 0,
|
||||
"_originalHeight": 0,
|
||||
"_alignMode": 2,
|
||||
"_lockFlags": 0,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "xr6Zow5iZKERVkXgcRIPxb",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,861 @@
|
||||
--- G:\Works\YouleGamesCocosCreator\cocoscreator_projects/YouleNexus/assets/framework/ui/prefabs/widgets/Layer616_Kick.prefab 2026-09-01 01:11:28.314999200 +0800
|
||||
+++ G:\Works\YouleGamesCocosCreator\cocoscreator_projects\YouleNexus\out\legacy-migration\Kick_Layer.prefab 2026-09-02 08:44:24.283501400 +0800
|
||||
@@ -1,7 +1,7 @@
|
||||
[
|
||||
{
|
||||
"__type__": "cc.Prefab",
|
||||
- "_name": "Layer616_Kick",
|
||||
+ "_name": "Kick_Layer",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_native": "",
|
||||
@@ -13,29 +13,26 @@
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
- "_name": "Layer616_Kick",
|
||||
+ "_name": "Kick_Layer",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": null,
|
||||
"_children": [
|
||||
{
|
||||
"__id__": 2
|
||||
- },
|
||||
- {
|
||||
- "__id__": 3
|
||||
- },
|
||||
- {
|
||||
- "__id__": 4
|
||||
}
|
||||
],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
- "__id__": 24
|
||||
+ "__id__": 33
|
||||
+ },
|
||||
+ {
|
||||
+ "__id__": 35
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
- "__id__": 26
|
||||
+ "__id__": 36
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
@@ -47,7 +44,8 @@
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
- "z": 0
|
||||
+ "z": 0,
|
||||
+ "w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
@@ -67,27 +65,34 @@
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
- "_name": "Mask",
|
||||
+ "_name": "group-33",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
"__id__": 1
|
||||
},
|
||||
- "_children": [],
|
||||
- "_active": true,
|
||||
- "_components": [
|
||||
+ "_children": [
|
||||
{
|
||||
- "__id__": 5
|
||||
+ "__id__": 3
|
||||
},
|
||||
{
|
||||
- "__id__": 7
|
||||
+ "__id__": 11
|
||||
},
|
||||
{
|
||||
- "__id__": 9
|
||||
+ "__id__": 19
|
||||
+ }
|
||||
+ ],
|
||||
+ "_active": true,
|
||||
+ "_components": [
|
||||
+ {
|
||||
+ "__id__": 28
|
||||
+ },
|
||||
+ {
|
||||
+ "__id__": 30
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
- "__id__": 11
|
||||
+ "__id__": 31
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
@@ -99,7 +104,8 @@
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
- "z": 0
|
||||
+ "z": 0,
|
||||
+ "w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
@@ -119,27 +125,27 @@
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
- "_name": "Box",
|
||||
+ "_name": "强制下线提示",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
- "__id__": 1
|
||||
+ "__id__": 2
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
- "__id__": 12
|
||||
+ "__id__": 5
|
||||
},
|
||||
{
|
||||
- "__id__": 14
|
||||
+ "__id__": 7
|
||||
},
|
||||
{
|
||||
- "__id__": 16
|
||||
+ "__id__": 9
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
- "__id__": 18
|
||||
+ "__id__": 10
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
@@ -151,7 +157,8 @@
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
- "z": 0
|
||||
+ "z": 0,
|
||||
+ "w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
@@ -170,37 +177,163 @@
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
+ "__type__": "cc.CompPrefabInfo",
|
||||
+ "fileId": "kE6LE7ZPngpEnTZDG56jD7"
|
||||
+ },
|
||||
+ {
|
||||
+ "__type__": "cc.UITransform",
|
||||
+ "_name": "",
|
||||
+ "_objFlags": 0,
|
||||
+ "__editorExtras__": {},
|
||||
+ "node": {
|
||||
+ "__id__": 3
|
||||
+ },
|
||||
+ "_enabled": true,
|
||||
+ "__prefab": {
|
||||
+ "__id__": 4
|
||||
+ },
|
||||
+ "_contentSize": {
|
||||
+ "__type__": "cc.Size",
|
||||
+ "width": 1280,
|
||||
+ "height": 720
|
||||
+ },
|
||||
+ "_anchorPoint": {
|
||||
+ "__type__": "cc.Vec2",
|
||||
+ "x": 0.5,
|
||||
+ "y": 0.5
|
||||
+ },
|
||||
+ "_id": ""
|
||||
+ },
|
||||
+ {
|
||||
+ "__type__": "cc.CompPrefabInfo",
|
||||
+ "fileId": "oSQP3GSET4d28wsIcHNQc3"
|
||||
+ },
|
||||
+ {
|
||||
+ "__type__": "cc.Sprite",
|
||||
+ "_name": "",
|
||||
+ "_objFlags": 0,
|
||||
+ "__editorExtras__": {},
|
||||
+ "node": {
|
||||
+ "__id__": 3
|
||||
+ },
|
||||
+ "_enabled": true,
|
||||
+ "__prefab": {
|
||||
+ "__id__": 6
|
||||
+ },
|
||||
+ "_customMaterial": null,
|
||||
+ "_srcBlendFactor": 2,
|
||||
+ "_dstBlendFactor": 4,
|
||||
+ "_color": {
|
||||
+ "__type__": "cc.Color",
|
||||
+ "r": 255,
|
||||
+ "g": 255,
|
||||
+ "b": 255,
|
||||
+ "a": 255
|
||||
+ },
|
||||
+ "_spriteFrame": {
|
||||
+ "__uuid__": "eabf148a-fa6a-460a-be4f-8e586eb80e07@f9941",
|
||||
+ "__expectedType__": "cc.SpriteFrame"
|
||||
+ },
|
||||
+ "_type": 0,
|
||||
+ "_fillType": 0,
|
||||
+ "_sizeMode": 0,
|
||||
+ "_fillCenter": {
|
||||
+ "__type__": "cc.Vec2",
|
||||
+ "x": 0,
|
||||
+ "y": 0
|
||||
+ },
|
||||
+ "_fillStart": 0,
|
||||
+ "_fillRange": 0,
|
||||
+ "_isTrimmedMode": true,
|
||||
+ "_useGrayscale": false,
|
||||
+ "_atlas": null,
|
||||
+ "_id": ""
|
||||
+ },
|
||||
+ {
|
||||
+ "__type__": "cc.CompPrefabInfo",
|
||||
+ "fileId": "PvQKqEgyrqGIpVxldLH0dF"
|
||||
+ },
|
||||
+ {
|
||||
+ "__type__": "cc.Widget",
|
||||
+ "_name": "",
|
||||
+ "_objFlags": 0,
|
||||
+ "__editorExtras__": {},
|
||||
+ "node": {
|
||||
+ "__id__": 3
|
||||
+ },
|
||||
+ "_enabled": true,
|
||||
+ "__prefab": {
|
||||
+ "__id__": 8
|
||||
+ },
|
||||
+ "_alignFlags": 24,
|
||||
+ "_target": null,
|
||||
+ "_left": 0,
|
||||
+ "_right": 0,
|
||||
+ "_top": 0,
|
||||
+ "_bottom": 0,
|
||||
+ "_horizontalCenter": 0,
|
||||
+ "_verticalCenter": 0,
|
||||
+ "_isAbsLeft": true,
|
||||
+ "_isAbsRight": true,
|
||||
+ "_isAbsTop": true,
|
||||
+ "_isAbsBottom": true,
|
||||
+ "_isAbsHorizontalCenter": true,
|
||||
+ "_isAbsVerticalCenter": true,
|
||||
+ "_originalWidth": 0,
|
||||
+ "_originalHeight": 0,
|
||||
+ "_alignMode": 2,
|
||||
+ "_lockFlags": 0,
|
||||
+ "_id": ""
|
||||
+ },
|
||||
+ {
|
||||
+ "__type__": "cc.PrefabInfo",
|
||||
+ "root": {
|
||||
+ "__id__": 1
|
||||
+ },
|
||||
+ "asset": {
|
||||
+ "__id__": 0
|
||||
+ },
|
||||
+ "fileId": "UOL7tlMjiwPHxFhVuVIU1G",
|
||||
+ "instance": null,
|
||||
+ "targetOverrides": null,
|
||||
+ "nestedPrefabInstanceRoots": null
|
||||
+ },
|
||||
+ {
|
||||
"__type__": "cc.Node",
|
||||
- "_name": "Msg",
|
||||
+ "_name": "强制下线提示底",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
- "__id__": 1
|
||||
+ "__id__": 2
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
- "__id__": 19
|
||||
+ "__id__": 13
|
||||
},
|
||||
{
|
||||
- "__id__": 21
|
||||
+ "__id__": 15
|
||||
+ },
|
||||
+ {
|
||||
+ "__id__": 17
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
- "__id__": 23
|
||||
+ "__id__": 18
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
- "x": 0,
|
||||
- "y": 0,
|
||||
+ "x": -1,
|
||||
+ "y": 15.5,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
- "z": 0
|
||||
+ "z": 0,
|
||||
+ "w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
@@ -219,21 +352,25 @@
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
+ "__type__": "cc.CompPrefabInfo",
|
||||
+ "fileId": "hI59LMXSIgnC3dATfcasVw"
|
||||
+ },
|
||||
+ {
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
- "__id__": 2
|
||||
+ "__id__": 11
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
- "__id__": 6
|
||||
+ "__id__": 12
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
- "width": 1600,
|
||||
- "height": 720
|
||||
+ "width": 600,
|
||||
+ "height": 105
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
@@ -244,7 +381,7 @@
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
- "fileId": "bBb5QPSRmbkcpVh/HLrKk2"
|
||||
+ "fileId": "VIjQgaWrTQvUZQTQn04wBA"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Sprite",
|
||||
@@ -252,15 +389,11 @@
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
- "__id__": 2
|
||||
+ "__id__": 11
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
- "__id__": 8
|
||||
- },
|
||||
- "_spriteFrame": {
|
||||
- "__uuid__": "dcc4530b-344b-40b6-8fbb-9fa35db6a289@f9941",
|
||||
- "__expectedType__": "cc.SpriteFrame"
|
||||
+ "__id__": 14
|
||||
},
|
||||
"_customMaterial": null,
|
||||
"_srcBlendFactor": 2,
|
||||
@@ -272,7 +405,11 @@
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
- "_type": 1,
|
||||
+ "_spriteFrame": {
|
||||
+ "__uuid__": "c6295419-a30e-4e88-b7d7-d4099114319d@f9941",
|
||||
+ "__expectedType__": "cc.SpriteFrame"
|
||||
+ },
|
||||
+ "_type": 0,
|
||||
"_fillType": 0,
|
||||
"_sizeMode": 0,
|
||||
"_fillCenter": {
|
||||
@@ -289,29 +426,41 @@
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
- "fileId": "bAOCAOHuOZ7UL4HQIcuQo7"
|
||||
+ "fileId": "6GTM8rYIooqs41rRqOfoGc"
|
||||
},
|
||||
{
|
||||
- "__type__": "cc.UIOpacity",
|
||||
+ "__type__": "cc.Widget",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
- "__id__": 2
|
||||
+ "__id__": 11
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
- "__id__": 10
|
||||
+ "__id__": 16
|
||||
},
|
||||
- "opacity": 150,
|
||||
- "_opacity": 150,
|
||||
+ "_alignFlags": 24,
|
||||
+ "_target": null,
|
||||
+ "_left": 0,
|
||||
+ "_right": 0,
|
||||
+ "_top": 0,
|
||||
+ "_bottom": 0,
|
||||
+ "_horizontalCenter": -1,
|
||||
+ "_verticalCenter": 15.5,
|
||||
+ "_isAbsLeft": true,
|
||||
+ "_isAbsRight": true,
|
||||
+ "_isAbsTop": true,
|
||||
+ "_isAbsBottom": true,
|
||||
+ "_isAbsHorizontalCenter": true,
|
||||
+ "_isAbsVerticalCenter": true,
|
||||
+ "_originalWidth": 0,
|
||||
+ "_originalHeight": 0,
|
||||
+ "_alignMode": 2,
|
||||
+ "_lockFlags": 0,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
- "__type__": "cc.CompPrefabInfo",
|
||||
- "fileId": "J0efIPX8OPItJEWTIWsRSW"
|
||||
- },
|
||||
- {
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
@@ -319,27 +468,84 @@
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
- "fileId": "4fJaVX8EdBlL3G7d1LQDCQ",
|
||||
+ "fileId": "wUFYQuewcIysSKXSSLXJIT",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
+ "__type__": "cc.Node",
|
||||
+ "_name": "强制退出提示文字",
|
||||
+ "_objFlags": 0,
|
||||
+ "__editorExtras__": {},
|
||||
+ "_parent": {
|
||||
+ "__id__": 2
|
||||
+ },
|
||||
+ "_children": [],
|
||||
+ "_active": true,
|
||||
+ "_components": [
|
||||
+ {
|
||||
+ "__id__": 21
|
||||
+ },
|
||||
+ {
|
||||
+ "__id__": 23
|
||||
+ },
|
||||
+ {
|
||||
+ "__id__": 25
|
||||
+ }
|
||||
+ ],
|
||||
+ "_prefab": {
|
||||
+ "__id__": 26
|
||||
+ },
|
||||
+ "_lpos": {
|
||||
+ "__type__": "cc.Vec3",
|
||||
+ "x": -18,
|
||||
+ "y": 16,
|
||||
+ "z": 0
|
||||
+ },
|
||||
+ "_lrot": {
|
||||
+ "__type__": "cc.Quat",
|
||||
+ "x": 0,
|
||||
+ "y": 0,
|
||||
+ "z": 0,
|
||||
+ "w": 1
|
||||
+ },
|
||||
+ "_lscale": {
|
||||
+ "__type__": "cc.Vec3",
|
||||
+ "x": 1,
|
||||
+ "y": 1,
|
||||
+ "z": 1
|
||||
+ },
|
||||
+ "_mobility": 0,
|
||||
+ "_layer": 1073741824,
|
||||
+ "_euler": {
|
||||
+ "__type__": "cc.Vec3",
|
||||
+ "x": 0,
|
||||
+ "y": 0,
|
||||
+ "z": 0
|
||||
+ },
|
||||
+ "_id": ""
|
||||
+ },
|
||||
+ {
|
||||
+ "__type__": "cc.CompPrefabInfo",
|
||||
+ "fileId": "KIzyOmPUHM7PJQZRfbStvp"
|
||||
+ },
|
||||
+ {
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
- "__id__": 3
|
||||
+ "__id__": 19
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
- "__id__": 13
|
||||
+ "__id__": 20
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
- "width": 600,
|
||||
- "height": 200
|
||||
+ "width": 168,
|
||||
+ "height": 28
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
@@ -350,23 +556,19 @@
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
- "fileId": "6vSKYsu+DYw1OVxhZaYhSC"
|
||||
+ "fileId": "D6OsEVypgMO97M6JZyvK3m"
|
||||
},
|
||||
{
|
||||
- "__type__": "cc.Sprite",
|
||||
+ "__type__": "cc.Label",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
- "__id__": 3
|
||||
+ "__id__": 19
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
- "__id__": 15
|
||||
- },
|
||||
- "_spriteFrame": {
|
||||
- "__uuid__": "dcc4530b-344b-40b6-8fbb-9fa35db6a289@f9941",
|
||||
- "__expectedType__": "cc.SpriteFrame"
|
||||
+ "__id__": 22
|
||||
},
|
||||
"_customMaterial": null,
|
||||
"_srcBlendFactor": 2,
|
||||
@@ -378,46 +580,85 @@
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
- "_type": 1,
|
||||
- "_fillType": 0,
|
||||
- "_sizeMode": 0,
|
||||
- "_fillCenter": {
|
||||
+ "_string": "强制退出提示文字",
|
||||
+ "_horizontalAlign": 1,
|
||||
+ "_verticalAlign": 1,
|
||||
+ "_actualFontSize": 40,
|
||||
+ "_fontSize": 40,
|
||||
+ "_fontFamily": "Arial",
|
||||
+ "_lineHeight": 40,
|
||||
+ "_overflow": 0,
|
||||
+ "_enableWrapText": true,
|
||||
+ "_font": null,
|
||||
+ "_isSystemFontUsed": true,
|
||||
+ "_spacingX": 0,
|
||||
+ "_isItalic": false,
|
||||
+ "_isBold": false,
|
||||
+ "_isUnderline": false,
|
||||
+ "_underlineHeight": 2,
|
||||
+ "_cacheMode": 0,
|
||||
+ "_enableOutline": false,
|
||||
+ "_outlineColor": {
|
||||
+ "__type__": "cc.Color",
|
||||
+ "r": 0,
|
||||
+ "g": 0,
|
||||
+ "b": 0,
|
||||
+ "a": 255
|
||||
+ },
|
||||
+ "_outlineWidth": 2,
|
||||
+ "_enableShadow": false,
|
||||
+ "_shadowColor": {
|
||||
+ "__type__": "cc.Color",
|
||||
+ "r": 0,
|
||||
+ "g": 0,
|
||||
+ "b": 0,
|
||||
+ "a": 255
|
||||
+ },
|
||||
+ "_shadowOffset": {
|
||||
"__type__": "cc.Vec2",
|
||||
- "x": 0,
|
||||
- "y": 0
|
||||
+ "x": 2,
|
||||
+ "y": 2
|
||||
},
|
||||
- "_fillStart": 0,
|
||||
- "_fillRange": 0,
|
||||
- "_isTrimmedMode": true,
|
||||
- "_useGrayscale": false,
|
||||
- "_atlas": null,
|
||||
+ "_shadowBlur": 2,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
- "fileId": "NTBEIOWNmXik82bAKGk4sy"
|
||||
+ "fileId": "t4axDsffNbZYDEKWhffiOq"
|
||||
},
|
||||
{
|
||||
- "__type__": "cc.UIOpacity",
|
||||
+ "__type__": "cc.Widget",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
- "__id__": 3
|
||||
+ "__id__": 19
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
- "__id__": 17
|
||||
+ "__id__": 24
|
||||
},
|
||||
- "opacity": 250,
|
||||
- "_opacity": 250,
|
||||
+ "_alignFlags": 24,
|
||||
+ "_target": null,
|
||||
+ "_left": 0,
|
||||
+ "_right": 0,
|
||||
+ "_top": 0,
|
||||
+ "_bottom": 0,
|
||||
+ "_horizontalCenter": -18,
|
||||
+ "_verticalCenter": 16,
|
||||
+ "_isAbsLeft": true,
|
||||
+ "_isAbsRight": true,
|
||||
+ "_isAbsTop": true,
|
||||
+ "_isAbsBottom": true,
|
||||
+ "_isAbsHorizontalCenter": true,
|
||||
+ "_isAbsVerticalCenter": true,
|
||||
+ "_originalWidth": 0,
|
||||
+ "_originalHeight": 0,
|
||||
+ "_alignMode": 2,
|
||||
+ "_lockFlags": 0,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
- "__type__": "cc.CompPrefabInfo",
|
||||
- "fileId": "iXFqu9yKYKH7L+F/dZuJ0b"
|
||||
- },
|
||||
- {
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
@@ -425,27 +666,31 @@
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
- "fileId": "97a9f40J1Gh40RhIYRVA35",
|
||||
+ "fileId": "uPd70tPS9q3q5mFmmNiHfU",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
+ "__type__": "cc.CompPrefabInfo",
|
||||
+ "fileId": "fK5DGde6yegBQW88QWoEmP"
|
||||
+ },
|
||||
+ {
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
- "__id__": 4
|
||||
+ "__id__": 2
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
- "__id__": 20
|
||||
+ "__id__": 27
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
- "width": 280,
|
||||
- "height": 50.4
|
||||
+ "width": 1600,
|
||||
+ "height": 720
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
@@ -456,44 +701,41 @@
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
- "fileId": "nAFjHNSUZqSyelXg05IxLd"
|
||||
+ "fileId": "3GYFqKOFRiYD4fZuXCm8YA"
|
||||
},
|
||||
{
|
||||
- "__type__": "cc.Label",
|
||||
+ "__type__": "cc.Widget",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
- "__id__": 4
|
||||
+ "__id__": 2
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
- "__id__": 22
|
||||
+ "__id__": 29
|
||||
},
|
||||
- "_string": "您已被强制下线",
|
||||
- "_horizontalAlign": 1,
|
||||
- "_verticalAlign": 1,
|
||||
- "_actualFontSize": 40,
|
||||
- "_fontSize": 40,
|
||||
- "_fontFamily": "Arial",
|
||||
- "_lineHeight": 40,
|
||||
- "_overflow": 0,
|
||||
- "_enableWrapText": true,
|
||||
- "_font": null,
|
||||
- "_isSystemFontUsed": true,
|
||||
- "_spacingX": 0,
|
||||
- "_isItalic": false,
|
||||
- "_isBold": false,
|
||||
- "_isUnderline": false,
|
||||
- "_underlineHeight": 2,
|
||||
- "_cacheMode": 0,
|
||||
+ "_alignFlags": 45,
|
||||
+ "_target": null,
|
||||
+ "_left": 0,
|
||||
+ "_right": 0,
|
||||
+ "_top": 0,
|
||||
+ "_bottom": 0,
|
||||
+ "_horizontalCenter": 0,
|
||||
+ "_verticalCenter": 0,
|
||||
+ "_isAbsLeft": true,
|
||||
+ "_isAbsRight": true,
|
||||
+ "_isAbsTop": true,
|
||||
+ "_isAbsBottom": true,
|
||||
+ "_isAbsHorizontalCenter": true,
|
||||
+ "_isAbsVerticalCenter": true,
|
||||
+ "_originalWidth": 0,
|
||||
+ "_originalHeight": 0,
|
||||
+ "_alignMode": 2,
|
||||
+ "_lockFlags": 0,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
- "__type__": "cc.CompPrefabInfo",
|
||||
- "fileId": "M8ypsgiFN+6gf54xg4JfdF"
|
||||
- },
|
||||
- {
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
@@ -501,12 +743,16 @@
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
- "fileId": "819z+amLtH565kLKEADSYS",
|
||||
+ "fileId": "txcDTI6tYUpR526yfdOOud",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
+ "__type__": "cc.CompPrefabInfo",
|
||||
+ "fileId": "mshy5g4OCtb7bYwiOM5jAe"
|
||||
+ },
|
||||
+ {
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
@@ -516,12 +762,12 @@
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
- "__id__": 25
|
||||
+ "__id__": 32
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
- "width": 100,
|
||||
- "height": 100
|
||||
+ "width": 1600,
|
||||
+ "height": 720
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
@@ -532,7 +778,39 @@
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
- "fileId": "B2tbLLIneq/VDdGVPFWXyZ"
|
||||
+ "fileId": "rzopmrTi01pnv3jRtmsHuW"
|
||||
+ },
|
||||
+ {
|
||||
+ "__type__": "cc.Widget",
|
||||
+ "_name": "",
|
||||
+ "_objFlags": 0,
|
||||
+ "__editorExtras__": {},
|
||||
+ "node": {
|
||||
+ "__id__": 1
|
||||
+ },
|
||||
+ "_enabled": true,
|
||||
+ "__prefab": {
|
||||
+ "__id__": 34
|
||||
+ },
|
||||
+ "_alignFlags": 45,
|
||||
+ "_target": null,
|
||||
+ "_left": 0,
|
||||
+ "_right": 0,
|
||||
+ "_top": 0,
|
||||
+ "_bottom": 0,
|
||||
+ "_horizontalCenter": 0,
|
||||
+ "_verticalCenter": 0,
|
||||
+ "_isAbsLeft": true,
|
||||
+ "_isAbsRight": true,
|
||||
+ "_isAbsTop": true,
|
||||
+ "_isAbsBottom": true,
|
||||
+ "_isAbsHorizontalCenter": true,
|
||||
+ "_isAbsVerticalCenter": true,
|
||||
+ "_originalWidth": 0,
|
||||
+ "_originalHeight": 0,
|
||||
+ "_alignMode": 2,
|
||||
+ "_lockFlags": 0,
|
||||
+ "_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
@@ -542,7 +820,7 @@
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
- "fileId": "61vgTSReVFa4iBg6sp/GTw",
|
||||
+ "fileId": "xr6Zow5iZKERVkXgcRIPxb",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
@@ -0,0 +1,620 @@
|
||||
[
|
||||
{
|
||||
"__type__": "cc.Prefab",
|
||||
"_name": "Loading_Layer",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_native": "",
|
||||
"data": {
|
||||
"__id__": 1
|
||||
},
|
||||
"optimizationPolicy": 0,
|
||||
"persistent": false
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "Loading_Layer",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": null,
|
||||
"_children": [
|
||||
{
|
||||
"__id__": 2
|
||||
}
|
||||
],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 25
|
||||
},
|
||||
{
|
||||
"__id__": 27
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 28
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1,
|
||||
"y": 1,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1073741824,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "group-40",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_children": [
|
||||
{
|
||||
"__id__": 3
|
||||
},
|
||||
{
|
||||
"__id__": 11
|
||||
}
|
||||
],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 20
|
||||
},
|
||||
{
|
||||
"__id__": 22
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 23
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1,
|
||||
"y": 1,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1073741824,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "载入遮罩",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 5
|
||||
},
|
||||
{
|
||||
"__id__": 7
|
||||
},
|
||||
{
|
||||
"__id__": 9
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 10
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1,
|
||||
"y": 1,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1073741824,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "bgFPcCvdzkbU3cRwe0igV9"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 3
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 4
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 1280,
|
||||
"height": 720
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "px6CUAi7AxxBT9r4T72wlz"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Sprite",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 3
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 6
|
||||
},
|
||||
"_customMaterial": null,
|
||||
"_srcBlendFactor": 2,
|
||||
"_dstBlendFactor": 4,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 255,
|
||||
"g": 255,
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_spriteFrame": {
|
||||
"__uuid__": "eabf148a-fa6a-460a-be4f-8e586eb80e07@f9941",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
"_type": 0,
|
||||
"_fillType": 0,
|
||||
"_sizeMode": 0,
|
||||
"_fillCenter": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"_fillStart": 0,
|
||||
"_fillRange": 0,
|
||||
"_isTrimmedMode": true,
|
||||
"_useGrayscale": false,
|
||||
"_atlas": null,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "scizfUwnRjMB2wvcHYH3hR"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Widget",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 3
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 8
|
||||
},
|
||||
"_alignFlags": 24,
|
||||
"_target": null,
|
||||
"_left": 0,
|
||||
"_right": 0,
|
||||
"_top": 0,
|
||||
"_bottom": 0,
|
||||
"_horizontalCenter": 0,
|
||||
"_verticalCenter": 0,
|
||||
"_isAbsLeft": true,
|
||||
"_isAbsRight": true,
|
||||
"_isAbsTop": true,
|
||||
"_isAbsBottom": true,
|
||||
"_isAbsHorizontalCenter": true,
|
||||
"_isAbsVerticalCenter": true,
|
||||
"_originalWidth": 0,
|
||||
"_originalHeight": 0,
|
||||
"_alignMode": 2,
|
||||
"_lockFlags": 0,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "UqFWnxTk8gOS4YSF8p7vTm",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "载入动画",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 13
|
||||
},
|
||||
{
|
||||
"__id__": 15
|
||||
},
|
||||
{
|
||||
"__id__": 17
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 18
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1,
|
||||
"y": 1,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1073741824,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "cobDdbjKZsDYlww88xCcaN"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 11
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 12
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 150,
|
||||
"height": 150
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "6qVhLJigTx9qcXqyATGSrT"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.ProgressBar",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 11
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 14
|
||||
},
|
||||
"_customMaterial": null,
|
||||
"_srcBlendFactor": 2,
|
||||
"_dstBlendFactor": 4,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 255,
|
||||
"g": 255,
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_spriteFrame": {
|
||||
"__uuid__": "e966950a-fe3c-41d9-adcb-b8950fb77ae1@f9941",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
"_type": 0,
|
||||
"_reverse": false,
|
||||
"_totalLength": 100,
|
||||
"_progress": 0,
|
||||
"_barSprite": null,
|
||||
"_mode": 0,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "wGre0V28x5HhNIL7mAKpIn"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Widget",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 11
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 16
|
||||
},
|
||||
"_alignFlags": 24,
|
||||
"_target": null,
|
||||
"_left": 0,
|
||||
"_right": 0,
|
||||
"_top": 0,
|
||||
"_bottom": 0,
|
||||
"_horizontalCenter": 0,
|
||||
"_verticalCenter": 0,
|
||||
"_isAbsLeft": true,
|
||||
"_isAbsRight": true,
|
||||
"_isAbsTop": true,
|
||||
"_isAbsBottom": true,
|
||||
"_isAbsHorizontalCenter": true,
|
||||
"_isAbsVerticalCenter": true,
|
||||
"_originalWidth": 0,
|
||||
"_originalHeight": 0,
|
||||
"_alignMode": 2,
|
||||
"_lockFlags": 0,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "3Uy5rHQp3avv1lNfD7X2vf",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "vx2PuAMjkkW5FPA3mZSK4L"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 19
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 1600,
|
||||
"height": 720
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "fFXF7iGboTzCtU3S4Dc1MU"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Widget",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 21
|
||||
},
|
||||
"_alignFlags": 45,
|
||||
"_target": null,
|
||||
"_left": 0,
|
||||
"_right": 0,
|
||||
"_top": 0,
|
||||
"_bottom": 0,
|
||||
"_horizontalCenter": 0,
|
||||
"_verticalCenter": 0,
|
||||
"_isAbsLeft": true,
|
||||
"_isAbsRight": true,
|
||||
"_isAbsTop": true,
|
||||
"_isAbsBottom": true,
|
||||
"_isAbsHorizontalCenter": true,
|
||||
"_isAbsVerticalCenter": true,
|
||||
"_originalWidth": 0,
|
||||
"_originalHeight": 0,
|
||||
"_alignMode": 2,
|
||||
"_lockFlags": 0,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "5WeBAyT302zJ9aNOkTg7NR",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "lP9iaJKVN8EdQqyVTQvy9a"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 24
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 1600,
|
||||
"height": 720
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "gngVZAms0UeFVhJysk9GUc"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Widget",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 26
|
||||
},
|
||||
"_alignFlags": 45,
|
||||
"_target": null,
|
||||
"_left": 0,
|
||||
"_right": 0,
|
||||
"_top": 0,
|
||||
"_bottom": 0,
|
||||
"_horizontalCenter": 0,
|
||||
"_verticalCenter": 0,
|
||||
"_isAbsLeft": true,
|
||||
"_isAbsRight": true,
|
||||
"_isAbsTop": true,
|
||||
"_isAbsBottom": true,
|
||||
"_isAbsHorizontalCenter": true,
|
||||
"_isAbsVerticalCenter": true,
|
||||
"_originalWidth": 0,
|
||||
"_originalHeight": 0,
|
||||
"_alignMode": 2,
|
||||
"_lockFlags": 0,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "iEisngIKkv38WihERwsgth",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,618 @@
|
||||
--- G:\Works\YouleGamesCocosCreator\cocoscreator_projects/YouleNexus/assets/framework/ui/prefabs/widgets/Layer614_Loading.prefab 2026-09-01 01:10:37.375090300 +0800
|
||||
+++ G:\Works\YouleGamesCocosCreator\cocoscreator_projects\YouleNexus\out\legacy-migration\Loading_Layer.prefab 2026-09-02 08:44:23.950055500 +0800
|
||||
@@ -1,7 +1,7 @@
|
||||
[
|
||||
{
|
||||
"__type__": "cc.Prefab",
|
||||
- "_name": "Layer614_Loading",
|
||||
+ "_name": "Loading_Layer",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_native": "",
|
||||
@@ -13,26 +13,26 @@
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
- "_name": "Layer614_Loading",
|
||||
+ "_name": "Loading_Layer",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": null,
|
||||
"_children": [
|
||||
{
|
||||
"__id__": 2
|
||||
- },
|
||||
- {
|
||||
- "__id__": 3
|
||||
}
|
||||
],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
- "__id__": 16
|
||||
+ "__id__": 25
|
||||
+ },
|
||||
+ {
|
||||
+ "__id__": 27
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
- "__id__": 18
|
||||
+ "__id__": 28
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
@@ -44,7 +44,8 @@
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
- "z": 0
|
||||
+ "z": 0,
|
||||
+ "w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
@@ -64,27 +65,31 @@
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
- "_name": "Bg",
|
||||
+ "_name": "group-40",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
"__id__": 1
|
||||
},
|
||||
- "_children": [],
|
||||
- "_active": true,
|
||||
- "_components": [
|
||||
+ "_children": [
|
||||
{
|
||||
- "__id__": 4
|
||||
+ "__id__": 3
|
||||
},
|
||||
{
|
||||
- "__id__": 6
|
||||
+ "__id__": 11
|
||||
+ }
|
||||
+ ],
|
||||
+ "_active": true,
|
||||
+ "_components": [
|
||||
+ {
|
||||
+ "__id__": 20
|
||||
},
|
||||
{
|
||||
- "__id__": 8
|
||||
+ "__id__": 22
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
- "__id__": 10
|
||||
+ "__id__": 23
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
@@ -96,7 +101,8 @@
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
- "z": 0
|
||||
+ "z": 0,
|
||||
+ "w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
@@ -116,24 +122,27 @@
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
- "_name": "Msg",
|
||||
+ "_name": "载入遮罩",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
- "__id__": 1
|
||||
+ "__id__": 2
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
- "__id__": 11
|
||||
+ "__id__": 5
|
||||
},
|
||||
{
|
||||
- "__id__": 13
|
||||
+ "__id__": 7
|
||||
+ },
|
||||
+ {
|
||||
+ "__id__": 9
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
- "__id__": 15
|
||||
+ "__id__": 10
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
@@ -145,7 +154,8 @@
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
- "z": 0
|
||||
+ "z": 0,
|
||||
+ "w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
@@ -164,21 +174,25 @@
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
+ "__type__": "cc.CompPrefabInfo",
|
||||
+ "fileId": "bgFPcCvdzkbU3cRwe0igV9"
|
||||
+ },
|
||||
+ {
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
- "__id__": 2
|
||||
+ "__id__": 3
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
- "__id__": 5
|
||||
+ "__id__": 4
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
- "width": 320,
|
||||
- "height": 120
|
||||
+ "width": 1280,
|
||||
+ "height": 720
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
@@ -189,7 +203,7 @@
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
- "fileId": "9nSCnycEN4FqmL4nmLj5sk"
|
||||
+ "fileId": "px6CUAi7AxxBT9r4T72wlz"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Sprite",
|
||||
@@ -197,15 +211,11 @@
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
- "__id__": 2
|
||||
+ "__id__": 3
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
- "__id__": 7
|
||||
- },
|
||||
- "_spriteFrame": {
|
||||
- "__uuid__": "dcc4530b-344b-40b6-8fbb-9fa35db6a289@f9941",
|
||||
- "__expectedType__": "cc.SpriteFrame"
|
||||
+ "__id__": 6
|
||||
},
|
||||
"_customMaterial": null,
|
||||
"_srcBlendFactor": 2,
|
||||
@@ -217,7 +227,11 @@
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
- "_type": 1,
|
||||
+ "_spriteFrame": {
|
||||
+ "__uuid__": "eabf148a-fa6a-460a-be4f-8e586eb80e07@f9941",
|
||||
+ "__expectedType__": "cc.SpriteFrame"
|
||||
+ },
|
||||
+ "_type": 0,
|
||||
"_fillType": 0,
|
||||
"_sizeMode": 0,
|
||||
"_fillCenter": {
|
||||
@@ -234,29 +248,41 @@
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
- "fileId": "fA/KbifYHNb6/Vu7mnxjpt"
|
||||
+ "fileId": "scizfUwnRjMB2wvcHYH3hR"
|
||||
},
|
||||
{
|
||||
- "__type__": "cc.UIOpacity",
|
||||
+ "__type__": "cc.Widget",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
- "__id__": 2
|
||||
+ "__id__": 3
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
- "__id__": 9
|
||||
+ "__id__": 8
|
||||
},
|
||||
- "opacity": 200,
|
||||
- "_opacity": 200,
|
||||
+ "_alignFlags": 24,
|
||||
+ "_target": null,
|
||||
+ "_left": 0,
|
||||
+ "_right": 0,
|
||||
+ "_top": 0,
|
||||
+ "_bottom": 0,
|
||||
+ "_horizontalCenter": 0,
|
||||
+ "_verticalCenter": 0,
|
||||
+ "_isAbsLeft": true,
|
||||
+ "_isAbsRight": true,
|
||||
+ "_isAbsTop": true,
|
||||
+ "_isAbsBottom": true,
|
||||
+ "_isAbsHorizontalCenter": true,
|
||||
+ "_isAbsVerticalCenter": true,
|
||||
+ "_originalWidth": 0,
|
||||
+ "_originalHeight": 0,
|
||||
+ "_alignMode": 2,
|
||||
+ "_lockFlags": 0,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
- "__type__": "cc.CompPrefabInfo",
|
||||
- "fileId": "0PIMkmQOfYkwW25pL09zY6"
|
||||
- },
|
||||
- {
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
@@ -264,18 +290,75 @@
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
- "fileId": "dbVI2KWDtIkraHgTioSGca",
|
||||
+ "fileId": "UqFWnxTk8gOS4YSF8p7vTm",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
+ "__type__": "cc.Node",
|
||||
+ "_name": "载入动画",
|
||||
+ "_objFlags": 0,
|
||||
+ "__editorExtras__": {},
|
||||
+ "_parent": {
|
||||
+ "__id__": 2
|
||||
+ },
|
||||
+ "_children": [],
|
||||
+ "_active": true,
|
||||
+ "_components": [
|
||||
+ {
|
||||
+ "__id__": 13
|
||||
+ },
|
||||
+ {
|
||||
+ "__id__": 15
|
||||
+ },
|
||||
+ {
|
||||
+ "__id__": 17
|
||||
+ }
|
||||
+ ],
|
||||
+ "_prefab": {
|
||||
+ "__id__": 18
|
||||
+ },
|
||||
+ "_lpos": {
|
||||
+ "__type__": "cc.Vec3",
|
||||
+ "x": 0,
|
||||
+ "y": 0,
|
||||
+ "z": 0
|
||||
+ },
|
||||
+ "_lrot": {
|
||||
+ "__type__": "cc.Quat",
|
||||
+ "x": 0,
|
||||
+ "y": 0,
|
||||
+ "z": 0,
|
||||
+ "w": 1
|
||||
+ },
|
||||
+ "_lscale": {
|
||||
+ "__type__": "cc.Vec3",
|
||||
+ "x": 1,
|
||||
+ "y": 1,
|
||||
+ "z": 1
|
||||
+ },
|
||||
+ "_mobility": 0,
|
||||
+ "_layer": 1073741824,
|
||||
+ "_euler": {
|
||||
+ "__type__": "cc.Vec3",
|
||||
+ "x": 0,
|
||||
+ "y": 0,
|
||||
+ "z": 0
|
||||
+ },
|
||||
+ "_id": ""
|
||||
+ },
|
||||
+ {
|
||||
+ "__type__": "cc.CompPrefabInfo",
|
||||
+ "fileId": "cobDdbjKZsDYlww88xCcaN"
|
||||
+ },
|
||||
+ {
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
- "__id__": 3
|
||||
+ "__id__": 11
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
@@ -283,8 +366,8 @@
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
- "width": 175.703125,
|
||||
- "height": 50.4
|
||||
+ "width": 150,
|
||||
+ "height": 150
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
@@ -295,42 +378,154 @@
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
- "fileId": "OmseB+KMS2Umc8L5ochNhj"
|
||||
+ "fileId": "6qVhLJigTx9qcXqyATGSrT"
|
||||
},
|
||||
{
|
||||
- "__type__": "cc.Label",
|
||||
+ "__type__": "cc.ProgressBar",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
- "__id__": 3
|
||||
+ "__id__": 11
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 14
|
||||
},
|
||||
- "_string": "Loading...",
|
||||
- "_horizontalAlign": 1,
|
||||
- "_verticalAlign": 1,
|
||||
- "_actualFontSize": 40,
|
||||
- "_fontSize": 40,
|
||||
- "_fontFamily": "Arial",
|
||||
- "_lineHeight": 40,
|
||||
- "_overflow": 0,
|
||||
- "_enableWrapText": true,
|
||||
- "_font": null,
|
||||
- "_isSystemFontUsed": true,
|
||||
- "_spacingX": 0,
|
||||
- "_isItalic": false,
|
||||
- "_isBold": false,
|
||||
- "_isUnderline": false,
|
||||
- "_underlineHeight": 2,
|
||||
- "_cacheMode": 0,
|
||||
+ "_customMaterial": null,
|
||||
+ "_srcBlendFactor": 2,
|
||||
+ "_dstBlendFactor": 4,
|
||||
+ "_color": {
|
||||
+ "__type__": "cc.Color",
|
||||
+ "r": 255,
|
||||
+ "g": 255,
|
||||
+ "b": 255,
|
||||
+ "a": 255
|
||||
+ },
|
||||
+ "_spriteFrame": {
|
||||
+ "__uuid__": "e966950a-fe3c-41d9-adcb-b8950fb77ae1@f9941",
|
||||
+ "__expectedType__": "cc.SpriteFrame"
|
||||
+ },
|
||||
+ "_type": 0,
|
||||
+ "_reverse": false,
|
||||
+ "_totalLength": 100,
|
||||
+ "_progress": 0,
|
||||
+ "_barSprite": null,
|
||||
+ "_mode": 0,
|
||||
+ "_id": ""
|
||||
+ },
|
||||
+ {
|
||||
+ "__type__": "cc.CompPrefabInfo",
|
||||
+ "fileId": "wGre0V28x5HhNIL7mAKpIn"
|
||||
+ },
|
||||
+ {
|
||||
+ "__type__": "cc.Widget",
|
||||
+ "_name": "",
|
||||
+ "_objFlags": 0,
|
||||
+ "__editorExtras__": {},
|
||||
+ "node": {
|
||||
+ "__id__": 11
|
||||
+ },
|
||||
+ "_enabled": true,
|
||||
+ "__prefab": {
|
||||
+ "__id__": 16
|
||||
+ },
|
||||
+ "_alignFlags": 24,
|
||||
+ "_target": null,
|
||||
+ "_left": 0,
|
||||
+ "_right": 0,
|
||||
+ "_top": 0,
|
||||
+ "_bottom": 0,
|
||||
+ "_horizontalCenter": 0,
|
||||
+ "_verticalCenter": 0,
|
||||
+ "_isAbsLeft": true,
|
||||
+ "_isAbsRight": true,
|
||||
+ "_isAbsTop": true,
|
||||
+ "_isAbsBottom": true,
|
||||
+ "_isAbsHorizontalCenter": true,
|
||||
+ "_isAbsVerticalCenter": true,
|
||||
+ "_originalWidth": 0,
|
||||
+ "_originalHeight": 0,
|
||||
+ "_alignMode": 2,
|
||||
+ "_lockFlags": 0,
|
||||
+ "_id": ""
|
||||
+ },
|
||||
+ {
|
||||
+ "__type__": "cc.PrefabInfo",
|
||||
+ "root": {
|
||||
+ "__id__": 1
|
||||
+ },
|
||||
+ "asset": {
|
||||
+ "__id__": 0
|
||||
+ },
|
||||
+ "fileId": "3Uy5rHQp3avv1lNfD7X2vf",
|
||||
+ "instance": null,
|
||||
+ "targetOverrides": null,
|
||||
+ "nestedPrefabInstanceRoots": null
|
||||
+ },
|
||||
+ {
|
||||
+ "__type__": "cc.CompPrefabInfo",
|
||||
+ "fileId": "vx2PuAMjkkW5FPA3mZSK4L"
|
||||
+ },
|
||||
+ {
|
||||
+ "__type__": "cc.UITransform",
|
||||
+ "_name": "",
|
||||
+ "_objFlags": 0,
|
||||
+ "__editorExtras__": {},
|
||||
+ "node": {
|
||||
+ "__id__": 2
|
||||
+ },
|
||||
+ "_enabled": true,
|
||||
+ "__prefab": {
|
||||
+ "__id__": 19
|
||||
+ },
|
||||
+ "_contentSize": {
|
||||
+ "__type__": "cc.Size",
|
||||
+ "width": 1600,
|
||||
+ "height": 720
|
||||
+ },
|
||||
+ "_anchorPoint": {
|
||||
+ "__type__": "cc.Vec2",
|
||||
+ "x": 0.5,
|
||||
+ "y": 0.5
|
||||
+ },
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
- "fileId": "MQ2+2oGKv8H/vi9QsN/5DW"
|
||||
+ "fileId": "fFXF7iGboTzCtU3S4Dc1MU"
|
||||
+ },
|
||||
+ {
|
||||
+ "__type__": "cc.Widget",
|
||||
+ "_name": "",
|
||||
+ "_objFlags": 0,
|
||||
+ "__editorExtras__": {},
|
||||
+ "node": {
|
||||
+ "__id__": 2
|
||||
+ },
|
||||
+ "_enabled": true,
|
||||
+ "__prefab": {
|
||||
+ "__id__": 21
|
||||
+ },
|
||||
+ "_alignFlags": 45,
|
||||
+ "_target": null,
|
||||
+ "_left": 0,
|
||||
+ "_right": 0,
|
||||
+ "_top": 0,
|
||||
+ "_bottom": 0,
|
||||
+ "_horizontalCenter": 0,
|
||||
+ "_verticalCenter": 0,
|
||||
+ "_isAbsLeft": true,
|
||||
+ "_isAbsRight": true,
|
||||
+ "_isAbsTop": true,
|
||||
+ "_isAbsBottom": true,
|
||||
+ "_isAbsHorizontalCenter": true,
|
||||
+ "_isAbsVerticalCenter": true,
|
||||
+ "_originalWidth": 0,
|
||||
+ "_originalHeight": 0,
|
||||
+ "_alignMode": 2,
|
||||
+ "_lockFlags": 0,
|
||||
+ "_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
@@ -340,12 +535,16 @@
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
- "fileId": "26xRcf0sBATa8tQfMVwsc6",
|
||||
+ "fileId": "5WeBAyT302zJ9aNOkTg7NR",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
+ "__type__": "cc.CompPrefabInfo",
|
||||
+ "fileId": "lP9iaJKVN8EdQqyVTQvy9a"
|
||||
+ },
|
||||
+ {
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
@@ -355,12 +554,12 @@
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
- "__id__": 17
|
||||
+ "__id__": 24
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
- "width": 100,
|
||||
- "height": 100
|
||||
+ "width": 1600,
|
||||
+ "height": 720
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
@@ -371,7 +570,39 @@
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
- "fileId": "NSvhOlPaO79ZOG50Gznx3f"
|
||||
+ "fileId": "gngVZAms0UeFVhJysk9GUc"
|
||||
+ },
|
||||
+ {
|
||||
+ "__type__": "cc.Widget",
|
||||
+ "_name": "",
|
||||
+ "_objFlags": 0,
|
||||
+ "__editorExtras__": {},
|
||||
+ "node": {
|
||||
+ "__id__": 1
|
||||
+ },
|
||||
+ "_enabled": true,
|
||||
+ "__prefab": {
|
||||
+ "__id__": 26
|
||||
+ },
|
||||
+ "_alignFlags": 45,
|
||||
+ "_target": null,
|
||||
+ "_left": 0,
|
||||
+ "_right": 0,
|
||||
+ "_top": 0,
|
||||
+ "_bottom": 0,
|
||||
+ "_horizontalCenter": 0,
|
||||
+ "_verticalCenter": 0,
|
||||
+ "_isAbsLeft": true,
|
||||
+ "_isAbsRight": true,
|
||||
+ "_isAbsTop": true,
|
||||
+ "_isAbsBottom": true,
|
||||
+ "_isAbsHorizontalCenter": true,
|
||||
+ "_isAbsVerticalCenter": true,
|
||||
+ "_originalWidth": 0,
|
||||
+ "_originalHeight": 0,
|
||||
+ "_alignMode": 2,
|
||||
+ "_lockFlags": 0,
|
||||
+ "_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
@@ -381,7 +612,7 @@
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
- "fileId": "82nnbSyS9L0ZEBspwvCtTr",
|
||||
+ "fileId": "iEisngIKkv38WihERwsgth",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+2998
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,983 @@
|
||||
[
|
||||
{
|
||||
"__type__": "cc.Prefab",
|
||||
"_name": "Protol_Layer",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_native": "",
|
||||
"data": {
|
||||
"__id__": 1
|
||||
},
|
||||
"optimizationPolicy": 0,
|
||||
"persistent": false
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "Protol_Layer",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": null,
|
||||
"_children": [
|
||||
{
|
||||
"__id__": 2
|
||||
}
|
||||
],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 41
|
||||
},
|
||||
{
|
||||
"__id__": 43
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 44
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1,
|
||||
"y": 1,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1073741824,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "group-37",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_children": [
|
||||
{
|
||||
"__id__": 3
|
||||
},
|
||||
{
|
||||
"__id__": 11
|
||||
},
|
||||
{
|
||||
"__id__": 19
|
||||
},
|
||||
{
|
||||
"__id__": 27
|
||||
}
|
||||
],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 36
|
||||
},
|
||||
{
|
||||
"__id__": 38
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 39
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1,
|
||||
"y": 1,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1073741824,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "协议遮罩",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 5
|
||||
},
|
||||
{
|
||||
"__id__": 7
|
||||
},
|
||||
{
|
||||
"__id__": 9
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 10
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1,
|
||||
"y": 1,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1073741824,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "Bc34HG9pqqr62i3Yt8y7oL"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 3
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 4
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 1280,
|
||||
"height": 720
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "B6B3jI1NQwoddgPYj0pk5X"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Sprite",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 3
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 6
|
||||
},
|
||||
"_customMaterial": null,
|
||||
"_srcBlendFactor": 2,
|
||||
"_dstBlendFactor": 4,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 255,
|
||||
"g": 255,
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_spriteFrame": {
|
||||
"__uuid__": "eabf148a-fa6a-460a-be4f-8e586eb80e07@f9941",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
"_type": 0,
|
||||
"_fillType": 0,
|
||||
"_sizeMode": 0,
|
||||
"_fillCenter": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"_fillStart": 0,
|
||||
"_fillRange": 0,
|
||||
"_isTrimmedMode": true,
|
||||
"_useGrayscale": false,
|
||||
"_atlas": null,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "sZRQwrbf1FlCZZVxt3RdFM"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Widget",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 3
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 8
|
||||
},
|
||||
"_alignFlags": 24,
|
||||
"_target": null,
|
||||
"_left": 0,
|
||||
"_right": 0,
|
||||
"_top": 0,
|
||||
"_bottom": 0,
|
||||
"_horizontalCenter": 0,
|
||||
"_verticalCenter": 0,
|
||||
"_isAbsLeft": true,
|
||||
"_isAbsRight": true,
|
||||
"_isAbsTop": true,
|
||||
"_isAbsBottom": true,
|
||||
"_isAbsHorizontalCenter": true,
|
||||
"_isAbsVerticalCenter": true,
|
||||
"_originalWidth": 0,
|
||||
"_originalHeight": 0,
|
||||
"_alignMode": 2,
|
||||
"_lockFlags": 0,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "TBRlxqRlqNf5udI0qEObLJ",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "协议背景",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 13
|
||||
},
|
||||
{
|
||||
"__id__": 15
|
||||
},
|
||||
{
|
||||
"__id__": 17
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 18
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": -7,
|
||||
"y": 5,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1,
|
||||
"y": 1,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1073741824,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "IhoTFvDhihla8gCAED5M57"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 11
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 12
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 820,
|
||||
"height": 650
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "dV6uRRNAxMdqX7rezx2wsp"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Sprite",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 11
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 14
|
||||
},
|
||||
"_customMaterial": null,
|
||||
"_srcBlendFactor": 2,
|
||||
"_dstBlendFactor": 4,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 255,
|
||||
"g": 255,
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_spriteFrame": {
|
||||
"__uuid__": "3e7492cb-7ae1-4f56-806d-07096662d8fb@f9941",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
"_type": 1,
|
||||
"_fillType": 0,
|
||||
"_sizeMode": 0,
|
||||
"_fillCenter": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"_fillStart": 0,
|
||||
"_fillRange": 0,
|
||||
"_isTrimmedMode": true,
|
||||
"_useGrayscale": false,
|
||||
"_atlas": null,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "DMpXRTjruPOQHk2MOZ6Twx"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Widget",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 11
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 16
|
||||
},
|
||||
"_alignFlags": 24,
|
||||
"_target": null,
|
||||
"_left": 0,
|
||||
"_right": 0,
|
||||
"_top": 0,
|
||||
"_bottom": 0,
|
||||
"_horizontalCenter": -7,
|
||||
"_verticalCenter": 5,
|
||||
"_isAbsLeft": true,
|
||||
"_isAbsRight": true,
|
||||
"_isAbsTop": true,
|
||||
"_isAbsBottom": true,
|
||||
"_isAbsHorizontalCenter": true,
|
||||
"_isAbsVerticalCenter": true,
|
||||
"_originalWidth": 0,
|
||||
"_originalHeight": 0,
|
||||
"_alignMode": 2,
|
||||
"_lockFlags": 0,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "BSdW43S4uQDqGA9Yz3eKkV",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "协议内容",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 21
|
||||
},
|
||||
{
|
||||
"__id__": 23
|
||||
},
|
||||
{
|
||||
"__id__": 25
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 26
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": -5.5,
|
||||
"y": -208.5,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1,
|
||||
"y": 1,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1073741824,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "MsFDTjsRppAbTiwMaXgGTa"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 19
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 20
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 729,
|
||||
"height": 997
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "Ffzu9dTuFBVOoyFTM2sd9f"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Sprite",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 19
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 22
|
||||
},
|
||||
"_customMaterial": null,
|
||||
"_srcBlendFactor": 2,
|
||||
"_dstBlendFactor": 4,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 255,
|
||||
"g": 255,
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_spriteFrame": {
|
||||
"__uuid__": "998850c4-7861-4c12-8cb4-be7a7415c42a@f9941",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
"_type": 0,
|
||||
"_fillType": 0,
|
||||
"_sizeMode": 0,
|
||||
"_fillCenter": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"_fillStart": 0,
|
||||
"_fillRange": 0,
|
||||
"_isTrimmedMode": true,
|
||||
"_useGrayscale": false,
|
||||
"_atlas": null,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "eNEFpALsFqSYRMKBbI35Xv"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Widget",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 19
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 24
|
||||
},
|
||||
"_alignFlags": 24,
|
||||
"_target": null,
|
||||
"_left": 0,
|
||||
"_right": 0,
|
||||
"_top": 0,
|
||||
"_bottom": 0,
|
||||
"_horizontalCenter": -5.5,
|
||||
"_verticalCenter": -208.5,
|
||||
"_isAbsLeft": true,
|
||||
"_isAbsRight": true,
|
||||
"_isAbsTop": true,
|
||||
"_isAbsBottom": true,
|
||||
"_isAbsHorizontalCenter": true,
|
||||
"_isAbsVerticalCenter": true,
|
||||
"_originalWidth": 0,
|
||||
"_originalHeight": 0,
|
||||
"_alignMode": 2,
|
||||
"_lockFlags": 0,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "a2OqsVaMoVd6ytsdjR5HsJ",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "Spirit253",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 29
|
||||
},
|
||||
{
|
||||
"__id__": 31
|
||||
},
|
||||
{
|
||||
"__id__": 33
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 34
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 395.5,
|
||||
"y": 312,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1,
|
||||
"y": 1,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1073741824,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "tnMhPyZCiweDR17uayu0Dm"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 27
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 28
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 83,
|
||||
"height": 84
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "Yd148vq4UElV19Oumdsvi3"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Sprite",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 27
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 30
|
||||
},
|
||||
"_customMaterial": null,
|
||||
"_srcBlendFactor": 2,
|
||||
"_dstBlendFactor": 4,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 255,
|
||||
"g": 255,
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_spriteFrame": {
|
||||
"__uuid__": "eedce6d7-3ea6-434c-83e1-87d9a04b2bad@f9941",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
"_type": 0,
|
||||
"_fillType": 0,
|
||||
"_sizeMode": 0,
|
||||
"_fillCenter": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"_fillStart": 0,
|
||||
"_fillRange": 0,
|
||||
"_isTrimmedMode": true,
|
||||
"_useGrayscale": false,
|
||||
"_atlas": null,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "3VEGZNpTd8qZkFK6Rrra4E"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Widget",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 27
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 32
|
||||
},
|
||||
"_alignFlags": 24,
|
||||
"_target": null,
|
||||
"_left": 0,
|
||||
"_right": 0,
|
||||
"_top": 0,
|
||||
"_bottom": 0,
|
||||
"_horizontalCenter": 395.5,
|
||||
"_verticalCenter": 312,
|
||||
"_isAbsLeft": true,
|
||||
"_isAbsRight": true,
|
||||
"_isAbsTop": true,
|
||||
"_isAbsBottom": true,
|
||||
"_isAbsHorizontalCenter": true,
|
||||
"_isAbsVerticalCenter": true,
|
||||
"_originalWidth": 0,
|
||||
"_originalHeight": 0,
|
||||
"_alignMode": 2,
|
||||
"_lockFlags": 0,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "l5rjLCKVe490Tv1wFJRrDf",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "Op0C6lW9oiozuWBt0I6mbt"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 35
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 1600,
|
||||
"height": 720
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "UQbdRmgN3VpIf0eBGKRuMN"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Widget",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 37
|
||||
},
|
||||
"_alignFlags": 45,
|
||||
"_target": null,
|
||||
"_left": 0,
|
||||
"_right": 0,
|
||||
"_top": 0,
|
||||
"_bottom": 0,
|
||||
"_horizontalCenter": 0,
|
||||
"_verticalCenter": 0,
|
||||
"_isAbsLeft": true,
|
||||
"_isAbsRight": true,
|
||||
"_isAbsTop": true,
|
||||
"_isAbsBottom": true,
|
||||
"_isAbsHorizontalCenter": true,
|
||||
"_isAbsVerticalCenter": true,
|
||||
"_originalWidth": 0,
|
||||
"_originalHeight": 0,
|
||||
"_alignMode": 2,
|
||||
"_lockFlags": 0,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "ViVuA8fZgijO5xDrE6MofW",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "SYgxcIVfCQ0rK2PDCAVlvp"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 40
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 1600,
|
||||
"height": 720
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "yDMUV9sUeZSZ4fZfqQT2aw"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Widget",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 42
|
||||
},
|
||||
"_alignFlags": 45,
|
||||
"_target": null,
|
||||
"_left": 0,
|
||||
"_right": 0,
|
||||
"_top": 0,
|
||||
"_bottom": 0,
|
||||
"_horizontalCenter": 0,
|
||||
"_verticalCenter": 0,
|
||||
"_isAbsLeft": true,
|
||||
"_isAbsRight": true,
|
||||
"_isAbsTop": true,
|
||||
"_isAbsBottom": true,
|
||||
"_isAbsHorizontalCenter": true,
|
||||
"_isAbsVerticalCenter": true,
|
||||
"_originalWidth": 0,
|
||||
"_originalHeight": 0,
|
||||
"_alignMode": 2,
|
||||
"_lockFlags": 0,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "2EpIxmBasuffqQyPlMKTQI",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
}
|
||||
]
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,828 @@
|
||||
[
|
||||
{
|
||||
"__type__": "cc.Prefab",
|
||||
"_name": "updateRoomCard_Layer",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_native": "",
|
||||
"data": {
|
||||
"__id__": 1
|
||||
},
|
||||
"optimizationPolicy": 0,
|
||||
"persistent": false
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "updateRoomCard_Layer",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": null,
|
||||
"_children": [
|
||||
{
|
||||
"__id__": 2
|
||||
}
|
||||
],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 33
|
||||
},
|
||||
{
|
||||
"__id__": 35
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 36
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1,
|
||||
"y": 1,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1073741824,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "group-34",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_children": [
|
||||
{
|
||||
"__id__": 3
|
||||
},
|
||||
{
|
||||
"__id__": 11
|
||||
},
|
||||
{
|
||||
"__id__": 19
|
||||
}
|
||||
],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 28
|
||||
},
|
||||
{
|
||||
"__id__": 30
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 31
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1,
|
||||
"y": 1,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1073741824,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "房卡修改遮罩",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 5
|
||||
},
|
||||
{
|
||||
"__id__": 7
|
||||
},
|
||||
{
|
||||
"__id__": 9
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 10
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1,
|
||||
"y": 1,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1073741824,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "PMtgJGV4i43HUw2ze6b0lg"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 3
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 4
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 1280,
|
||||
"height": 720
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "1Q6uY1Z9WFpcMgWJY3nH2I"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Sprite",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 3
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 6
|
||||
},
|
||||
"_customMaterial": null,
|
||||
"_srcBlendFactor": 2,
|
||||
"_dstBlendFactor": 4,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 255,
|
||||
"g": 255,
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_spriteFrame": {
|
||||
"__uuid__": "eabf148a-fa6a-460a-be4f-8e586eb80e07@f9941",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
"_type": 0,
|
||||
"_fillType": 0,
|
||||
"_sizeMode": 0,
|
||||
"_fillCenter": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"_fillStart": 0,
|
||||
"_fillRange": 0,
|
||||
"_isTrimmedMode": true,
|
||||
"_useGrayscale": false,
|
||||
"_atlas": null,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "SwquJ6T7HGA5D0NxZHLSmo"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Widget",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 3
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 8
|
||||
},
|
||||
"_alignFlags": 24,
|
||||
"_target": null,
|
||||
"_left": 0,
|
||||
"_right": 0,
|
||||
"_top": 0,
|
||||
"_bottom": 0,
|
||||
"_horizontalCenter": 0,
|
||||
"_verticalCenter": 0,
|
||||
"_isAbsLeft": true,
|
||||
"_isAbsRight": true,
|
||||
"_isAbsTop": true,
|
||||
"_isAbsBottom": true,
|
||||
"_isAbsHorizontalCenter": true,
|
||||
"_isAbsVerticalCenter": true,
|
||||
"_originalWidth": 0,
|
||||
"_originalHeight": 0,
|
||||
"_alignMode": 2,
|
||||
"_lockFlags": 0,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "A4QDcR5UJf8yjuXDzVOPkz",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "房卡修改背景",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 13
|
||||
},
|
||||
{
|
||||
"__id__": 15
|
||||
},
|
||||
{
|
||||
"__id__": 17
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 18
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 12,
|
||||
"y": 19.5,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1,
|
||||
"y": 1,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1073741824,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "41dAwsVRkF0G2lK5xiLcLU"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 11
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 12
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 570,
|
||||
"height": 105
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "NZYFZHNBjBdNGWQSXXoKYE"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Sprite",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 11
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 14
|
||||
},
|
||||
"_customMaterial": null,
|
||||
"_srcBlendFactor": 2,
|
||||
"_dstBlendFactor": 4,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 255,
|
||||
"g": 255,
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_spriteFrame": {
|
||||
"__uuid__": "c6295419-a30e-4e88-b7d7-d4099114319d@f9941",
|
||||
"__expectedType__": "cc.SpriteFrame"
|
||||
},
|
||||
"_type": 0,
|
||||
"_fillType": 0,
|
||||
"_sizeMode": 0,
|
||||
"_fillCenter": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"_fillStart": 0,
|
||||
"_fillRange": 0,
|
||||
"_isTrimmedMode": true,
|
||||
"_useGrayscale": false,
|
||||
"_atlas": null,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "DKqUwivGTVYxnc7LXAjE1c"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Widget",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 11
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 16
|
||||
},
|
||||
"_alignFlags": 24,
|
||||
"_target": null,
|
||||
"_left": 0,
|
||||
"_right": 0,
|
||||
"_top": 0,
|
||||
"_bottom": 0,
|
||||
"_horizontalCenter": 12,
|
||||
"_verticalCenter": 19.5,
|
||||
"_isAbsLeft": true,
|
||||
"_isAbsRight": true,
|
||||
"_isAbsTop": true,
|
||||
"_isAbsBottom": true,
|
||||
"_isAbsHorizontalCenter": true,
|
||||
"_isAbsVerticalCenter": true,
|
||||
"_originalWidth": 0,
|
||||
"_originalHeight": 0,
|
||||
"_alignMode": 2,
|
||||
"_lockFlags": 0,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "NqCat61lGN7yiwVeO31H7h",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "房卡修改提示文字",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 21
|
||||
},
|
||||
{
|
||||
"__id__": 23
|
||||
},
|
||||
{
|
||||
"__id__": 25
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 26
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": -50,
|
||||
"y": 22,
|
||||
"z": 0
|
||||
},
|
||||
"_lrot": {
|
||||
"__type__": "cc.Quat",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0,
|
||||
"w": 1
|
||||
},
|
||||
"_lscale": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 1,
|
||||
"y": 1,
|
||||
"z": 1
|
||||
},
|
||||
"_mobility": 0,
|
||||
"_layer": 1073741824,
|
||||
"_euler": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "dm532BGJjB2aZNHpz1PdMi"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 19
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 20
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 168,
|
||||
"height": 28
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "LWGC964Mcb5zucbBjSZtko"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Label",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 19
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 22
|
||||
},
|
||||
"_customMaterial": null,
|
||||
"_srcBlendFactor": 2,
|
||||
"_dstBlendFactor": 4,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 255,
|
||||
"g": 255,
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_string": "房卡修改提示文字",
|
||||
"_horizontalAlign": 1,
|
||||
"_verticalAlign": 1,
|
||||
"_actualFontSize": 40,
|
||||
"_fontSize": 40,
|
||||
"_fontFamily": "Arial",
|
||||
"_lineHeight": 40,
|
||||
"_overflow": 0,
|
||||
"_enableWrapText": true,
|
||||
"_font": null,
|
||||
"_isSystemFontUsed": true,
|
||||
"_spacingX": 0,
|
||||
"_isItalic": false,
|
||||
"_isBold": false,
|
||||
"_isUnderline": false,
|
||||
"_underlineHeight": 2,
|
||||
"_cacheMode": 0,
|
||||
"_enableOutline": false,
|
||||
"_outlineColor": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 0,
|
||||
"g": 0,
|
||||
"b": 0,
|
||||
"a": 255
|
||||
},
|
||||
"_outlineWidth": 2,
|
||||
"_enableShadow": false,
|
||||
"_shadowColor": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 0,
|
||||
"g": 0,
|
||||
"b": 0,
|
||||
"a": 255
|
||||
},
|
||||
"_shadowOffset": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 2,
|
||||
"y": 2
|
||||
},
|
||||
"_shadowBlur": 2,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "Nc9dD7qyJrFmq1WVk1m0KV"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Widget",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 19
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 24
|
||||
},
|
||||
"_alignFlags": 24,
|
||||
"_target": null,
|
||||
"_left": 0,
|
||||
"_right": 0,
|
||||
"_top": 0,
|
||||
"_bottom": 0,
|
||||
"_horizontalCenter": -50,
|
||||
"_verticalCenter": 22,
|
||||
"_isAbsLeft": true,
|
||||
"_isAbsRight": true,
|
||||
"_isAbsTop": true,
|
||||
"_isAbsBottom": true,
|
||||
"_isAbsHorizontalCenter": true,
|
||||
"_isAbsVerticalCenter": true,
|
||||
"_originalWidth": 0,
|
||||
"_originalHeight": 0,
|
||||
"_alignMode": 2,
|
||||
"_lockFlags": 0,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "GkjvavsbQSlvvDq64HjcO1",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "w2c4v3GGXG2a3kPHEkr2wI"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 27
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 1600,
|
||||
"height": 720
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "Veu7zEGD5sfR2vV9ojRTAp"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Widget",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 29
|
||||
},
|
||||
"_alignFlags": 45,
|
||||
"_target": null,
|
||||
"_left": 0,
|
||||
"_right": 0,
|
||||
"_top": 0,
|
||||
"_bottom": 0,
|
||||
"_horizontalCenter": 0,
|
||||
"_verticalCenter": 0,
|
||||
"_isAbsLeft": true,
|
||||
"_isAbsRight": true,
|
||||
"_isAbsTop": true,
|
||||
"_isAbsBottom": true,
|
||||
"_isAbsHorizontalCenter": true,
|
||||
"_isAbsVerticalCenter": true,
|
||||
"_originalWidth": 0,
|
||||
"_originalHeight": 0,
|
||||
"_alignMode": 2,
|
||||
"_lockFlags": 0,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "ChU5G14IaGKqncFD2fmdu2",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "a9aLvdVmXDoXB4GqzvRJLj"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.UITransform",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 32
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 1600,
|
||||
"height": 720
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "FDY4fLVF3pmqA1vMNbRctB"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Widget",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 34
|
||||
},
|
||||
"_alignFlags": 45,
|
||||
"_target": null,
|
||||
"_left": 0,
|
||||
"_right": 0,
|
||||
"_top": 0,
|
||||
"_bottom": 0,
|
||||
"_horizontalCenter": 0,
|
||||
"_verticalCenter": 0,
|
||||
"_isAbsLeft": true,
|
||||
"_isAbsRight": true,
|
||||
"_isAbsTop": true,
|
||||
"_isAbsBottom": true,
|
||||
"_isAbsHorizontalCenter": true,
|
||||
"_isAbsVerticalCenter": true,
|
||||
"_originalWidth": 0,
|
||||
"_originalHeight": 0,
|
||||
"_alignMode": 2,
|
||||
"_lockFlags": 0,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
"__id__": 1
|
||||
},
|
||||
"asset": {
|
||||
"__id__": 0
|
||||
},
|
||||
"fileId": "8eBUIfd1BR75dFIZlxxcNl",
|
||||
"instance": null,
|
||||
"targetOverrides": null,
|
||||
"nestedPrefabInstanceRoots": null
|
||||
}
|
||||
]
|
||||
+1225
File diff suppressed because it is too large
Load Diff
+10
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"name": "YouleNexus",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "YouleNexus"
|
||||
}
|
||||
}
|
||||
}
|
||||
+95
@@ -0,0 +1,95 @@
|
||||
import { test } from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import { computeLpos, computeContentSize, computeWidgetAlignment } from '../../scripts/legacy-layer-to-cocos-prefab.mjs';
|
||||
|
||||
test('computeLpos 锚点转换(实测验证:渠道logo)', () => {
|
||||
const spirit = { x: '734', y: '143', w: '59', h: '148' };
|
||||
const lpos = computeLpos(spirit);
|
||||
// x = 734 + 59/2 - 640 = 123.5
|
||||
// y = 360 - (143 + 148/2) = 143
|
||||
assert.equal(lpos.x, 123.5);
|
||||
assert.equal(lpos.y, 143);
|
||||
assert.equal(lpos.z, 0);
|
||||
});
|
||||
|
||||
test('computeLpos 锚点转换(实测验证:游客登录)', () => {
|
||||
const spirit = { x: '540', y: '388', w: '320', h: '95' };
|
||||
const lpos = computeLpos(spirit);
|
||||
// x = 540 + 160 - 640 = 60
|
||||
// y = 360 - (388 + 47.5) = -75.5
|
||||
assert.equal(lpos.x, 60);
|
||||
assert.equal(lpos.y, -75.5);
|
||||
});
|
||||
|
||||
test('computeLpos 字符串转数字(X/Y 为字符串 "0"/"-100")', () => {
|
||||
const spirit = { x: '0', y: '-100', w: '100', h: '100' };
|
||||
const lpos = computeLpos(spirit);
|
||||
// x = 0 + 50 - 640 = -590
|
||||
// y = 360 - (-100 + 50) = 410
|
||||
assert.equal(lpos.x, -590);
|
||||
assert.equal(lpos.y, 410);
|
||||
});
|
||||
|
||||
test('computeContentSize 直接读 Width/Height(SizeCalcMode=0 路径)', () => {
|
||||
const spirit = { w: '320', h: '95', sizeCalcMode: '0' };
|
||||
const size = computeContentSize(spirit);
|
||||
assert.equal(size.width, 320);
|
||||
assert.equal(size.height, 95);
|
||||
});
|
||||
|
||||
test('computeContentSize 默认 SizeCalcMode=0(字段缺失视作 0)', () => {
|
||||
const spirit = { w: '100', h: '50' }; // no sizeCalcMode
|
||||
const size = computeContentSize(spirit);
|
||||
assert.equal(size.width, 100);
|
||||
assert.equal(size.height, 50);
|
||||
});
|
||||
|
||||
test('computeContentSize SizeCalcMode=1 → throw(不静默)', () => {
|
||||
const spirit = { w: '100', h: '50', sizeCalcMode: '1' };
|
||||
assert.throws(() => computeContentSize(spirit), /SizeCalcMode=1.*reverse gameabc\.min\.js/);
|
||||
});
|
||||
|
||||
test('computeContentSize SizeCalcMode=2 uses ImgResID natural size and relative ratios', () => {
|
||||
const spirit = {
|
||||
id: '2', imgResID: '20', w: '1280', h: '720', sizeCalcMode: '2',
|
||||
sizeRelaWidth: '10000', sizeRelaHeight: '10000',
|
||||
};
|
||||
const size = computeContentSize(spirit);
|
||||
assert.equal(size.width, 1280);
|
||||
assert.equal(size.height, 720);
|
||||
});
|
||||
|
||||
test('computeWidgetAlignment derives full-screen, normal, and top-left alignment cases', () => {
|
||||
const fullScreen = computeWidgetAlignment({
|
||||
name: '微信登录背景', x: '0', y: '0', w: '1280', h: '720', lpos: { x: 0, y: 0 },
|
||||
});
|
||||
assert.equal(fullScreen._alignFlags, 45);
|
||||
assert.equal(fullScreen._left, 0);
|
||||
assert.equal(fullScreen._right, 0);
|
||||
assert.equal(fullScreen._top, 0);
|
||||
assert.equal(fullScreen._bottom, 0);
|
||||
assert.equal(fullScreen._horizontalCenter, undefined);
|
||||
assert.equal(fullScreen._verticalCenter, undefined);
|
||||
assert.equal(fullScreen._originalWidth, 100);
|
||||
assert.equal(fullScreen._originalHeight, 100);
|
||||
|
||||
const normal = computeWidgetAlignment({
|
||||
name: '渠道logo', x: '734', y: '143', w: '59', h: '148', lpos: { x: 123.5, y: 0 },
|
||||
});
|
||||
assert.equal(normal._alignFlags, 16);
|
||||
assert.equal(normal._horizontalCenter, 123.5);
|
||||
assert.equal(normal._verticalCenter, 0);
|
||||
assert.equal(normal._left, undefined);
|
||||
assert.equal(normal._right, undefined);
|
||||
assert.equal(normal._top, undefined);
|
||||
assert.equal(normal._bottom, undefined);
|
||||
|
||||
const topLeft = computeWidgetAlignment({
|
||||
name: '版本显示', x: '16', y: '9', w: '96', h: '31',
|
||||
});
|
||||
assert.equal(topLeft._alignFlags, 9);
|
||||
assert.equal(topLeft._left, -576);
|
||||
assert.equal(topLeft._top, 335.5);
|
||||
assert.equal(topLeft._horizontalCenter, undefined);
|
||||
assert.equal(topLeft._verticalCenter, undefined);
|
||||
});
|
||||
@@ -0,0 +1,908 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Layer Version="2.6" SaveTime="2019-01-04 17:51:20">
|
||||
<PropertyList>
|
||||
<Property Name="ID" Value="2"/>
|
||||
<Property Name="Name" Value="Login_Layer"/>
|
||||
<Property Name="Description" Value=""/>
|
||||
</PropertyList>
|
||||
<OptionList/>
|
||||
<EventList/>
|
||||
<SpiritList>
|
||||
<Spirit>
|
||||
<PropertyList>
|
||||
<Property Name="SpiritType" Value="0"/>
|
||||
<Property Name="ID" Value="2"/>
|
||||
<Property Name="Name" Value="微信登录背景"/>
|
||||
<Property Name="ImgResID" Value="20"/>
|
||||
<Property Name="X" Value="0"/>
|
||||
<Property Name="Y" Value="0"/>
|
||||
<Property Name="Width" Value="1280"/>
|
||||
<Property Name="Height" Value="720"/>
|
||||
<Property Name="BelongLayerID" Value="2"/>
|
||||
<Property Name="IndexOfLayer" Value="1"/>
|
||||
<Property Name="BelongGroupID" Value="2"/>
|
||||
<Property Name="IsVisible" Value="1"/>
|
||||
<Property Name="CanClick" Value="1"/>
|
||||
<Property Name="CanDragSize" Value="0"/>
|
||||
<Property Name="TimerInterval" Value="0"/>
|
||||
<Property Name="Data" Value=""/>
|
||||
<Property Name="Description" Value=""/>
|
||||
<Property Name="CoordParentID" Value="0"/>
|
||||
<Property Name="CoordParentPos" Value="0"/>
|
||||
<Property Name="CoordSelfPos" Value="0"/>
|
||||
<Property Name="CoordRelaX" Value="0"/>
|
||||
<Property Name="CoordRelaY" Value="0"/>
|
||||
<Property Name="SizeCalcMode" Value="2"/>
|
||||
<Property Name="SizeParentID" Value="20"/>
|
||||
<Property Name="WidthCalcMode" Value="1"/>
|
||||
<Property Name="SizeRelaWidth" Value="10000"/>
|
||||
<Property Name="HeightCalcMode" Value="1"/>
|
||||
<Property Name="SizeRelaHeight" Value="10000"/>
|
||||
</PropertyList>
|
||||
<OptionList>
|
||||
<Option Name="tag" Value="0"/>
|
||||
<Option Name="tag1" Value="0"/>
|
||||
<Option Name="tag2" Value="0"/>
|
||||
<Option Name="tag3" Value="0"/>
|
||||
<Option Name="vx" Value="0"/>
|
||||
<Option Name="vy" Value="0"/>
|
||||
<Option Name="vw" Value="0"/>
|
||||
<Option Name="vh" Value="0"/>
|
||||
</OptionList>
|
||||
<EventList>
|
||||
<Event Name="MouseDown" Value=""/>
|
||||
<Event Name="MouseUp" Value="2"/>
|
||||
<Event Name="MouseMove" Value=""/>
|
||||
<Event Name="OnTimer" Value=""/>
|
||||
</EventList>
|
||||
</Spirit>
|
||||
<Spirit>
|
||||
<PropertyList>
|
||||
<Property Name="SpiritType" Value="0"/>
|
||||
<Property Name="ID" Value="405"/>
|
||||
<Property Name="Name" Value="Spirit405"/>
|
||||
<Property Name="ImgResID" Value="5"/>
|
||||
<Property Name="X" Value="734"/>
|
||||
<Property Name="Y" Value="143"/>
|
||||
<Property Name="Width" Value="59"/>
|
||||
<Property Name="Height" Value="148"/>
|
||||
<Property Name="BelongLayerID" Value="2"/>
|
||||
<Property Name="IndexOfLayer" Value="2"/>
|
||||
<Property Name="BelongGroupID" Value="2"/>
|
||||
<Property Name="IsVisible" Value="1"/>
|
||||
<Property Name="CanClick" Value="1"/>
|
||||
<Property Name="CanDragSize" Value="0"/>
|
||||
<Property Name="TimerInterval" Value="0"/>
|
||||
<Property Name="Data" Value=""/>
|
||||
<Property Name="Description" Value=""/>
|
||||
<Property Name="CoordParentID" Value="0"/>
|
||||
<Property Name="CoordParentPos" Value="0"/>
|
||||
<Property Name="CoordSelfPos" Value="0"/>
|
||||
<Property Name="CoordRelaX" Value="734"/>
|
||||
<Property Name="CoordRelaY" Value="143"/>
|
||||
<Property Name="SizeCalcMode" Value="0"/>
|
||||
<Property Name="SizeParentID" Value="0"/>
|
||||
<Property Name="WidthCalcMode" Value="0"/>
|
||||
<Property Name="SizeRelaWidth" Value="59"/>
|
||||
<Property Name="HeightCalcMode" Value="0"/>
|
||||
<Property Name="SizeRelaHeight" Value="148"/>
|
||||
</PropertyList>
|
||||
<OptionList>
|
||||
<Option Name="tag" Value="0"/>
|
||||
<Option Name="tag1" Value="0"/>
|
||||
<Option Name="tag2" Value="0"/>
|
||||
<Option Name="tag3" Value="0"/>
|
||||
<Option Name="vx" Value="0"/>
|
||||
<Option Name="vy" Value="0"/>
|
||||
<Option Name="vw" Value="0"/>
|
||||
<Option Name="vh" Value="0"/>
|
||||
</OptionList>
|
||||
<EventList>
|
||||
<Event Name="MouseDown" Value=""/>
|
||||
<Event Name="MouseUp" Value="405"/>
|
||||
<Event Name="MouseMove" Value=""/>
|
||||
<Event Name="OnTimer" Value=""/>
|
||||
</EventList>
|
||||
</Spirit>
|
||||
<Spirit>
|
||||
<PropertyList>
|
||||
<Property Name="SpiritType" Value="1"/>
|
||||
<Property Name="ID" Value="285"/>
|
||||
<Property Name="Name" Value="版本显示"/>
|
||||
<Property Name="FontSize" Value="18"/>
|
||||
<Property Name="FontBold" Value="0"/>
|
||||
<Property Name="FontColor" Value="16777215"/>
|
||||
<Property Name="FontColorA" Value="255"/>
|
||||
<Property Name="BackColor" Value="16777215"/>
|
||||
<Property Name="BackColorA" Value="0"/>
|
||||
<Property Name="AutoSize" Value="1"/>
|
||||
<Property Name="TextStyle" Value="0"/>
|
||||
<Property Name="WordWrap" Value="0"/>
|
||||
<Property Name="LineSpace" Value="0"/>
|
||||
<Property Name="AlignHorz" Value="0"/>
|
||||
<Property Name="AlignVert" Value="0"/>
|
||||
<Property Name="Text" Value="版本显示"/>
|
||||
<Property Name="X" Value="16"/>
|
||||
<Property Name="Y" Value="9"/>
|
||||
<Property Name="Width" Value="96"/>
|
||||
<Property Name="Height" Value="31"/>
|
||||
<Property Name="BelongLayerID" Value="2"/>
|
||||
<Property Name="IndexOfLayer" Value="3"/>
|
||||
<Property Name="BelongGroupID" Value="2"/>
|
||||
<Property Name="IsVisible" Value="1"/>
|
||||
<Property Name="CanClick" Value="1"/>
|
||||
<Property Name="CanDragSize" Value="0"/>
|
||||
<Property Name="TimerInterval" Value="0"/>
|
||||
<Property Name="Data" Value=""/>
|
||||
<Property Name="Description" Value=""/>
|
||||
<Property Name="CoordParentID" Value="0"/>
|
||||
<Property Name="CoordParentPos" Value="0"/>
|
||||
<Property Name="CoordSelfPos" Value="0"/>
|
||||
<Property Name="CoordRelaX" Value="16"/>
|
||||
<Property Name="CoordRelaY" Value="9"/>
|
||||
<Property Name="SizeCalcMode" Value="0"/>
|
||||
<Property Name="SizeParentID" Value="0"/>
|
||||
<Property Name="WidthCalcMode" Value="0"/>
|
||||
<Property Name="SizeRelaWidth" Value="96"/>
|
||||
<Property Name="HeightCalcMode" Value="0"/>
|
||||
<Property Name="SizeRelaHeight" Value="31"/>
|
||||
</PropertyList>
|
||||
<OptionList>
|
||||
<Option Name="tag" Value="0"/>
|
||||
<Option Name="tag1" Value="0"/>
|
||||
<Option Name="tag2" Value="0"/>
|
||||
<Option Name="tag3" Value="0"/>
|
||||
<Option Name="vx" Value="0"/>
|
||||
<Option Name="vy" Value="0"/>
|
||||
<Option Name="vw" Value="0"/>
|
||||
<Option Name="vh" Value="0"/>
|
||||
</OptionList>
|
||||
<EventList>
|
||||
<Event Name="MouseDown" Value=""/>
|
||||
<Event Name="MouseUp" Value="285"/>
|
||||
<Event Name="MouseMove" Value=""/>
|
||||
<Event Name="OnTimer" Value=""/>
|
||||
</EventList>
|
||||
</Spirit>
|
||||
<Spirit>
|
||||
<PropertyList>
|
||||
<Property Name="SpiritType" Value="0"/>
|
||||
<Property Name="ID" Value="248"/>
|
||||
<Property Name="Name" Value="协议确认"/>
|
||||
<Property Name="ImgResID" Value="93"/>
|
||||
<Property Name="X" Value="479"/>
|
||||
<Property Name="Y" Value="542"/>
|
||||
<Property Name="Width" Value="52"/>
|
||||
<Property Name="Height" Value="51"/>
|
||||
<Property Name="BelongLayerID" Value="2"/>
|
||||
<Property Name="IndexOfLayer" Value="4"/>
|
||||
<Property Name="BelongGroupID" Value="2"/>
|
||||
<Property Name="IsVisible" Value="1"/>
|
||||
<Property Name="CanClick" Value="1"/>
|
||||
<Property Name="CanDragSize" Value="0"/>
|
||||
<Property Name="TimerInterval" Value="0"/>
|
||||
<Property Name="Data" Value=""/>
|
||||
<Property Name="Description" Value=""/>
|
||||
<Property Name="CoordParentID" Value="0"/>
|
||||
<Property Name="CoordParentPos" Value="0"/>
|
||||
<Property Name="CoordSelfPos" Value="0"/>
|
||||
<Property Name="CoordRelaX" Value="479"/>
|
||||
<Property Name="CoordRelaY" Value="542"/>
|
||||
<Property Name="SizeCalcMode" Value="2"/>
|
||||
<Property Name="SizeParentID" Value="93"/>
|
||||
<Property Name="WidthCalcMode" Value="1"/>
|
||||
<Property Name="SizeRelaWidth" Value="10000"/>
|
||||
<Property Name="HeightCalcMode" Value="1"/>
|
||||
<Property Name="SizeRelaHeight" Value="10000"/>
|
||||
</PropertyList>
|
||||
<OptionList>
|
||||
<Option Name="tag" Value="0"/>
|
||||
<Option Name="tag1" Value="0"/>
|
||||
<Option Name="tag2" Value="0"/>
|
||||
<Option Name="tag3" Value="0"/>
|
||||
<Option Name="vx" Value="0"/>
|
||||
<Option Name="vy" Value="0"/>
|
||||
<Option Name="vw" Value="0"/>
|
||||
<Option Name="vh" Value="0"/>
|
||||
</OptionList>
|
||||
<EventList>
|
||||
<Event Name="MouseDown" Value=""/>
|
||||
<Event Name="MouseUp" Value=""/>
|
||||
<Event Name="MouseMove" Value=""/>
|
||||
<Event Name="OnTimer" Value=""/>
|
||||
</EventList>
|
||||
</Spirit>
|
||||
<Spirit>
|
||||
<PropertyList>
|
||||
<Property Name="SpiritType" Value="0"/>
|
||||
<Property Name="ID" Value="249"/>
|
||||
<Property Name="Name" Value="协议内容"/>
|
||||
<Property Name="ImgResID" Value="94"/>
|
||||
<Property Name="X" Value="565"/>
|
||||
<Property Name="Y" Value="556"/>
|
||||
<Property Name="Width" Value="220"/>
|
||||
<Property Name="Height" Value="29"/>
|
||||
<Property Name="BelongLayerID" Value="2"/>
|
||||
<Property Name="IndexOfLayer" Value="5"/>
|
||||
<Property Name="BelongGroupID" Value="2"/>
|
||||
<Property Name="IsVisible" Value="1"/>
|
||||
<Property Name="CanClick" Value="1"/>
|
||||
<Property Name="CanDragSize" Value="0"/>
|
||||
<Property Name="TimerInterval" Value="0"/>
|
||||
<Property Name="Data" Value=""/>
|
||||
<Property Name="Description" Value=""/>
|
||||
<Property Name="CoordParentID" Value="0"/>
|
||||
<Property Name="CoordParentPos" Value="0"/>
|
||||
<Property Name="CoordSelfPos" Value="0"/>
|
||||
<Property Name="CoordRelaX" Value="565"/>
|
||||
<Property Name="CoordRelaY" Value="556"/>
|
||||
<Property Name="SizeCalcMode" Value="2"/>
|
||||
<Property Name="SizeParentID" Value="94"/>
|
||||
<Property Name="WidthCalcMode" Value="1"/>
|
||||
<Property Name="SizeRelaWidth" Value="10000"/>
|
||||
<Property Name="HeightCalcMode" Value="1"/>
|
||||
<Property Name="SizeRelaHeight" Value="10000"/>
|
||||
</PropertyList>
|
||||
<OptionList>
|
||||
<Option Name="tag" Value="0"/>
|
||||
<Option Name="tag1" Value="0"/>
|
||||
<Option Name="tag2" Value="0"/>
|
||||
<Option Name="tag3" Value="0"/>
|
||||
<Option Name="vx" Value="0"/>
|
||||
<Option Name="vy" Value="0"/>
|
||||
<Option Name="vw" Value="0"/>
|
||||
<Option Name="vh" Value="0"/>
|
||||
</OptionList>
|
||||
<EventList>
|
||||
<Event Name="MouseDown" Value=""/>
|
||||
<Event Name="MouseUp" Value=""/>
|
||||
<Event Name="MouseMove" Value=""/>
|
||||
<Event Name="OnTimer" Value=""/>
|
||||
</EventList>
|
||||
</Spirit>
|
||||
<Spirit>
|
||||
<PropertyList>
|
||||
<Property Name="SpiritType" Value="0"/>
|
||||
<Property Name="ID" Value="481"/>
|
||||
<Property Name="Name" Value="Spirit481"/>
|
||||
<Property Name="ImgResID" Value="10"/>
|
||||
<Property Name="X" Value="1160"/>
|
||||
<Property Name="Y" Value="0"/>
|
||||
<Property Name="Width" Value="120"/>
|
||||
<Property Name="Height" Value="120"/>
|
||||
<Property Name="BelongLayerID" Value="2"/>
|
||||
<Property Name="IndexOfLayer" Value="6"/>
|
||||
<Property Name="BelongGroupID" Value="2"/>
|
||||
<Property Name="IsVisible" Value="1"/>
|
||||
<Property Name="CanClick" Value="1"/>
|
||||
<Property Name="CanDragSize" Value="0"/>
|
||||
<Property Name="TimerInterval" Value="0"/>
|
||||
<Property Name="Data" Value=""/>
|
||||
<Property Name="Description" Value=""/>
|
||||
<Property Name="CoordParentID" Value="0"/>
|
||||
<Property Name="CoordParentPos" Value="0"/>
|
||||
<Property Name="CoordSelfPos" Value="0"/>
|
||||
<Property Name="CoordRelaX" Value="1160"/>
|
||||
<Property Name="CoordRelaY" Value="0"/>
|
||||
<Property Name="SizeCalcMode" Value="0"/>
|
||||
<Property Name="SizeParentID" Value="0"/>
|
||||
<Property Name="WidthCalcMode" Value="0"/>
|
||||
<Property Name="SizeRelaWidth" Value="120"/>
|
||||
<Property Name="HeightCalcMode" Value="0"/>
|
||||
<Property Name="SizeRelaHeight" Value="120"/>
|
||||
</PropertyList>
|
||||
<OptionList>
|
||||
<Option Name="tag" Value="0"/>
|
||||
<Option Name="tag1" Value="0"/>
|
||||
<Option Name="tag2" Value="0"/>
|
||||
<Option Name="tag3" Value="0"/>
|
||||
<Option Name="vx" Value="0"/>
|
||||
<Option Name="vy" Value="0"/>
|
||||
<Option Name="vw" Value="0"/>
|
||||
<Option Name="vh" Value="0"/>
|
||||
</OptionList>
|
||||
<EventList>
|
||||
<Event Name="MouseDown" Value=""/>
|
||||
<Event Name="MouseUp" Value=""/>
|
||||
<Event Name="MouseMove" Value=""/>
|
||||
<Event Name="OnTimer" Value=""/>
|
||||
</EventList>
|
||||
</Spirit>
|
||||
<Spirit>
|
||||
<PropertyList>
|
||||
<Property Name="SpiritType" Value="0"/>
|
||||
<Property Name="ID" Value="482"/>
|
||||
<Property Name="Name" Value="Spirit482"/>
|
||||
<Property Name="ImgResID" Value="10"/>
|
||||
<Property Name="X" Value="0"/>
|
||||
<Property Name="Y" Value="600"/>
|
||||
<Property Name="Width" Value="120"/>
|
||||
<Property Name="Height" Value="120"/>
|
||||
<Property Name="BelongLayerID" Value="2"/>
|
||||
<Property Name="IndexOfLayer" Value="7"/>
|
||||
<Property Name="BelongGroupID" Value="2"/>
|
||||
<Property Name="IsVisible" Value="1"/>
|
||||
<Property Name="CanClick" Value="1"/>
|
||||
<Property Name="CanDragSize" Value="0"/>
|
||||
<Property Name="TimerInterval" Value="0"/>
|
||||
<Property Name="Data" Value=""/>
|
||||
<Property Name="Description" Value=""/>
|
||||
<Property Name="CoordParentID" Value="0"/>
|
||||
<Property Name="CoordParentPos" Value="0"/>
|
||||
<Property Name="CoordSelfPos" Value="0"/>
|
||||
<Property Name="CoordRelaX" Value="0"/>
|
||||
<Property Name="CoordRelaY" Value="600"/>
|
||||
<Property Name="SizeCalcMode" Value="0"/>
|
||||
<Property Name="SizeParentID" Value="0"/>
|
||||
<Property Name="WidthCalcMode" Value="0"/>
|
||||
<Property Name="SizeRelaWidth" Value="120"/>
|
||||
<Property Name="HeightCalcMode" Value="0"/>
|
||||
<Property Name="SizeRelaHeight" Value="120"/>
|
||||
</PropertyList>
|
||||
<OptionList>
|
||||
<Option Name="tag" Value="0"/>
|
||||
<Option Name="tag1" Value="0"/>
|
||||
<Option Name="tag2" Value="0"/>
|
||||
<Option Name="tag3" Value="0"/>
|
||||
<Option Name="vx" Value="0"/>
|
||||
<Option Name="vy" Value="0"/>
|
||||
<Option Name="vw" Value="0"/>
|
||||
<Option Name="vh" Value="0"/>
|
||||
</OptionList>
|
||||
<EventList>
|
||||
<Event Name="MouseDown" Value=""/>
|
||||
<Event Name="MouseUp" Value=""/>
|
||||
<Event Name="MouseMove" Value=""/>
|
||||
<Event Name="OnTimer" Value=""/>
|
||||
</EventList>
|
||||
</Spirit>
|
||||
<Spirit>
|
||||
<PropertyList>
|
||||
<Property Name="SpiritType" Value="0"/>
|
||||
<Property Name="ID" Value="177"/>
|
||||
<Property Name="Name" Value="Spirit177"/>
|
||||
<Property Name="ImgResID" Value="177"/>
|
||||
<Property Name="X" Value="540"/>
|
||||
<Property Name="Y" Value="388"/>
|
||||
<Property Name="Width" Value="320"/>
|
||||
<Property Name="Height" Value="95"/>
|
||||
<Property Name="BelongLayerID" Value="2"/>
|
||||
<Property Name="IndexOfLayer" Value="8"/>
|
||||
<Property Name="BelongGroupID" Value="2"/>
|
||||
<Property Name="IsVisible" Value="1"/>
|
||||
<Property Name="CanClick" Value="1"/>
|
||||
<Property Name="CanDragSize" Value="0"/>
|
||||
<Property Name="TimerInterval" Value="0"/>
|
||||
<Property Name="Data" Value=""/>
|
||||
<Property Name="Description" Value=""/>
|
||||
<Property Name="CoordParentID" Value="0"/>
|
||||
<Property Name="CoordParentPos" Value="0"/>
|
||||
<Property Name="CoordSelfPos" Value="0"/>
|
||||
<Property Name="CoordRelaX" Value="540"/>
|
||||
<Property Name="CoordRelaY" Value="388"/>
|
||||
<Property Name="SizeCalcMode" Value="2"/>
|
||||
<Property Name="SizeParentID" Value="177"/>
|
||||
<Property Name="WidthCalcMode" Value="1"/>
|
||||
<Property Name="SizeRelaWidth" Value="10000"/>
|
||||
<Property Name="HeightCalcMode" Value="1"/>
|
||||
<Property Name="SizeRelaHeight" Value="10000"/>
|
||||
</PropertyList>
|
||||
<OptionList>
|
||||
<Option Name="tag" Value="0"/>
|
||||
<Option Name="tag1" Value="0"/>
|
||||
<Option Name="tag2" Value="0"/>
|
||||
<Option Name="tag3" Value="0"/>
|
||||
<Option Name="vx" Value="0"/>
|
||||
<Option Name="vy" Value="0"/>
|
||||
<Option Name="vw" Value="0"/>
|
||||
<Option Name="vh" Value="0"/>
|
||||
</OptionList>
|
||||
<EventList>
|
||||
<Event Name="MouseDown" Value=""/>
|
||||
<Event Name="MouseUp" Value=""/>
|
||||
<Event Name="MouseMove" Value=""/>
|
||||
<Event Name="OnTimer" Value=""/>
|
||||
</EventList>
|
||||
</Spirit>
|
||||
<Spirit>
|
||||
<PropertyList>
|
||||
<Property Name="SpiritType" Value="0"/>
|
||||
<Property Name="ID" Value="3"/>
|
||||
<Property Name="Name" Value="微信登录"/>
|
||||
<Property Name="ImgResID" Value="22"/>
|
||||
<Property Name="X" Value="258"/>
|
||||
<Property Name="Y" Value="384"/>
|
||||
<Property Name="Width" Value="400"/>
|
||||
<Property Name="Height" Value="116"/>
|
||||
<Property Name="BelongLayerID" Value="2"/>
|
||||
<Property Name="IndexOfLayer" Value="9"/>
|
||||
<Property Name="BelongGroupID" Value="2"/>
|
||||
<Property Name="IsVisible" Value="1"/>
|
||||
<Property Name="CanClick" Value="1"/>
|
||||
<Property Name="CanDragSize" Value="0"/>
|
||||
<Property Name="TimerInterval" Value="0"/>
|
||||
<Property Name="Data" Value=""/>
|
||||
<Property Name="Description" Value=""/>
|
||||
<Property Name="CoordParentID" Value="0"/>
|
||||
<Property Name="CoordParentPos" Value="0"/>
|
||||
<Property Name="CoordSelfPos" Value="0"/>
|
||||
<Property Name="CoordRelaX" Value="258"/>
|
||||
<Property Name="CoordRelaY" Value="384"/>
|
||||
<Property Name="SizeCalcMode" Value="2"/>
|
||||
<Property Name="SizeParentID" Value="22"/>
|
||||
<Property Name="WidthCalcMode" Value="1"/>
|
||||
<Property Name="SizeRelaWidth" Value="10000"/>
|
||||
<Property Name="HeightCalcMode" Value="1"/>
|
||||
<Property Name="SizeRelaHeight" Value="10000"/>
|
||||
</PropertyList>
|
||||
<OptionList>
|
||||
<Option Name="tag" Value="0"/>
|
||||
<Option Name="tag1" Value="0"/>
|
||||
<Option Name="tag2" Value="0"/>
|
||||
<Option Name="tag3" Value="0"/>
|
||||
<Option Name="vx" Value="0"/>
|
||||
<Option Name="vy" Value="0"/>
|
||||
<Option Name="vw" Value="0"/>
|
||||
<Option Name="vh" Value="0"/>
|
||||
</OptionList>
|
||||
<EventList>
|
||||
<Event Name="MouseDown" Value=""/>
|
||||
<Event Name="MouseUp" Value="3"/>
|
||||
<Event Name="MouseMove" Value=""/>
|
||||
<Event Name="OnTimer" Value=""/>
|
||||
</EventList>
|
||||
</Spirit>
|
||||
<Spirit>
|
||||
<PropertyList>
|
||||
<Property Name="SpiritType" Value="3"/>
|
||||
<Property Name="ID" Value="3254"/>
|
||||
<Property Name="Name" Value="Spirit3254"/>
|
||||
<Property Name="Frame" Value="1"/>
|
||||
<Property Name="ImgResID" Value="427"/>
|
||||
<Property Name="X" Value="342"/>
|
||||
<Property Name="Y" Value="393"/>
|
||||
<Property Name="Width" Value="301"/>
|
||||
<Property Name="Height" Value="97"/>
|
||||
<Property Name="BelongLayerID" Value="2"/>
|
||||
<Property Name="IndexOfLayer" Value="10"/>
|
||||
<Property Name="BelongGroupID" Value="2"/>
|
||||
<Property Name="IsVisible" Value="1"/>
|
||||
<Property Name="CanClick" Value="1"/>
|
||||
<Property Name="CanDragSize" Value="0"/>
|
||||
<Property Name="TimerInterval" Value="0"/>
|
||||
<Property Name="Data" Value=""/>
|
||||
<Property Name="Description" Value=""/>
|
||||
<Property Name="CoordParentID" Value="0"/>
|
||||
<Property Name="CoordParentPos" Value="0"/>
|
||||
<Property Name="CoordSelfPos" Value="0"/>
|
||||
<Property Name="CoordRelaX" Value="342"/>
|
||||
<Property Name="CoordRelaY" Value="393"/>
|
||||
<Property Name="SizeCalcMode" Value="2"/>
|
||||
<Property Name="SizeParentID" Value="427"/>
|
||||
<Property Name="WidthCalcMode" Value="1"/>
|
||||
<Property Name="SizeRelaWidth" Value="10000"/>
|
||||
<Property Name="HeightCalcMode" Value="1"/>
|
||||
<Property Name="SizeRelaHeight" Value="10000"/>
|
||||
</PropertyList>
|
||||
<OptionList>
|
||||
<Option Name="tag" Value="0"/>
|
||||
<Option Name="tag1" Value="0"/>
|
||||
<Option Name="tag2" Value="0"/>
|
||||
<Option Name="tag3" Value="0"/>
|
||||
<Option Name="vx" Value="0"/>
|
||||
<Option Name="vy" Value="0"/>
|
||||
<Option Name="vw" Value="0"/>
|
||||
<Option Name="vh" Value="0"/>
|
||||
</OptionList>
|
||||
<EventList>
|
||||
<Event Name="MouseDown" Value=""/>
|
||||
<Event Name="MouseUp" Value=""/>
|
||||
<Event Name="MouseMove" Value=""/>
|
||||
<Event Name="OnTimer" Value=""/>
|
||||
</EventList>
|
||||
</Spirit>
|
||||
<Spirit>
|
||||
<PropertyList>
|
||||
<Property Name="SpiritType" Value="3"/>
|
||||
<Property Name="ID" Value="3255"/>
|
||||
<Property Name="Name" Value="Spirit3255"/>
|
||||
<Property Name="Frame" Value="2"/>
|
||||
<Property Name="ImgResID" Value="427"/>
|
||||
<Property Name="X" Value="490"/>
|
||||
<Property Name="Y" Value="393"/>
|
||||
<Property Name="Width" Value="301"/>
|
||||
<Property Name="Height" Value="97"/>
|
||||
<Property Name="BelongLayerID" Value="2"/>
|
||||
<Property Name="IndexOfLayer" Value="11"/>
|
||||
<Property Name="BelongGroupID" Value="2"/>
|
||||
<Property Name="IsVisible" Value="1"/>
|
||||
<Property Name="CanClick" Value="1"/>
|
||||
<Property Name="CanDragSize" Value="0"/>
|
||||
<Property Name="TimerInterval" Value="0"/>
|
||||
<Property Name="Data" Value=""/>
|
||||
<Property Name="Description" Value=""/>
|
||||
<Property Name="CoordParentID" Value="0"/>
|
||||
<Property Name="CoordParentPos" Value="0"/>
|
||||
<Property Name="CoordSelfPos" Value="0"/>
|
||||
<Property Name="CoordRelaX" Value="490"/>
|
||||
<Property Name="CoordRelaY" Value="393"/>
|
||||
<Property Name="SizeCalcMode" Value="2"/>
|
||||
<Property Name="SizeParentID" Value="427"/>
|
||||
<Property Name="WidthCalcMode" Value="1"/>
|
||||
<Property Name="SizeRelaWidth" Value="10000"/>
|
||||
<Property Name="HeightCalcMode" Value="1"/>
|
||||
<Property Name="SizeRelaHeight" Value="10000"/>
|
||||
</PropertyList>
|
||||
<OptionList>
|
||||
<Option Name="tag" Value="0"/>
|
||||
<Option Name="tag1" Value="0"/>
|
||||
<Option Name="tag2" Value="0"/>
|
||||
<Option Name="tag3" Value="0"/>
|
||||
<Option Name="vx" Value="0"/>
|
||||
<Option Name="vy" Value="0"/>
|
||||
<Option Name="vw" Value="0"/>
|
||||
<Option Name="vh" Value="0"/>
|
||||
</OptionList>
|
||||
<EventList>
|
||||
<Event Name="MouseDown" Value=""/>
|
||||
<Event Name="MouseUp" Value=""/>
|
||||
<Event Name="MouseMove" Value=""/>
|
||||
<Event Name="OnTimer" Value=""/>
|
||||
</EventList>
|
||||
</Spirit>
|
||||
<Spirit>
|
||||
<PropertyList>
|
||||
<Property Name="SpiritType" Value="3"/>
|
||||
<Property Name="ID" Value="106"/>
|
||||
<Property Name="Name" Value="Spirit106"/>
|
||||
<Property Name="Frame" Value="1"/>
|
||||
<Property Name="ImgResID" Value="376"/>
|
||||
<Property Name="X" Value="846"/>
|
||||
<Property Name="Y" Value="529"/>
|
||||
<Property Name="Width" Value="100"/>
|
||||
<Property Name="Height" Value="101"/>
|
||||
<Property Name="BelongLayerID" Value="2"/>
|
||||
<Property Name="IndexOfLayer" Value="12"/>
|
||||
<Property Name="BelongGroupID" Value="2"/>
|
||||
<Property Name="IsVisible" Value="1"/>
|
||||
<Property Name="CanClick" Value="1"/>
|
||||
<Property Name="CanDragSize" Value="0"/>
|
||||
<Property Name="TimerInterval" Value="0"/>
|
||||
<Property Name="Data" Value=""/>
|
||||
<Property Name="Description" Value=""/>
|
||||
<Property Name="CoordParentID" Value="0"/>
|
||||
<Property Name="CoordParentPos" Value="0"/>
|
||||
<Property Name="CoordSelfPos" Value="0"/>
|
||||
<Property Name="CoordRelaX" Value="846"/>
|
||||
<Property Name="CoordRelaY" Value="529"/>
|
||||
<Property Name="SizeCalcMode" Value="2"/>
|
||||
<Property Name="SizeParentID" Value="376"/>
|
||||
<Property Name="WidthCalcMode" Value="1"/>
|
||||
<Property Name="SizeRelaWidth" Value="10000"/>
|
||||
<Property Name="HeightCalcMode" Value="1"/>
|
||||
<Property Name="SizeRelaHeight" Value="10000"/>
|
||||
</PropertyList>
|
||||
<OptionList>
|
||||
<Option Name="tag" Value="0"/>
|
||||
<Option Name="tag1" Value="0"/>
|
||||
<Option Name="tag2" Value="0"/>
|
||||
<Option Name="tag3" Value="0"/>
|
||||
<Option Name="vx" Value="0"/>
|
||||
<Option Name="vy" Value="0"/>
|
||||
<Option Name="vw" Value="0"/>
|
||||
<Option Name="vh" Value="0"/>
|
||||
</OptionList>
|
||||
<EventList>
|
||||
<Event Name="MouseDown" Value=""/>
|
||||
<Event Name="MouseUp" Value=""/>
|
||||
<Event Name="MouseMove" Value=""/>
|
||||
<Event Name="OnTimer" Value=""/>
|
||||
</EventList>
|
||||
</Spirit>
|
||||
<Spirit>
|
||||
<PropertyList>
|
||||
<Property Name="SpiritType" Value="0"/>
|
||||
<Property Name="ID" Value="158"/>
|
||||
<Property Name="Name" Value="登录中遮罩"/>
|
||||
<Property Name="ImgResID" Value="10"/>
|
||||
<Property Name="X" Value="0"/>
|
||||
<Property Name="Y" Value="0"/>
|
||||
<Property Name="Width" Value="1280"/>
|
||||
<Property Name="Height" Value="720"/>
|
||||
<Property Name="BelongLayerID" Value="2"/>
|
||||
<Property Name="IndexOfLayer" Value="13"/>
|
||||
<Property Name="BelongGroupID" Value="2"/>
|
||||
<Property Name="IsVisible" Value="0"/>
|
||||
<Property Name="CanClick" Value="1"/>
|
||||
<Property Name="CanDragSize" Value="0"/>
|
||||
<Property Name="TimerInterval" Value="0"/>
|
||||
<Property Name="Data" Value=""/>
|
||||
<Property Name="Description" Value=""/>
|
||||
<Property Name="CoordParentID" Value="0"/>
|
||||
<Property Name="CoordParentPos" Value="0"/>
|
||||
<Property Name="CoordSelfPos" Value="0"/>
|
||||
<Property Name="CoordRelaX" Value="0"/>
|
||||
<Property Name="CoordRelaY" Value="0"/>
|
||||
<Property Name="SizeCalcMode" Value="0"/>
|
||||
<Property Name="SizeParentID" Value="0"/>
|
||||
<Property Name="WidthCalcMode" Value="0"/>
|
||||
<Property Name="SizeRelaWidth" Value="1280"/>
|
||||
<Property Name="HeightCalcMode" Value="0"/>
|
||||
<Property Name="SizeRelaHeight" Value="720"/>
|
||||
</PropertyList>
|
||||
<OptionList>
|
||||
<Option Name="tag" Value="0"/>
|
||||
<Option Name="tag1" Value="0"/>
|
||||
<Option Name="tag2" Value="0"/>
|
||||
<Option Name="tag3" Value="0"/>
|
||||
<Option Name="vx" Value="0"/>
|
||||
<Option Name="vy" Value="0"/>
|
||||
<Option Name="vw" Value="0"/>
|
||||
<Option Name="vh" Value="0"/>
|
||||
</OptionList>
|
||||
<EventList>
|
||||
<Event Name="MouseDown" Value=""/>
|
||||
<Event Name="MouseUp" Value="158"/>
|
||||
<Event Name="MouseMove" Value=""/>
|
||||
<Event Name="OnTimer" Value=""/>
|
||||
</EventList>
|
||||
</Spirit>
|
||||
<Spirit>
|
||||
<PropertyList>
|
||||
<Property Name="SpiritType" Value="5"/>
|
||||
<Property Name="ID" Value="159"/>
|
||||
<Property Name="Name" Value="Spirit159"/>
|
||||
<Property Name="LeftEdge" Value="100"/>
|
||||
<Property Name="TopEdge" Value="80"/>
|
||||
<Property Name="RightEdge" Value="100"/>
|
||||
<Property Name="BottomEdge" Value="80"/>
|
||||
<Property Name="ImgResID" Value="54"/>
|
||||
<Property Name="X" Value="455"/>
|
||||
<Property Name="Y" Value="351"/>
|
||||
<Property Name="Width" Value="370"/>
|
||||
<Property Name="Height" Value="170"/>
|
||||
<Property Name="BelongLayerID" Value="2"/>
|
||||
<Property Name="IndexOfLayer" Value="14"/>
|
||||
<Property Name="BelongGroupID" Value="2"/>
|
||||
<Property Name="IsVisible" Value="0"/>
|
||||
<Property Name="CanClick" Value="1"/>
|
||||
<Property Name="CanDragSize" Value="1"/>
|
||||
<Property Name="TimerInterval" Value="0"/>
|
||||
<Property Name="Data" Value=""/>
|
||||
<Property Name="Description" Value=""/>
|
||||
<Property Name="CoordParentID" Value="0"/>
|
||||
<Property Name="CoordParentPos" Value="0"/>
|
||||
<Property Name="CoordSelfPos" Value="0"/>
|
||||
<Property Name="CoordRelaX" Value="455"/>
|
||||
<Property Name="CoordRelaY" Value="351"/>
|
||||
<Property Name="SizeCalcMode" Value="0"/>
|
||||
<Property Name="SizeParentID" Value="0"/>
|
||||
<Property Name="WidthCalcMode" Value="0"/>
|
||||
<Property Name="SizeRelaWidth" Value="370"/>
|
||||
<Property Name="HeightCalcMode" Value="0"/>
|
||||
<Property Name="SizeRelaHeight" Value="170"/>
|
||||
</PropertyList>
|
||||
<OptionList>
|
||||
<Option Name="tag" Value="0"/>
|
||||
<Option Name="tag1" Value="0"/>
|
||||
<Option Name="tag2" Value="0"/>
|
||||
<Option Name="tag3" Value="0"/>
|
||||
<Option Name="vx" Value="0"/>
|
||||
<Option Name="vy" Value="0"/>
|
||||
<Option Name="vw" Value="0"/>
|
||||
<Option Name="vh" Value="0"/>
|
||||
</OptionList>
|
||||
<EventList>
|
||||
<Event Name="MouseDown" Value=""/>
|
||||
<Event Name="MouseUp" Value=""/>
|
||||
<Event Name="MouseMove" Value=""/>
|
||||
<Event Name="OnTimer" Value=""/>
|
||||
</EventList>
|
||||
</Spirit>
|
||||
<Spirit>
|
||||
<PropertyList>
|
||||
<Property Name="SpiritType" Value="0"/>
|
||||
<Property Name="ID" Value="160"/>
|
||||
<Property Name="Name" Value="登录中头像"/>
|
||||
<Property Name="ImgResID" Value="25"/>
|
||||
<Property Name="X" Value="491"/>
|
||||
<Property Name="Y" Value="387"/>
|
||||
<Property Name="Width" Value="96"/>
|
||||
<Property Name="Height" Value="96"/>
|
||||
<Property Name="BelongLayerID" Value="2"/>
|
||||
<Property Name="IndexOfLayer" Value="15"/>
|
||||
<Property Name="BelongGroupID" Value="2"/>
|
||||
<Property Name="IsVisible" Value="1"/>
|
||||
<Property Name="CanClick" Value="1"/>
|
||||
<Property Name="CanDragSize" Value="0"/>
|
||||
<Property Name="TimerInterval" Value="0"/>
|
||||
<Property Name="Data" Value=""/>
|
||||
<Property Name="Description" Value=""/>
|
||||
<Property Name="CoordParentID" Value="0"/>
|
||||
<Property Name="CoordParentPos" Value="0"/>
|
||||
<Property Name="CoordSelfPos" Value="0"/>
|
||||
<Property Name="CoordRelaX" Value="491"/>
|
||||
<Property Name="CoordRelaY" Value="387"/>
|
||||
<Property Name="SizeCalcMode" Value="0"/>
|
||||
<Property Name="SizeParentID" Value="0"/>
|
||||
<Property Name="WidthCalcMode" Value="0"/>
|
||||
<Property Name="SizeRelaWidth" Value="96"/>
|
||||
<Property Name="HeightCalcMode" Value="0"/>
|
||||
<Property Name="SizeRelaHeight" Value="96"/>
|
||||
</PropertyList>
|
||||
<OptionList>
|
||||
<Option Name="tag" Value="0"/>
|
||||
<Option Name="tag1" Value="0"/>
|
||||
<Option Name="tag2" Value="0"/>
|
||||
<Option Name="tag3" Value="0"/>
|
||||
<Option Name="vx" Value="0"/>
|
||||
<Option Name="vy" Value="0"/>
|
||||
<Option Name="vw" Value="0"/>
|
||||
<Option Name="vh" Value="0"/>
|
||||
</OptionList>
|
||||
<EventList>
|
||||
<Event Name="MouseDown" Value=""/>
|
||||
<Event Name="MouseUp" Value=""/>
|
||||
<Event Name="MouseMove" Value=""/>
|
||||
<Event Name="OnTimer" Value=""/>
|
||||
</EventList>
|
||||
</Spirit>
|
||||
<Spirit>
|
||||
<PropertyList>
|
||||
<Property Name="SpiritType" Value="1"/>
|
||||
<Property Name="ID" Value="324"/>
|
||||
<Property Name="Name" Value="登录中昵称"/>
|
||||
<Property Name="FontSize" Value="16"/>
|
||||
<Property Name="FontBold" Value="0"/>
|
||||
<Property Name="FontColor" Value="0"/>
|
||||
<Property Name="FontColorA" Value="255"/>
|
||||
<Property Name="BackColor" Value="16777215"/>
|
||||
<Property Name="BackColorA" Value="0"/>
|
||||
<Property Name="AutoSize" Value="1"/>
|
||||
<Property Name="TextStyle" Value="0"/>
|
||||
<Property Name="WordWrap" Value="0"/>
|
||||
<Property Name="LineSpace" Value="0"/>
|
||||
<Property Name="AlignHorz" Value="0"/>
|
||||
<Property Name="AlignVert" Value="0"/>
|
||||
<Property Name="Text" Value="等"/>
|
||||
<Property Name="X" Value="697"/>
|
||||
<Property Name="Y" Value="392"/>
|
||||
<Property Name="Width" Value="21"/>
|
||||
<Property Name="Height" Value="28"/>
|
||||
<Property Name="BelongLayerID" Value="2"/>
|
||||
<Property Name="IndexOfLayer" Value="16"/>
|
||||
<Property Name="BelongGroupID" Value="2"/>
|
||||
<Property Name="IsVisible" Value="1"/>
|
||||
<Property Name="CanClick" Value="1"/>
|
||||
<Property Name="CanDragSize" Value="0"/>
|
||||
<Property Name="TimerInterval" Value="0"/>
|
||||
<Property Name="Data" Value=""/>
|
||||
<Property Name="Description" Value=""/>
|
||||
<Property Name="CoordParentID" Value="0"/>
|
||||
<Property Name="CoordParentPos" Value="0"/>
|
||||
<Property Name="CoordSelfPos" Value="0"/>
|
||||
<Property Name="CoordRelaX" Value="697"/>
|
||||
<Property Name="CoordRelaY" Value="392"/>
|
||||
<Property Name="SizeCalcMode" Value="0"/>
|
||||
<Property Name="SizeParentID" Value="0"/>
|
||||
<Property Name="WidthCalcMode" Value="0"/>
|
||||
<Property Name="SizeRelaWidth" Value="21"/>
|
||||
<Property Name="HeightCalcMode" Value="0"/>
|
||||
<Property Name="SizeRelaHeight" Value="28"/>
|
||||
</PropertyList>
|
||||
<OptionList>
|
||||
<Option Name="tag" Value="0"/>
|
||||
<Option Name="tag1" Value="0"/>
|
||||
<Option Name="tag2" Value="0"/>
|
||||
<Option Name="tag3" Value="0"/>
|
||||
<Option Name="vx" Value="0"/>
|
||||
<Option Name="vy" Value="0"/>
|
||||
<Option Name="vw" Value="0"/>
|
||||
<Option Name="vh" Value="0"/>
|
||||
</OptionList>
|
||||
<EventList>
|
||||
<Event Name="MouseDown" Value=""/>
|
||||
<Event Name="MouseUp" Value=""/>
|
||||
<Event Name="MouseMove" Value=""/>
|
||||
<Event Name="OnTimer" Value=""/>
|
||||
</EventList>
|
||||
</Spirit>
|
||||
<Spirit>
|
||||
<PropertyList>
|
||||
<Property Name="SpiritType" Value="3"/>
|
||||
<Property Name="ID" Value="325"/>
|
||||
<Property Name="Name" Value="登录中动画"/>
|
||||
<Property Name="Frame" Value="1"/>
|
||||
<Property Name="ImgResID" Value="107"/>
|
||||
<Property Name="X" Value="624"/>
|
||||
<Property Name="Y" Value="451"/>
|
||||
<Property Name="Width" Value="178"/>
|
||||
<Property Name="Height" Value="30"/>
|
||||
<Property Name="BelongLayerID" Value="2"/>
|
||||
<Property Name="IndexOfLayer" Value="17"/>
|
||||
<Property Name="BelongGroupID" Value="2"/>
|
||||
<Property Name="IsVisible" Value="1"/>
|
||||
<Property Name="CanClick" Value="1"/>
|
||||
<Property Name="CanDragSize" Value="0"/>
|
||||
<Property Name="TimerInterval" Value="0"/>
|
||||
<Property Name="Data" Value=""/>
|
||||
<Property Name="Description" Value=""/>
|
||||
<Property Name="CoordParentID" Value="0"/>
|
||||
<Property Name="CoordParentPos" Value="0"/>
|
||||
<Property Name="CoordSelfPos" Value="0"/>
|
||||
<Property Name="CoordRelaX" Value="624"/>
|
||||
<Property Name="CoordRelaY" Value="451"/>
|
||||
<Property Name="SizeCalcMode" Value="2"/>
|
||||
<Property Name="SizeParentID" Value="107"/>
|
||||
<Property Name="WidthCalcMode" Value="1"/>
|
||||
<Property Name="SizeRelaWidth" Value="10000"/>
|
||||
<Property Name="HeightCalcMode" Value="1"/>
|
||||
<Property Name="SizeRelaHeight" Value="10000"/>
|
||||
</PropertyList>
|
||||
<OptionList>
|
||||
<Option Name="tag" Value="0"/>
|
||||
<Option Name="tag1" Value="0"/>
|
||||
<Option Name="tag2" Value="0"/>
|
||||
<Option Name="tag3" Value="0"/>
|
||||
<Option Name="vx" Value="0"/>
|
||||
<Option Name="vy" Value="0"/>
|
||||
<Option Name="vw" Value="0"/>
|
||||
<Option Name="vh" Value="0"/>
|
||||
</OptionList>
|
||||
<EventList>
|
||||
<Event Name="MouseDown" Value=""/>
|
||||
<Event Name="MouseUp" Value=""/>
|
||||
<Event Name="MouseMove" Value=""/>
|
||||
<Event Name="OnTimer" Value=""/>
|
||||
</EventList>
|
||||
</Spirit>
|
||||
<Spirit>
|
||||
<PropertyList>
|
||||
<Property Name="SpiritType" Value="0"/>
|
||||
<Property Name="ID" Value="323"/>
|
||||
<Property Name="Name" Value="登录中头像框"/>
|
||||
<Property Name="ImgResID" Value="106"/>
|
||||
<Property Name="X" Value="479"/>
|
||||
<Property Name="Y" Value="375"/>
|
||||
<Property Name="Width" Value="120"/>
|
||||
<Property Name="Height" Value="120"/>
|
||||
<Property Name="BelongLayerID" Value="2"/>
|
||||
<Property Name="IndexOfLayer" Value="18"/>
|
||||
<Property Name="BelongGroupID" Value="2"/>
|
||||
<Property Name="IsVisible" Value="0"/>
|
||||
<Property Name="CanClick" Value="1"/>
|
||||
<Property Name="CanDragSize" Value="0"/>
|
||||
<Property Name="TimerInterval" Value="0"/>
|
||||
<Property Name="Data" Value=""/>
|
||||
<Property Name="Description" Value=""/>
|
||||
<Property Name="CoordParentID" Value="0"/>
|
||||
<Property Name="CoordParentPos" Value="0"/>
|
||||
<Property Name="CoordSelfPos" Value="0"/>
|
||||
<Property Name="CoordRelaX" Value="479"/>
|
||||
<Property Name="CoordRelaY" Value="375"/>
|
||||
<Property Name="SizeCalcMode" Value="0"/>
|
||||
<Property Name="SizeParentID" Value="0"/>
|
||||
<Property Name="WidthCalcMode" Value="0"/>
|
||||
<Property Name="SizeRelaWidth" Value="120"/>
|
||||
<Property Name="HeightCalcMode" Value="0"/>
|
||||
<Property Name="SizeRelaHeight" Value="120"/>
|
||||
</PropertyList>
|
||||
<OptionList>
|
||||
<Option Name="tag" Value="0"/>
|
||||
<Option Name="tag1" Value="0"/>
|
||||
<Option Name="tag2" Value="0"/>
|
||||
<Option Name="tag3" Value="0"/>
|
||||
<Option Name="vx" Value="0"/>
|
||||
<Option Name="vy" Value="0"/>
|
||||
<Option Name="vw" Value="0"/>
|
||||
<Option Name="vh" Value="0"/>
|
||||
</OptionList>
|
||||
<EventList>
|
||||
<Event Name="MouseDown" Value=""/>
|
||||
<Event Name="MouseUp" Value=""/>
|
||||
<Event Name="MouseMove" Value=""/>
|
||||
<Event Name="OnTimer" Value=""/>
|
||||
</EventList>
|
||||
</Spirit>
|
||||
</SpiritList>
|
||||
</Layer>
|
||||
+3519
File diff suppressed because it is too large
Load Diff
+4394
File diff suppressed because it is too large
Load Diff
+63
@@ -0,0 +1,63 @@
|
||||
{
|
||||
"_comment": "gameabc.min.js 逆向结果(PoC 阶段 1, 2026-09-02). 数据源权威: 下游消费方不得猜测/修补/兜底, unknown → throw.",
|
||||
"spirit_types": {
|
||||
"0": {
|
||||
"component": "cc.Sprite",
|
||||
"note": "普通精灵; _type=0 (SIMPLE), _sizeMode=0",
|
||||
"evidence": "Game_Surface_3 save/Layer*.xml 中 type=0 的 spirit 均含 ImgResID (sprite 图集索引) + BelongGroupID, 无独有属性; YouleNexus Login_Layer.prefab 的普通 sprite (_type=0, _sizeMode=0) 与 type=0 spirit 一一对应"
|
||||
},
|
||||
"1": {
|
||||
"component": "cc.Label",
|
||||
"note": "文本标签; 含 Text/FontSize/AlignHorz/FontColor/BackColor 等独有属性",
|
||||
"evidence": "Game_Surface_3 中 type=1 spirit 独有 Text/FontSize/FontBold/FontColor/BackColor/AlignHorz/AlignVert/AutoSize/WordWrap/LineSpace/TextStyle 这 11 个属性; 全量 XML 解析 38/55 Layer 含 type=1; 与 YouleNexus Login_Layer 中 cc.Label 节点字段对齐"
|
||||
},
|
||||
"3": {
|
||||
"component": "cc.ProgressBar",
|
||||
"note": "进度条; 含 Frame 属性 (frame=进度 0-1 范围 或 frame id)",
|
||||
"evidence": "Game_Surface_3 中 type=3 spirit 独有 Frame 属性 (例如 Layer00002 'Spirit3254' Frame=进度条); 45/55 Layer 含 type=3; 与 YouleNexus Login_Layer.prefab 中 '进度条底' cc.ProgressBar 节点对应"
|
||||
},
|
||||
"4": {
|
||||
"component": "cc.EditBox",
|
||||
"note": "文本输入框; 独有属性 FrameText (默认/显示文本); CanClick=1; 含 ImgResID (背景图); CanDragSize=0",
|
||||
"evidence": "Game_Surface_3 中 type=4 spirit 独有 FrameText 属性 (e.g. Layer00029 phoneInfo Spirit3246 FrameText='12' Spirit3247 FrameText='1' / Layer00014 Pay_Layer Spirit446 FrameText='12'); 15/55 Layer 含 type=4; YouleNexus Group106_PhoneVerify.prefab (映射到 Layer00029.xml phoneInfo) 含 1 个 cc.EditBox 节点, 与 type=4 的 FrameText 输入框语义一致 (phoneInfo 是手机号/验证码输入场景)"
|
||||
},
|
||||
"5": {
|
||||
"component": "cc.Sprite",
|
||||
"note": "9-slice 缩放精灵; 独有属性 LeftEdge/TopEdge/RightEdge/BottomEdge (4 个边缘宽度); CanClick=1, CanDragSize=1; Cocos 映射: cc.Sprite._type = 1 (SLICED)",
|
||||
"evidence": "Game_Surface_3 中 type=5 spirit 独有 LeftEdge/TopEdge/RightEdge/BottomEdge 属性 (Layer00002 Spirit159 (100/80/100/80, 隐式) / Layer00006 Spirit287 (70/1/70/1) / Layer00017 '个人信息背景' (70/70/70/70) / Layer00609 '设置背景' (100/134/100/135) / Layer00612 Tips_Layer 5 个 type=5 边缘容器); 39/55 Layer 含 type=5; YouleNexus Login_Layer.prefab 中唯一一个 cc.Sprite._type=1 (SLICED) 节点的 _contentSize 是 370×170, 严格匹配 Layer00002 Spirit159 Width=370 Height=170 — 同一个节点, 1:1 对应; YouleNexus Layer609_Setting.prefab 中 cc.Sprite._type=1 对应 Layer00609 '设置背景' (9-slice 边缘切片背景); 4 个边缘宽度正是 9-slice 缩放 slice 区域定义"
|
||||
}
|
||||
},
|
||||
"size_calc_mode": {
|
||||
"_comment": "55 个 Layer 全量解析: 只观察到 SizeCalcMode = 0 和 2 两种值; 0 直接读 Width/Height, 2 通过 SizeParentID 引用父 Spirit 尺寸再乘以 SizeRelaWidth/SizeRelaHeight (万分比) 比率; WidthCalcMode/HeightCalcMode=1 表示启用相对宽度/高度 (SizeRelaXxx 字段), =0 表示使用 Width/Height 自身.",
|
||||
"0": {
|
||||
"formula": "_contentSize = { width: parseFloat(Spirit.Width), height: parseFloat(Spirit.Height) }",
|
||||
"rationale": "直接读精灵自身 Width/Height 字段作为 _contentSize; gameabc.min.js 中 SizeCalcMode=0 是最简路径 (背景图 Layer00001/00002 全屏 1280×720 即此路径)"
|
||||
},
|
||||
"2": {
|
||||
"formula": "image_natural_size = lookup gameabc_Image.json ImageFileList[imgResID === Spirit.ImgResID].w_all/h_all; parent_size = { width: image_natural_size.width, height: image_natural_size.height }; _contentSize = { width: parent_size.width * Spirit.SizeRelaWidth / 10000, height: parent_size.height * Spirit.SizeRelaHeight / 10000 }; 当 WidthCalcMode=0 时回退到 Spirit.Width (parseFloat), 当 WidthCalcMode=1 时用 SizeRelaWidth 公式; HeightCalcMode 同理",
|
||||
"rationale": "Layer00001 '友乐背景' (SizeCalcMode=2, SizeParentID=21, SizeRelaWidth=10000) / Layer00002 '微信登录背景' (SizeCalcMode=2, SizeParentID=20, SizeRelaWidth=10000) 全量采样: 全部 WidthCalcMode=1, HeightCalcMode=1, SizeRelaWidth=10000, SizeRelaHeight=10000; 即按 100% 比例继承父 spirit 尺寸; 这种 pattern 用于 '充满父容器' 的背景 (1280×720 全屏背景), SizeParentID 指向另一个 1280×720 的 spirit"
|
||||
}
|
||||
},
|
||||
"width_calc_mode": {
|
||||
"0": "use Spirit.Width directly (直接读 Width)",
|
||||
"1": "use parent_size.width * Spirit.SizeRelaWidth / 10000 (按父尺寸比例计算)"
|
||||
},
|
||||
"height_calc_mode": {
|
||||
"0": "use Spirit.Height directly (直接读 Height)",
|
||||
"1": "use parent_size.height * Spirit.SizeRelaHeight / 10000 (按父尺寸比例计算)"
|
||||
},
|
||||
"coord_self_pos": {
|
||||
"_note": "原 X, Y 是精灵左上角绝对屏幕坐标 (基于 1280x720); Cocos 用中心锚点",
|
||||
"cocos_lpos_x": "original_X + original_W/2 - 640",
|
||||
"cocos_lpos_y": "360 - (original_Y + original_H/2)",
|
||||
"coord_self_pos_mode": {
|
||||
"_note": "CoordSelfPos=0 在 55 个 Layer 全量中占绝对多数; CoordSelfPos > 0 的精灵 (例如相对父节点的偏移) 暂未观察到案例, 公式留 follow-up",
|
||||
"0": "use X/Y 作为相对父节点偏移 (直接读, 见 coord_self_pos 公式)"
|
||||
}
|
||||
},
|
||||
"anchor_point": {
|
||||
"cocos_default": { "x": 0.5, "y": 0.5 },
|
||||
"original_default": "左上角 (0, 0)",
|
||||
"evidence": "Login_Layer '渠道logo' 节点 (原 734,143,59,148) → Cocos _lpos (123.5, 143, 0) 1:1 匹配, 锚点 (0.5, 0.5) 验证通过"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
import { test } from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import { buildGroupParents } from '../../scripts/legacy-layer-to-cocos-prefab.mjs';
|
||||
|
||||
test('buildGroupParents 把同 group Spirit 归类', () => {
|
||||
const spirits = [
|
||||
{ id: '1', group: '2', indexOfLayer: '1' },
|
||||
{ id: '405', group: '2', indexOfLayer: '2' },
|
||||
{ id: '285', group: '2', indexOfLayer: '3' },
|
||||
];
|
||||
const result = buildGroupParents(spirits);
|
||||
assert.equal(result.groupParents.length, 1, '只有一个 group=2');
|
||||
assert.equal(result.groupParents[0].name, 'group-2');
|
||||
assert.deepEqual(result.groupParents[0].childSpiritIds, ['1', '405', '285']);
|
||||
assert.equal(result.rootChildSpiritIds.length, 0);
|
||||
});
|
||||
|
||||
test('buildGroupParents 多 group 按 ID 升序', () => {
|
||||
const spirits = [
|
||||
{ id: '1', group: '32', indexOfLayer: '1' },
|
||||
{ id: '2', group: '1', indexOfLayer: '2' },
|
||||
{ id: '3', group: '1', indexOfLayer: '3' },
|
||||
];
|
||||
const result = buildGroupParents(spirits);
|
||||
assert.deepEqual(result.groupParents.map(g => g.name), ['group-1', 'group-32']);
|
||||
});
|
||||
|
||||
test('buildGroupParents group=0 Spirit 直挂 Layer 根', () => {
|
||||
const spirits = [
|
||||
{ id: '10', group: '0', indexOfLayer: '1' },
|
||||
{ id: '20', group: '0', indexOfLayer: '2' },
|
||||
{ id: '30', group: '2', indexOfLayer: '3' },
|
||||
];
|
||||
const result = buildGroupParents(spirits);
|
||||
assert.equal(result.groupParents.length, 1);
|
||||
assert.deepEqual(result.rootChildSpiritIds, ['10', '20']);
|
||||
});
|
||||
|
||||
test('buildGroupParents 按 IndexOfLayer 排序子节点', () => {
|
||||
const spirits = [
|
||||
{ id: 'c', group: '1', indexOfLayer: '3' },
|
||||
{ id: 'a', group: '1', indexOfLayer: '1' },
|
||||
{ id: 'b', group: '1', indexOfLayer: '2' },
|
||||
];
|
||||
const result = buildGroupParents(spirits);
|
||||
assert.deepEqual(result.groupParents[0].childSpiritIds, ['a', 'b', 'c']);
|
||||
});
|
||||
@@ -0,0 +1,44 @@
|
||||
import { test } from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import { execSync } from 'node:child_process';
|
||||
import { existsSync, readFileSync } from 'node:fs';
|
||||
|
||||
// PoC 阶段 1 端到端: Layer00619 BackHall_Layer (1 Spirit, type=3 ProgressBar) →
|
||||
// prefab JSON + (diff, if any) → 关键字段校验.
|
||||
//
|
||||
// 注: 原 brief 建议 IconButton, 但 IconButton 无对应 Layer; spec 改用 BackHall_Layer
|
||||
// 作为最简 1-Spirit PoC. Target YouleNexus prefab 不存在时 CLI 仅生成 prefab, 不报错.
|
||||
//
|
||||
// 路径从 cocoscreator_projects/ 运行 (与其他 legacy-layer-migration 测试一致).
|
||||
const CLI = 'node scripts/legacy-layer-to-cocos-prefab-cli.mjs';
|
||||
const INPUT = '../projects/Game_Surface_3/save/Layer00619.xml';
|
||||
const TARGET = 'YouleNexus/assets/framework/ui/prefabs/widgets/Layer619_BackOtherGame.prefab';
|
||||
const OUTPUT_DIR = 'YouleNexus/out/legacy-migration/';
|
||||
const OUTPUT = 'YouleNexus/out/legacy-migration/BackHall_Layer.prefab';
|
||||
|
||||
test('Layer00619 端到端生成 + 校验关键字段', () => {
|
||||
execSync(`${CLI} ${INPUT} ${TARGET} ${OUTPUT_DIR}`, { stdio: 'pipe' });
|
||||
|
||||
assert.ok(existsSync(OUTPUT), `${OUTPUT} 应生成`);
|
||||
const json = JSON.parse(readFileSync(OUTPUT, 'utf8'));
|
||||
assert.ok(Array.isArray(json));
|
||||
assert.equal(json[0].__type__, 'cc.Prefab');
|
||||
assert.equal(json[0]._name, 'BackHall_Layer');
|
||||
|
||||
// 校验含 group-55 父节点 (BackHall_Layer.xml Spirit BelongGroupID=55).
|
||||
const groupNode = json.find(o => o.__type__ === 'cc.Node' && o._name === 'group-55');
|
||||
assert.ok(groupNode, '应有 group-55 父节点');
|
||||
});
|
||||
|
||||
test('Layer00619 端到端 - root._children 包含 group-55', () => {
|
||||
execSync(`${CLI} ${INPUT} ${TARGET} ${OUTPUT_DIR}`, { stdio: 'pipe' });
|
||||
const json = JSON.parse(readFileSync(OUTPUT, 'utf8'));
|
||||
const rootNode = json.find(o => o.__type__ === 'cc.Node' && o._name === 'BackHall_Layer');
|
||||
const groupNode = json.find(o => o.__type__ === 'cc.Node' && o._name === 'group-55');
|
||||
assert.ok(rootNode, '应有 root node');
|
||||
assert.ok(groupNode, '应有 group-55 node');
|
||||
// The fix: root._children must reference group-55
|
||||
const childIds = (rootNode._children || []).map(c => c.__id__);
|
||||
assert.ok(childIds.includes(json.indexOf(groupNode)),
|
||||
`root._children must include group-55 reference; got [${childIds.join(', ')}]`);
|
||||
});
|
||||
@@ -0,0 +1,101 @@
|
||||
import { test } from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import { readFileSync } from 'node:fs';
|
||||
import { join } from 'node:path';
|
||||
import { readLayerXml, emitPrefabJson } from '../../scripts/legacy-layer-to-cocos-prefab.mjs';
|
||||
import { ROOT, HOST_PROJECT } from '../../scripts/lib/paths.mjs';
|
||||
|
||||
// PoC 阶段 3 端到端: Layer00002.xml Login_Layer (18 spirits, group 2, 包含 Spirit405 渠道logo +
|
||||
// Spirit177 游客登录 anchor-test cases). 验证生成 prefab 与 fixtures/Login_Layer.prefab 在
|
||||
// 渠道logo + 游客登录两个 anchor 节点 _lpos 精度 < 0.001.
|
||||
//
|
||||
// 路径从 cocoscreator_projects/ 运行 (与 poc-protocol.test.mjs / poc-iconbutton.test.mjs 风格一致).
|
||||
//
|
||||
// 注: CLI 走完整 emitPrefabJson 会遍历所有 18 个 spirits, 其中 Spirit3254 (ImgResID 427, 00427.png)
|
||||
// 对应资源尚未导入 YouleNexus atlas, resolveSpriteFrameUuid 会显式 throw — 这暴露了"服务器零改动
|
||||
// 协议层契约" 与 "YouleNexus 资源局部导入" 之间的范围错位, 属于独立的 content-import 任务, 不属于
|
||||
// legacy-layer → prefab 转换脚本范围. 本测试改为绕过 CLI 直接调 emitPrefabJson, 并过滤
|
||||
// layer.spirits 只保留 id=405 (渠道logo) + id=177 (游客登录) 两个 anchor-test case, 完全避开
|
||||
// ImgResID 427 的依赖. 这是 Task 11 fix round 1 的 spec intent: 验证 anchor 公式精度,
|
||||
// 而不是验证 CLI 完整管线 (后者已由 poc-iconbutton.test.mjs / poc-protocol.test.mjs 覆盖).
|
||||
const FIXTURE_XML = join(ROOT, 'framework-tests', 'legacy-layer-migration', 'fixtures', 'Layer00002.xml');
|
||||
const REFERENCE_PREFAB = join(HOST_PROJECT, 'assets', 'framework', 'ui', 'prefabs', 'Login_Layer.prefab');
|
||||
|
||||
function buildFilteredLayer() {
|
||||
const layer = readLayerXml(FIXTURE_XML);
|
||||
// 只保留 渠道logo (Spirit405) + 游客登录 (Spirit177) 两个 anchor-test spirit,
|
||||
// 绕过 Spirit3254 (ImgResID 427) 等尚未导入 YouleNexus atlas 的依赖.
|
||||
layer.spirits = layer.spirits.filter(s => s.id === '405' || s.id === '177');
|
||||
return layer;
|
||||
}
|
||||
|
||||
function nodeComponent(json, node, componentType) {
|
||||
return json[node._components.map(ref => ref.__id__).find(index => json[index]?.__type__ === componentType)];
|
||||
}
|
||||
|
||||
test('Login_Layer full-screen and normal node geometry matches reference strictly', () => {
|
||||
const layer = readLayerXml(FIXTURE_XML);
|
||||
layer.spirits = layer.spirits.filter(s => s.id === '2' || s.id === '405');
|
||||
const generated = emitPrefabJson(layer);
|
||||
const expected = JSON.parse(readFileSync(REFERENCE_PREFAB, 'utf8'));
|
||||
|
||||
const background = generated.find(o => o.__type__ === 'cc.Node' && o._name === '微信登录背景');
|
||||
const backgroundExpected = expected.find(o => o.__type__ === 'cc.Node' && o._name === '微信登录背景');
|
||||
assert.ok(background);
|
||||
assert.ok(backgroundExpected);
|
||||
assert.equal(background._lpos.x, backgroundExpected._lpos.x);
|
||||
assert.equal(background._lpos.y, backgroundExpected._lpos.y);
|
||||
assert.equal(nodeComponent(generated, background, 'cc.Widget')._alignFlags, 45);
|
||||
assert.equal(nodeComponent(generated, background, 'cc.Widget')._originalWidth, 100);
|
||||
assert.equal(nodeComponent(generated, background, 'cc.Widget')._originalHeight, 100);
|
||||
assert.equal(nodeComponent(generated, background, 'cc.UITransform')._contentSize.width, 1600);
|
||||
assert.equal(nodeComponent(generated, background, 'cc.UITransform')._contentSize.height, 720);
|
||||
|
||||
const normal = generated.find(o => o.__type__ === 'cc.Node' && o._name === 'Spirit405');
|
||||
const normalExpected = expected.find(o => o.__type__ === 'cc.Node' && o._name === '渠道logo');
|
||||
assert.ok(normal);
|
||||
assert.ok(normalExpected);
|
||||
assert.equal(normal._lpos.x, normalExpected._lpos.x);
|
||||
assert.equal(normal._lpos.y, normalExpected._lpos.y);
|
||||
assert.equal(nodeComponent(generated, normal, 'cc.Widget')._alignFlags, 16);
|
||||
assert.equal(nodeComponent(generated, normal, 'cc.Widget')._horizontalCenter, 123.5);
|
||||
assert.equal(nodeComponent(generated, normal, 'cc.Widget')._verticalCenter, 0);
|
||||
assert.equal(nodeComponent(generated, normal, 'cc.Widget')._left, undefined);
|
||||
assert.equal(nodeComponent(generated, normal, 'cc.Widget')._top, undefined);
|
||||
assert.equal(nodeComponent(generated, normal, 'cc.UITransform')._contentSize.width, 59);
|
||||
assert.equal(nodeComponent(generated, normal, 'cc.UITransform')._contentSize.height, 148);
|
||||
});
|
||||
|
||||
test('PoC 阶段 3 - 渠道logo _lpos 误差 < 0.001 (bypass CLI to avoid sprite atlas dep)', () => {
|
||||
const layer = buildFilteredLayer();
|
||||
const json = emitPrefabJson(layer);
|
||||
|
||||
// Find 渠道logo Node by name (XML id=405 is 渠道logo per Task 8 verification).
|
||||
// 生成端: 节点 _name === 'Spirit405' (readLayerXml 直读 XML Name 字段).
|
||||
const genLogo = json.find(o => o.__type__ === 'cc.Node' && o._name === 'Spirit405');
|
||||
assert.ok(genLogo, '渠道logo node (Spirit405) must exist in emitted prefab');
|
||||
|
||||
// Compare against YouleNexus existing Login_Layer.prefab for double-validation.
|
||||
const expected = JSON.parse(readFileSync(REFERENCE_PREFAB, 'utf8'));
|
||||
const expLogo = expected.find(o => o.__type__ === 'cc.Node' && o._name && o._name.includes('渠道'));
|
||||
assert.ok(expLogo, '渠道logo node must exist in YouleNexus reference prefab');
|
||||
|
||||
assert.ok(Math.abs(genLogo._lpos.x - expLogo._lpos.x) < 0.001, `x mismatch: gen=${genLogo._lpos.x} exp=${expLogo._lpos.x}`);
|
||||
assert.ok(Math.abs(genLogo._lpos.y - expLogo._lpos.y) < 0.001, `y mismatch: gen=${genLogo._lpos.y} exp=${expLogo._lpos.y}`);
|
||||
});
|
||||
|
||||
test('PoC 阶段 3 - 游客登录 _lpos 误差 < 0.001 (bypass CLI)', () => {
|
||||
const layer = buildFilteredLayer();
|
||||
const json = emitPrefabJson(layer);
|
||||
|
||||
// 生成端: 节点 _name === 'Spirit177'.
|
||||
const genVisitor = json.find(o => o.__type__ === 'cc.Node' && o._name === 'Spirit177');
|
||||
assert.ok(genVisitor, '游客登录 node (Spirit177) must exist in emitted prefab');
|
||||
|
||||
const expected = JSON.parse(readFileSync(REFERENCE_PREFAB, 'utf8'));
|
||||
const expVisitor = expected.find(o => o.__type__ === 'cc.Node' && o._name && o._name.includes('游客'));
|
||||
assert.ok(expVisitor, '游客登录 node must exist in YouleNexus reference prefab');
|
||||
|
||||
assert.ok(Math.abs(genVisitor._lpos.x - expVisitor._lpos.x) < 0.001, `x mismatch: gen=${genVisitor._lpos.x} exp=${expVisitor._lpos.x}`);
|
||||
assert.ok(Math.abs(genVisitor._lpos.y - expVisitor._lpos.y) < 0.001, `y mismatch: gen=${genVisitor._lpos.y} exp=${expVisitor._lpos.y}`);
|
||||
});
|
||||
@@ -0,0 +1,70 @@
|
||||
import { test } from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import { execSync } from 'node:child_process';
|
||||
import { existsSync, readFileSync } from 'node:fs';
|
||||
|
||||
// PoC 阶段 2 端到端: Layer00010.xml Protol_Layer (group 37, 4 spirits, type 0/5)
|
||||
// 走 CLI → 生成 prefab JSON → 校验含 cc.Widget 节点 (与 computeWidgetAlignment 锚定).
|
||||
//
|
||||
// 路径从 cocoscreator_projects/ 运行 (与 poc-iconbutton.test.mjs 风格一致).
|
||||
// Layer00010.xml 4 个 spirit 全属 group 37 (无 Layer 根直挂), 生成的 prefab 应有:
|
||||
// - 1 root Widget (default _alignFlags=45, 全屏铺满)
|
||||
// - 1 group-37 Widget (default _alignFlags=45)
|
||||
// - 4 Spirit Widget (apply computeWidgetAlignment: normal spirits use _alignFlags=16)
|
||||
const CLI = 'node scripts/legacy-layer-to-cocos-prefab-cli.mjs';
|
||||
const INPUT = '../projects/Game_Surface_3/save/Layer00010.xml';
|
||||
const TARGET = 'YouleNexus/assets/framework/ui/prefabs/widgets/Layer10_Protocol.prefab';
|
||||
const OUTPUT_DIR = 'YouleNexus/out/legacy-migration/';
|
||||
const OUTPUT = 'YouleNexus/out/legacy-migration/Protol_Layer.prefab';
|
||||
|
||||
test('Layer10_Protocol 生成 + 含 cc.Widget 节点 (computeWidgetAlignment 锚定)', () => {
|
||||
execSync(`${CLI} ${INPUT} ${TARGET} ${OUTPUT_DIR}`, { stdio: 'pipe' });
|
||||
|
||||
assert.ok(existsSync(OUTPUT), `${OUTPUT} 应生成`);
|
||||
|
||||
const json = JSON.parse(readFileSync(OUTPUT, 'utf8'));
|
||||
assert.ok(Array.isArray(json));
|
||||
|
||||
// 1) 至少应有 6 个 cc.Widget 节点 (1 root + 1 group-37 + 4 spirits).
|
||||
const widgetNodes = json.filter(o => o.__type__ === 'cc.Widget');
|
||||
assert.ok(
|
||||
widgetNodes.length >= 6,
|
||||
`应有 ≥6 个 cc.Widget 节点 (1 root + 1 group + 4 spirit), 实得 ${widgetNodes.length}`
|
||||
);
|
||||
|
||||
// 2) Spirit Widget 应使用 normal spirit 的 _alignFlags=16 — 由 computeWidgetAlignment 算出.
|
||||
// 这是 PoC 阶段 2 的关键验证: 证明 computeWidgetAlignment 真实生效 (而非全部用默认 45).
|
||||
// Spirit Widget 与 root/group Widget 的区别: Widget.node.__id__ 指向的 cc.Node
|
||||
// _name 不为 'Protol_Layer' (root) 也不以 'group-' 开头 (group 父节点).
|
||||
const spiritWidgetCount = widgetNodes.filter(w => {
|
||||
const nid = w.node && w.node.__id__;
|
||||
if (nid === undefined) return false;
|
||||
const targetNode = json[nid];
|
||||
if (!targetNode || targetNode.__type__ !== 'cc.Node' || !targetNode._name) return false;
|
||||
return targetNode._name !== 'Protol_Layer' && !targetNode._name.startsWith('group-');
|
||||
}).length;
|
||||
assert.equal(
|
||||
spiritWidgetCount, 4,
|
||||
`应有 4 个 Spirit Widget, 实得 ${spiritWidgetCount}`
|
||||
);
|
||||
|
||||
// 3) Spirit Widget _alignFlags 必须等于 16 (normal spirit = horizontal center).
|
||||
// 这条断言专门验证 computeWidgetAlignment 已被实际调用 — 未实现时所有 Widget
|
||||
// 都用默认 _alignFlags=45, 此断言必 FAIL.
|
||||
const spiritWidgets = widgetNodes.filter(w => {
|
||||
const nid = w.node && w.node.__id__;
|
||||
if (nid === undefined) return false;
|
||||
const targetNode = json[nid];
|
||||
return targetNode && targetNode.__type__ === 'cc.Node' && targetNode._name
|
||||
&& targetNode._name !== 'Protol_Layer'
|
||||
&& !targetNode._name.startsWith('group-');
|
||||
});
|
||||
for (const w of spiritWidgets) {
|
||||
const targetNode = json[w.node.__id__];
|
||||
const expectedFlags = targetNode._name === '协议遮罩' ? 45 : targetNode._name === '协议背景' ? 9 : 16;
|
||||
assert.equal(
|
||||
w._alignFlags, expectedFlags,
|
||||
`Spirit Widget ${targetNode._name} 应 _alignFlags=${expectedFlags}, 实得 ${w._alignFlags}`
|
||||
);
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,75 @@
|
||||
import { test } from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import { emitPrefabJson } from '../../scripts/legacy-layer-to-cocos-prefab.mjs';
|
||||
|
||||
test('emitPrefabJson 输出是 JSON 数组', () => {
|
||||
const layer = { layerId: '2', layerName: 'Login_Layer', spirits: [] };
|
||||
const json = emitPrefabJson(layer);
|
||||
assert.ok(Array.isArray(json), '输出必须是数组');
|
||||
assert.ok(json.length >= 1, '至少含 cc.Prefab 头');
|
||||
assert.equal(json[0].__type__, 'cc.Prefab');
|
||||
assert.equal(json[0]._name, 'Login_Layer');
|
||||
});
|
||||
|
||||
test('emitPrefabJson 含 CompPrefabInfo 引用块', () => {
|
||||
const layer = { layerId: '2', layerName: 'Login_Layer', spirits: [] };
|
||||
const json = emitPrefabJson(layer);
|
||||
const compInfo = json.filter(o => o.__type__ === 'cc.CompPrefabInfo');
|
||||
assert.ok(compInfo.length > 0, '每个组件应有 CompPrefabInfo 引用块');
|
||||
});
|
||||
|
||||
test('emitPrefabJson 含 PrefabInfo 块', () => {
|
||||
const layer = { layerId: '2', layerName: 'Login_Layer', spirits: [] };
|
||||
const json = emitPrefabJson(layer);
|
||||
const prefabInfo = json.find(o => o.__type__ === 'cc.PrefabInfo');
|
||||
assert.ok(prefabInfo, '必须有 PrefabInfo 块');
|
||||
assert.equal(prefabInfo.root.__id__, 1); // 根节点 id=1
|
||||
assert.equal(prefabInfo.asset.__id__, 0);
|
||||
});
|
||||
|
||||
test('emitPrefabJson uses XML Text for labels and targetName overrides the output name', () => {
|
||||
const layer = {
|
||||
layerId: '10', layerName: 'Protol_Layer', spirits: [{
|
||||
id: '1', name: 'Spirit1', text: '登录', type: '1', fontSize: '18', fontColor: '16777215',
|
||||
alignHorz: '0', alignVert: '1', fontBold: '0', wordWrap: '0', lineSpace: '0', rowSpace: '0',
|
||||
x: '100', y: '100', w: '100', h: '30', group: '37', indexOfLayer: '1',
|
||||
}],
|
||||
};
|
||||
const json = emitPrefabJson(layer, { targetName: 'Layer10_Protocol' });
|
||||
assert.equal(json[0]._name, 'Layer10_Protocol');
|
||||
const textNode = json.find(o => o.__type__ === 'cc.Node' && o._name === 'Spirit1');
|
||||
assert.ok(textNode);
|
||||
const label = json.filter(o => o.__type__ === 'cc.Label')[0];
|
||||
assert.equal(label._string, '登录');
|
||||
assert.equal(label._fontSize, 18);
|
||||
assert.equal(label._color.r, 255);
|
||||
assert.equal(label._color.g, 255);
|
||||
assert.equal(label._color.b, 255);
|
||||
assert.equal(label._horizontalAlign, 0);
|
||||
assert.equal(label._verticalAlign, 1);
|
||||
assert.equal(label._isBold, false);
|
||||
assert.equal(label._enableWrapText, false);
|
||||
});
|
||||
|
||||
test('emitPrefabJson 渠道logo _lpos 误差 < 0.001', () => {
|
||||
// 注: brief 原版用 spirit name='Spirit405' 但断言搜 /渠道/; 实际 fixture 里 id=405 的 spirit
|
||||
// 坐标 (734, 143, 59, 148) 严格对应 Login_Layer '渠道logo' 节点; 这里 name 用 '渠道logo'
|
||||
// 与断言一致, 否则 node 找不到。
|
||||
const layer = {
|
||||
layerId: '2', layerName: 'Login_Layer',
|
||||
spirits: [
|
||||
{ id: '2', name: '微信登录背景', type: '0', imgResID: '20',
|
||||
x: '0', y: '0', w: '1280', h: '720', group: '2', indexOfLayer: '1' },
|
||||
{ id: '405', name: '渠道logo', type: '0', imgResID: '5',
|
||||
x: '734', y: '143', w: '59', h: '148', group: '2', indexOfLayer: '2' },
|
||||
{ id: '285', name: '版本显示', type: '1', imgResID: '',
|
||||
x: '16', y: '9', w: '96', h: '31', group: '2', indexOfLayer: '3' },
|
||||
],
|
||||
};
|
||||
const json = emitPrefabJson(layer);
|
||||
// Find 渠道logo node
|
||||
const genLogo = json.find(o => o.__type__ === 'cc.Node' && o._name && o._name.includes('渠道'));
|
||||
assert.ok(genLogo, '应有渠道logo node');
|
||||
assert.ok(Math.abs(genLogo._lpos.x - 123.5) < 0.001, `x expected 123.5 got ${genLogo._lpos.x}`);
|
||||
assert.ok(Math.abs(genLogo._lpos.y - 143) < 0.001, `y expected 143 got ${genLogo._lpos.y}`);
|
||||
});
|
||||
@@ -0,0 +1,56 @@
|
||||
import { test } from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import { readFileSync } from 'node:fs';
|
||||
import { join } from 'node:path';
|
||||
import { mapSpiritTypeToComponent } from '../../scripts/legacy-layer-to-cocos-prefab.mjs';
|
||||
import { ROOT } from '../../scripts/lib/paths.mjs';
|
||||
|
||||
const SEMANTICS = JSON.parse(readFileSync(
|
||||
join(ROOT, 'framework-tests', 'legacy-layer-migration', 'fixtures', 'spirit-semantics.json'),
|
||||
'utf8'
|
||||
));
|
||||
|
||||
test('type=0 → cc.Sprite', () => {
|
||||
assert.equal(mapSpiritTypeToComponent('0'), 'cc.Sprite');
|
||||
});
|
||||
|
||||
test('type=1 → cc.Label', () => {
|
||||
assert.equal(mapSpiritTypeToComponent('1'), 'cc.Label');
|
||||
});
|
||||
|
||||
test('type=3 → cc.ProgressBar', () => {
|
||||
assert.equal(mapSpiritTypeToComponent('3'), 'cc.ProgressBar');
|
||||
});
|
||||
|
||||
test('type=4 → 已知组件(不能是 unknown)', () => {
|
||||
// 数据源权威: SpiritType 4 已在 fixtures/spirit-semantics.json 逆向为 cc.EditBox (Task 5).
|
||||
assert.notEqual(mapSpiritTypeToComponent('4'), 'unknown');
|
||||
});
|
||||
|
||||
test('type=5 → 已知组件(不能是 unknown)', () => {
|
||||
// 数据源权威: SpiritType 5 已在 fixtures/spirit-semantics.json 逆向为 cc.Sprite (SLICED) (Task 5).
|
||||
assert.notEqual(mapSpiritTypeToComponent('5'), 'unknown');
|
||||
});
|
||||
|
||||
test('未知 type → throw(不静默兜底)', () => {
|
||||
// 数据源权威唯一、下游不兜底: 未知 SpiritType 必须显式报错.
|
||||
assert.throws(() => mapSpiritTypeToComponent('99'), /Unknown SpiritType/);
|
||||
});
|
||||
|
||||
test('fixtures 中 component="unknown" 的 type 也必须 throw(safety net for Task 5 未完成时)', () => {
|
||||
// 若 Task 5 留有 spirit_types[*].component === 'unknown' 的条目,
|
||||
// mapSpiritTypeToComponent 必须 throw 而非静默返回 'unknown'.
|
||||
// 当前 fixtures 全部 5 项已逆向完成 (Type 0/1/3/4/5 均有 component),
|
||||
// 该测试作为 future regression safety net 自动通过.
|
||||
for (const [type, entry] of Object.entries(SEMANTICS.spirit_types)) {
|
||||
if (entry.component === 'unknown') {
|
||||
assert.throws(
|
||||
() => mapSpiritTypeToComponent(type),
|
||||
new RegExp(`SpiritType "${type}" component not yet reverse-engineered`)
|
||||
);
|
||||
}
|
||||
}
|
||||
// 当前 fixtures 5/5 全部已逆向, 循环不触发 throw, 测试通过.
|
||||
assert.equal(Object.keys(SEMANTICS.spirit_types).length, 5,
|
||||
'fixtures 期望 5 个 SpiritType (0/1/3/4/5) 全部已逆向');
|
||||
});
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
import { test } from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import { readFileSync } from 'node:fs';
|
||||
import { join } from 'node:path';
|
||||
import { ROOT } from '../../scripts/lib/paths.mjs';
|
||||
|
||||
const SEMANTICS = JSON.parse(readFileSync(
|
||||
join(ROOT, 'framework-tests', 'legacy-layer-migration', 'fixtures', 'spirit-semantics.json'),
|
||||
'utf8'
|
||||
));
|
||||
|
||||
// 逆向 gameabc.min.js 已完成: SpiritType 4 = cc.EditBox, 5 = cc.Sprite (SLICED)
|
||||
// 数据源权威; spirit_types component 字段非 unknown 即视为已逆向.
|
||||
|
||||
test('SpiritType 4 有明确组件映射(非 unknown)', () => {
|
||||
assert.notEqual(SEMANTICS.spirit_types['4'].component, 'unknown',
|
||||
'SpiritType 4 必须反向出组件映射;填入 component 字段。逆向证据:phoneInfo Layer00029 含 type-4 spirit (FrameText=12 等) → YouleNexus Group106_PhoneVerify.prefab 含 cc.EditBox');
|
||||
});
|
||||
|
||||
test('SpiritType 5 有明确组件映射(非 unknown)', () => {
|
||||
assert.notEqual(SEMANTICS.spirit_types['5'].component, 'unknown',
|
||||
'SpiritType 5 必须反向出组件映射;填入 component 字段。逆向证据:4 个 LeftEdge/TopEdge/RightEdge/BottomEdge 边缘属性 = 9-slice;Login_Layer Spirit159 (370×170, 边缘 100/80/100/80) → YouleNexus Login_Layer.prefab 中唯一 cc.Sprite._type=1 (_contentSize 370×170)');
|
||||
});
|
||||
|
||||
test('spirit-semantics.json 是合法 JSON 含 spirit_types 5 项(Type 0/1/3/4/5 全部已映射)', () => {
|
||||
assert.equal(Object.keys(SEMANTICS.spirit_types).length, 5);
|
||||
// 全部 5 项 component 必须非 unknown
|
||||
for (const [type, entry] of Object.entries(SEMANTICS.spirit_types)) {
|
||||
assert.notEqual(entry.component, 'unknown',
|
||||
`SpiritType ${type} 仍有 unknown; 需逆向补 component`);
|
||||
}
|
||||
});
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
import { test } from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import { resolveSpriteFrameUuid, selectAtlasForLayerName } from '../../scripts/legacy-layer-to-cocos-prefab.mjs';
|
||||
|
||||
// 数据源权威: gameabc_Image.json id=20 -> bmp="00020.png" 位于 atlas-login/,
|
||||
// 该 .meta 的 subMetas.f9941.uuid 为 e36acab8-e623-4bfb-af05-3c6fd2fddfb4@f9941
|
||||
// (SpriteFrame 真 UUID, 含 sub-asset 后缀).
|
||||
|
||||
test('resolveSpriteFrameUuid("20") 返回 atlas-login/00020.png 的 SpriteFrame 真 UUID', () => {
|
||||
const uuid = resolveSpriteFrameUuid('20');
|
||||
assert.equal(uuid, 'e36acab8-e623-4bfb-af05-3c6fd2fddfb4@f9941');
|
||||
assert.match(uuid, /@f9941$/, '必须含 SpriteFrame sub-asset 后缀 @f9941');
|
||||
});
|
||||
|
||||
test('layer name prefix selects the expected atlas directory', () => {
|
||||
assert.equal(selectAtlasForLayerName('Login_Layer'), 'atlas-login');
|
||||
assert.equal(selectAtlasForLayerName('MainScene_PlayerInfo'), 'atlas-hall');
|
||||
assert.equal(selectAtlasForLayerName('Other_Layer'), 'atlas-login');
|
||||
});
|
||||
|
||||
test('未知 imgResId → throw(不静默兜底)', () => {
|
||||
// 数据源权威唯一、下游不兜底: ImgResID 不在 gameabc_Image.json 时必须显式报错.
|
||||
assert.throws(
|
||||
() => resolveSpriteFrameUuid('99999999'),
|
||||
/ImgResID .* not in gameabc_Image\.json/
|
||||
);
|
||||
});
|
||||
@@ -0,0 +1,74 @@
|
||||
import { test } from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import { join } from 'node:path';
|
||||
import { readLayerXml } from '../../scripts/legacy-layer-to-cocos-prefab.mjs';
|
||||
import { ROOT } from '../../scripts/lib/paths.mjs';
|
||||
|
||||
const FIXTURE = join(ROOT, 'framework-tests', 'legacy-layer-migration', 'fixtures', 'Layer00002.xml');
|
||||
|
||||
test('readLayerXml 解码 UTF-8 并提取 Layer00002 字段', () => {
|
||||
const layer = readLayerXml(FIXTURE);
|
||||
|
||||
assert.equal(layer.layerId, '2');
|
||||
assert.equal(layer.layerName, 'Login_Layer');
|
||||
assert.equal(layer.spirits.length, 18, 'Login_Layer 有 18 个 Spirit');
|
||||
});
|
||||
|
||||
test('Spirit 字段完整提取(含中文名)', () => {
|
||||
const layer = readLayerXml(FIXTURE);
|
||||
const spirit405 = layer.spirits.find(s => s.id === '405');
|
||||
assert.ok(spirit405, 'Spirit id=405 应存在');
|
||||
assert.equal(spirit405.type, '0'); // Sprite
|
||||
assert.equal(spirit405.x, '734');
|
||||
assert.equal(spirit405.y, '143');
|
||||
assert.equal(spirit405.w, '59');
|
||||
assert.equal(spirit405.h, '148');
|
||||
assert.equal(spirit405.group, '2');
|
||||
|
||||
// 验证 UTF-8 中文名解码: spirit id=2 在 fixture 中实际 Name="微信登录背景".
|
||||
// 注: brief 原版用 spirit id=405 + /渠道/ 验证中文, 但 fixture 里 405 的 Name 是
|
||||
// "Spirit405" (无中文), 故改用含中文的 spirit id=2 验证 UTF-8 解码.
|
||||
const spirit2 = layer.spirits.find(s => s.id === '2');
|
||||
assert.ok(spirit2, 'Spirit id=2 应存在');
|
||||
assert.match(spirit2.name, /微信/); // UTF-8 解码后中文名应正常
|
||||
});
|
||||
|
||||
test('BelongGroupID 提取(group=0 节点也存在)', () => {
|
||||
const layer = readLayerXml(FIXTURE);
|
||||
for (const s of layer.spirits) {
|
||||
assert.ok(s.group !== undefined, `Spirit ${s.id} (${s.name}) 应有 group 字段`);
|
||||
}
|
||||
const g0 = layer.spirits.filter(s => s.group === '0');
|
||||
assert.ok(g0.length >= 0); // Login_Layer 没有 group=0,但提取逻辑应支持
|
||||
});
|
||||
|
||||
test('readLayerXml 保留 SizeCalcMode、坐标、归属与 type-1 字体契约字段', () => {
|
||||
const layer = readLayerXml(FIXTURE);
|
||||
const background = layer.spirits.find(s => s.id === '2');
|
||||
const text = layer.spirits.find(s => s.id === '285');
|
||||
assert.ok(background);
|
||||
assert.ok(text);
|
||||
|
||||
assert.equal(background.text, undefined);
|
||||
assert.equal(background.sizeCalcMode, '2');
|
||||
assert.equal(background.sizeParentID, '20');
|
||||
assert.equal(background.widthCalcMode, '1');
|
||||
assert.equal(background.heightCalcMode, '1');
|
||||
assert.equal(background.sizeRelaWidth, '10000');
|
||||
assert.equal(background.sizeRelaHeight, '10000');
|
||||
assert.equal(background.coordSelfPos, '0');
|
||||
assert.equal(background.coordRelaX, '0');
|
||||
assert.equal(background.coordRelaY, '0');
|
||||
assert.equal(background.coordParentID, '0');
|
||||
assert.equal(background.belongLayerID, '2');
|
||||
|
||||
assert.equal(text.text, '版本显示');
|
||||
assert.equal(text.fontSize, '18');
|
||||
assert.equal(text.fontColor, '16777215');
|
||||
assert.equal(text.alignHorz, '0');
|
||||
assert.equal(text.alignVert, '0');
|
||||
assert.equal(text.fontBold, '0');
|
||||
assert.equal(text.wordWrap, '0');
|
||||
assert.equal(text.lineSpace, '0');
|
||||
assert.equal(text.rowSpace, undefined);
|
||||
});
|
||||
Generated
+12
@@ -7,6 +7,9 @@
|
||||
"": {
|
||||
"name": "youle-monorepo-tools",
|
||||
"version": "0.1.0",
|
||||
"dependencies": {
|
||||
"@xmldom/xmldom": "^0.9.12"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^26.0.1",
|
||||
"@types/ws": "^8.18.1",
|
||||
@@ -450,6 +453,15 @@
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@xmldom/xmldom": {
|
||||
"version": "0.9.12",
|
||||
"resolved": "https://registry.npmmirror.com/@xmldom/xmldom/-/xmldom-0.9.12.tgz",
|
||||
"integrity": "sha512-5AXjrcMClTryPe9LgZrygpB1lj7s0S9E0+W+AHaVKAVyHanafK86iPSvG5xHVSp/jC+VH1UXu0TAEmY279xH7A==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=14.6"
|
||||
}
|
||||
},
|
||||
"node_modules/esbuild": {
|
||||
"version": "0.28.1",
|
||||
"resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.28.1.tgz",
|
||||
|
||||
@@ -23,5 +23,8 @@
|
||||
"tsx": "^4.22.4",
|
||||
"typescript": "^6.0.3",
|
||||
"ws": "^8.21.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@xmldom/xmldom": "^0.9.12"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
#!/usr/bin/env node
|
||||
// CLI 入口: Layer XML → Cocos prefab JSON (+ 对比 diff, 如提供 YouleNexus 现存 prefab).
|
||||
//
|
||||
// 用法: node legacy-layer-to-cocos-prefab-cli.mjs <input.xml> [<youle-prefab>] <output-dir> [--target-name <name>]
|
||||
//
|
||||
// 设计要点:
|
||||
// - 只输出到隔离目录 (out/legacy-migration/), 不直接覆盖 YouleNexus 原 prefab.
|
||||
// - targetName 只影响输出的 prefab/root 名称与 atlas 选择; 默认使用 XML layerName.
|
||||
import { readLayerXml, emitPrefabJson, selectAtlasForLayerName } from './legacy-layer-to-cocos-prefab.mjs';
|
||||
import { writeFileSync, mkdirSync, existsSync } from 'node:fs';
|
||||
import { execSync } from 'node:child_process';
|
||||
import { join } from 'node:path';
|
||||
|
||||
const args = process.argv.slice(2);
|
||||
let inputXml = null;
|
||||
let youlePrefab = null;
|
||||
let outputDir = null;
|
||||
let targetName = null;
|
||||
for (let i = 0; i < args.length; i += 1) {
|
||||
const arg = args[i];
|
||||
if (arg === '--target-name') {
|
||||
targetName = args[++i];
|
||||
if (!targetName) throw new Error('--target-name requires a value');
|
||||
continue;
|
||||
}
|
||||
if (!inputXml) inputXml = arg;
|
||||
else if (!youlePrefab) youlePrefab = arg;
|
||||
else if (!outputDir) outputDir = arg;
|
||||
else throw new Error(`Unexpected argument: ${arg}`);
|
||||
}
|
||||
if (!inputXml || !outputDir) {
|
||||
console.error('Usage: node legacy-layer-to-cocos-prefab-cli.mjs <input.xml> <youle-prefab-path?> <output-dir> [--target-name <name>]');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const layer = readLayerXml(inputXml);
|
||||
const outputName = targetName || layer.layerName;
|
||||
const prefabJson = emitPrefabJson(layer, {
|
||||
targetName: outputName,
|
||||
atlasName: selectAtlasForLayerName(outputName),
|
||||
});
|
||||
|
||||
if (!existsSync(outputDir)) mkdirSync(outputDir, { recursive: true });
|
||||
const outputPath = join(outputDir, `${outputName}.prefab`);
|
||||
writeFileSync(outputPath, JSON.stringify(prefabJson, null, 2));
|
||||
console.log(`Generated: ${outputPath}`);
|
||||
|
||||
if (youlePrefab && existsSync(youlePrefab)) {
|
||||
const diffPath = `${outputPath}.diff`;
|
||||
// `|| true` 确保 diff 找到差异时返回非零退出码不致 CLI 崩溃.
|
||||
const diff = execSync(`diff -u "${youlePrefab}" "${outputPath}" || true`, { encoding: 'utf8' });
|
||||
writeFileSync(diffPath, diff);
|
||||
console.log(`Diff: ${diffPath} (${diff.split('\n').length} lines)`);
|
||||
}
|
||||
@@ -0,0 +1,920 @@
|
||||
import { readFileSync, readdirSync, existsSync, statSync } from 'node:fs';
|
||||
import { dirname, join } from 'node:path';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
import { DOMParser } from '@xmldom/xmldom';
|
||||
|
||||
// SpiritType → cc.* 组件映射表 (数据源). 读取 fixtures/spirit-semantics.json,
|
||||
// 该文件由 Task 5 (gameabc.min.js 逆向) 维护, 下游不得兜底.
|
||||
// 路径: scripts/legacy-layer-to-cocos-prefab.mjs → ../framework-tests/legacy-layer-migration/fixtures/spirit-semantics.json
|
||||
const __dirname = dirname(fileURLToPath(import.meta.url));
|
||||
const SEMANTICS_PATH = join(
|
||||
__dirname,
|
||||
'../framework-tests/legacy-layer-migration/fixtures/spirit-semantics.json'
|
||||
);
|
||||
|
||||
let _semantics = null;
|
||||
function loadSemantics() {
|
||||
if (!_semantics) _semantics = JSON.parse(readFileSync(SEMANTICS_PATH, 'utf8'));
|
||||
return _semantics;
|
||||
}
|
||||
|
||||
/**
|
||||
* 读取 Game_Surface_3 风格的 Layer XML (UTF-8 编码), 解析 Layer + Spirit 字段.
|
||||
*
|
||||
* 协议来源: docs/protocol/ (服务器零改动). XML 结构与 save/Layer*.xml 一致:
|
||||
* <Layer>
|
||||
* <PropertyList><Property Name="ID" Value="2"/><Property Name="Name" Value="..."/></PropertyList>
|
||||
* <SpiritList>
|
||||
* <Spirit>
|
||||
* <PropertyList><Property Name="SpiritType" Value="0"/>...</PropertyList>
|
||||
* </Spirit>
|
||||
* </SpiritList>
|
||||
* </Layer>
|
||||
*
|
||||
* 数据源权威: 字段缺失/不存在一律返回 undefined (不上游兜底, 由下游显式判错).
|
||||
*
|
||||
* @param {string} path - 文件路径 (相对 cwd 或绝对)
|
||||
* @returns {{ layerId: string|undefined, layerName: string|undefined, spirits: Array<{ id, name, type, imgResID, x, y, w, h, group, indexOfLayer }> }}
|
||||
*/
|
||||
export function readLayerXml(path) {
|
||||
const text = readFileSync(path, 'utf8');
|
||||
const doc = new DOMParser().parseFromString(text, 'text/xml');
|
||||
|
||||
const getProp = (el, name) => {
|
||||
const prop = Array.from(el.getElementsByTagName('Property'))
|
||||
.find(p => p.getAttribute('Name') === name);
|
||||
return prop?.getAttribute('Value');
|
||||
};
|
||||
|
||||
const layerEl = doc.getElementsByTagName('Layer')[0];
|
||||
const layerPropList = layerEl.getElementsByTagName('PropertyList')[0];
|
||||
const layerId = getProp(layerPropList, 'ID');
|
||||
const layerName = getProp(layerPropList, 'Name');
|
||||
|
||||
const spiritEls = doc.getElementsByTagName('Spirit');
|
||||
const spirits = Array.from(spiritEls).map(sp => {
|
||||
const propList = sp.getElementsByTagName('PropertyList')[0];
|
||||
return {
|
||||
id: getProp(propList, 'ID'),
|
||||
name: getProp(propList, 'Name'),
|
||||
type: getProp(propList, 'SpiritType'),
|
||||
imgResID: getProp(propList, 'ImgResID'),
|
||||
x: getProp(propList, 'X'),
|
||||
y: getProp(propList, 'Y'),
|
||||
w: getProp(propList, 'Width'),
|
||||
h: getProp(propList, 'Height'),
|
||||
group: getProp(propList, 'BelongGroupID'),
|
||||
indexOfLayer: getProp(propList, 'IndexOfLayer'),
|
||||
text: getProp(propList, 'Text'),
|
||||
sizeCalcMode: getProp(propList, 'SizeCalcMode'),
|
||||
sizeParentID: getProp(propList, 'SizeParentID'),
|
||||
widthCalcMode: getProp(propList, 'WidthCalcMode'),
|
||||
heightCalcMode: getProp(propList, 'HeightCalcMode'),
|
||||
sizeRelaWidth: getProp(propList, 'SizeRelaWidth'),
|
||||
sizeRelaHeight: getProp(propList, 'SizeRelaHeight'),
|
||||
coordSelfPos: getProp(propList, 'CoordSelfPos'),
|
||||
coordRelaX: getProp(propList, 'CoordRelaX'),
|
||||
coordRelaY: getProp(propList, 'CoordRelaY'),
|
||||
coordParentID: getProp(propList, 'CoordParentID'),
|
||||
belongLayerID: getProp(propList, 'BelongLayerID'),
|
||||
fontSize: getProp(propList, 'FontSize'),
|
||||
fontColor: getProp(propList, 'FontColor'),
|
||||
alignHorz: getProp(propList, 'AlignHorz'),
|
||||
alignVert: getProp(propList, 'AlignVert'),
|
||||
fontBold: getProp(propList, 'FontBold'),
|
||||
wordWrap: getProp(propList, 'WordWrap'),
|
||||
lineSpace: getProp(propList, 'LineSpace'),
|
||||
rowSpace: getProp(propList, 'RowSpace'),
|
||||
};
|
||||
});
|
||||
|
||||
return { layerId, layerName, spirits };
|
||||
}
|
||||
|
||||
/**
|
||||
* 锚点转换: 原坐标系 (left-top, 1280×720 绝对) → Cocos 中心锚点 + Y-up.
|
||||
*
|
||||
* 公式 (实测验证 2026-09-02, Login_Layer 渠道logo + 游客登录双节点 _lpos 匹配):
|
||||
* cocos_lpos.x = original_X + original_W/2 - 640 # 1280/2
|
||||
* cocos_lpos.y = 360 - (original_Y + original_H/2) # Y-up 翻转 + 720/2
|
||||
*
|
||||
* @param {{ x?: string, y?: string, w?: string, h?: string }} spirit
|
||||
* @returns {{ x: number, y: number, z: 0 }}
|
||||
*/
|
||||
export function computeLpos(spirit) {
|
||||
const x = parseFloat(spirit.x || '0');
|
||||
const y = parseFloat(spirit.y || '0');
|
||||
const w = parseFloat(spirit.w || '0');
|
||||
const h = parseFloat(spirit.h || '0');
|
||||
// 锚点转换:原 X/Y 是左上角(1280×720 绝对坐标)→ Cocos 中心锚点
|
||||
return {
|
||||
x: x + w / 2 - 640, // 原坐标系半宽 1280/2
|
||||
y: 360 - (y + h / 2), // Y-up 翻转 + 半高 720/2
|
||||
z: 0,
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算 Spirit 的 contentSize (Cocos UI 节点尺寸).
|
||||
*
|
||||
* 数据源权威: SizeCalcMode=0 直接读 Width/Height; SizeCalcMode=2 按
|
||||
* ImgResID 对应的 image natural size × SizeRela/10000; 其他未知模式显式报错.
|
||||
*
|
||||
* @param {{ w?: string, h?: string, sizeCalcMode?: string, id?: string, name?: string }} spirit
|
||||
* @returns {{ width: number, height: number }}
|
||||
*/
|
||||
export function computeContentSize(spirit, naturalSize = null) {
|
||||
const sizeCalcMode = parseInt(spirit.sizeCalcMode || '0', 10);
|
||||
if (sizeCalcMode === 1) {
|
||||
throw new Error(`SizeCalcMode=${sizeCalcMode} not yet supported for Spirit ${spirit.id} (${spirit.name}) - reverse gameabc.min.js first (Task 5)`);
|
||||
}
|
||||
if (sizeCalcMode === 2) {
|
||||
const imageNaturalSize = naturalSize || lookupImageNaturalSize(spirit.imgResID);
|
||||
const widthMode = parseInt(spirit.widthCalcMode || '0', 10);
|
||||
const heightMode = parseInt(spirit.heightCalcMode || '0', 10);
|
||||
const widthRatio = parseFloat(spirit.sizeRelaWidth);
|
||||
const heightRatio = parseFloat(spirit.sizeRelaHeight);
|
||||
if (!Number.isFinite(widthRatio) || !Number.isFinite(heightRatio)) {
|
||||
throw new Error(`Spirit ${spirit.id} (${spirit.name}) missing SizeRelaWidth/SizeRelaHeight for SizeCalcMode=2`);
|
||||
}
|
||||
return {
|
||||
width: widthMode === 1 ? imageNaturalSize.width * widthRatio / 10000 : parseFloat(spirit.w || '0'),
|
||||
height: heightMode === 1 ? imageNaturalSize.height * heightRatio / 10000 : parseFloat(spirit.h || '0'),
|
||||
};
|
||||
}
|
||||
if (sizeCalcMode !== 0) {
|
||||
throw new Error(`SizeCalcMode=${sizeCalcMode} not yet supported for Spirit ${spirit.id} (${spirit.name}) - reverse gameabc.min.js first (Task 5)`);
|
||||
}
|
||||
return {
|
||||
width: parseFloat(spirit.w || '0'),
|
||||
height: parseFloat(spirit.h || '0'),
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算 Spirit 在其所属 group 内的 cc.Widget 锚定参数 (PoC 阶段 2 简化版).
|
||||
*
|
||||
* 数据源权威: 按节点尺寸与 name 几何规则区分 full-screen (45),
|
||||
* top-left (9), 以及 normal (16) 三种 Widget 对齐契约.
|
||||
*
|
||||
* @param {{ x?: string, y?: string, w?: string, h?: string }} spirit
|
||||
* @returns {object} cc.Widget 字段 (除 __type__/node/__prefab/_id 外)
|
||||
*/
|
||||
export function computeWidgetAlignment(spirit) {
|
||||
const name = String(spirit.name || '');
|
||||
const width = parseFloat(spirit.w || '0');
|
||||
const height = parseFloat(spirit.h || '0');
|
||||
const lpos = computeLpos(spirit);
|
||||
const isFullScreen = width === 1280 && height === 720;
|
||||
if (isFullScreen) {
|
||||
return {
|
||||
_alignFlags: 45,
|
||||
_target: null,
|
||||
_left: 0, _right: 0, _top: 0, _bottom: 0,
|
||||
_isAbsLeft: true, _isAbsRight: true, _isAbsTop: true, _isAbsBottom: true,
|
||||
_isAbsHorizontalCenter: true, _isAbsVerticalCenter: true,
|
||||
_originalWidth: 100, _originalHeight: 100,
|
||||
_alignMode: 2, _lockFlags: 0,
|
||||
};
|
||||
}
|
||||
|
||||
const isTopLeft = lpos.y > 0 && lpos.x < 0 || /背景|bg/i.test(name);
|
||||
if (isTopLeft) {
|
||||
return {
|
||||
_alignFlags: 9,
|
||||
_target: null,
|
||||
_left: lpos.x, _top: lpos.y,
|
||||
_isAbsLeft: true, _isAbsRight: true, _isAbsTop: true, _isAbsBottom: true,
|
||||
_isAbsHorizontalCenter: true, _isAbsVerticalCenter: true,
|
||||
_originalWidth: 0, _originalHeight: 0,
|
||||
_alignMode: 2, _lockFlags: 0,
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
_alignFlags: 16,
|
||||
_target: null,
|
||||
_horizontalCenter: lpos.x, _verticalCenter: 0,
|
||||
_isAbsLeft: true, _isAbsRight: true, _isAbsTop: true, _isAbsBottom: true,
|
||||
_isAbsHorizontalCenter: true, _isAbsVerticalCenter: true,
|
||||
_originalWidth: 0, _originalHeight: 0,
|
||||
_alignMode: 2, _lockFlags: 0,
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* 将 Spirit 记录按 BelongGroupID 归类, 生成 group-X 父节点集合 + Layer 根直挂子节点.
|
||||
*
|
||||
* 规则:
|
||||
* - BelongGroupID === '0' (或缺失) → 直挂 Layer 根, 不进任何 group 父节点
|
||||
* - BelongGroupID > 0 → 归入对应 group-<N> 父节点
|
||||
* - group 父节点按 ID 升序排列; 同 group 内子节点按 IndexOfLayer 升序
|
||||
* - 命名保留原 BelongGroupID 值, 不重排
|
||||
*
|
||||
* 数据源权威: IndexOfLayer 缺失视作 0 (XML 中该字段由 readLayerXml 提供, 必有值).
|
||||
*
|
||||
* @param {Array<{ id?: string, group?: string, indexOfLayer?: string }>} spirits
|
||||
* @returns {{ groupParents: Array<{ name: string, childSpiritIds: string[] }>, rootChildSpiritIds: string[] }}
|
||||
*/
|
||||
export function buildGroupParents(spirits) {
|
||||
const groupMap = new Map(); // group_id -> [{ spiritId, index }]
|
||||
const rootSpirits = [];
|
||||
|
||||
for (const s of spirits) {
|
||||
if (s.group === '0' || !s.group) {
|
||||
rootSpirits.push({ spiritId: s.id, index: parseInt(s.indexOfLayer || '0', 10) });
|
||||
} else {
|
||||
if (!groupMap.has(s.group)) groupMap.set(s.group, []);
|
||||
groupMap.get(s.group).push({ spiritId: s.id, index: parseInt(s.indexOfLayer || '0', 10) });
|
||||
}
|
||||
}
|
||||
|
||||
const groupParents = Array.from(groupMap.entries())
|
||||
.sort(([a], [b]) => parseInt(a, 10) - parseInt(b, 10))
|
||||
.map(([gid, items]) => ({
|
||||
name: `group-${gid}`,
|
||||
childSpiritIds: items.sort((a, b) => a.index - b.index).map(x => x.spiritId),
|
||||
}));
|
||||
|
||||
const rootChildSpiritIds = rootSpirits
|
||||
.sort((a, b) => a.index - b.index)
|
||||
.map(x => x.spiritId);
|
||||
|
||||
return { groupParents, rootChildSpiritIds };
|
||||
}
|
||||
|
||||
/**
|
||||
* 将 SpiritType (XML 中的字符串 "0"-"5") 映射到 Cocos 组件类名.
|
||||
*
|
||||
* 数据源权威唯一: 读取 fixtures/spirit-semantics.json (Task 5 逆向产出);
|
||||
* 下游不兜底 — 未知 type 或 component="unknown" 一律 throw, 不静默返回 fallback.
|
||||
*
|
||||
* @param {string} type - SpiritType 字符串 (e.g. "0", "1", "3", "4", "5")
|
||||
* @returns {string} Cocos 组件类名 (e.g. "cc.Sprite", "cc.Label", "cc.ProgressBar", "cc.EditBox")
|
||||
* @throws {Error} 未知 SpiritType 或 component 字段为 "unknown" 时抛错
|
||||
*/
|
||||
export function mapSpiritTypeToComponent(type) {
|
||||
const semantics = loadSemantics();
|
||||
const entry = semantics.spirit_types[type];
|
||||
if (!entry) {
|
||||
throw new Error(`Unknown SpiritType "${type}" - not in fixtures/spirit-semantics.json`);
|
||||
}
|
||||
if (entry.component === 'unknown') {
|
||||
throw new Error(`SpiritType "${type}" component not yet reverse-engineered - complete Task 5 (gameabc.min.js 逆向) first`);
|
||||
}
|
||||
return entry.component;
|
||||
}
|
||||
|
||||
// ImgResID (XML) → SpriteFrame 真 UUID. 数据源: fixtures/gameabc_Image.json + YouleNexus
|
||||
// `atlas-*` 目录下的 .meta (含 subMetas.f9941.uuid). 下游不兜底: imgResId 不存在 / 对应
|
||||
// bmp 不在任何 `atlas-*` 下 / .meta 缺 f9941 → 全部 throw.
|
||||
const IMAGE_MAP_PATH = join(
|
||||
__dirname,
|
||||
'../framework-tests/legacy-layer-migration/fixtures/gameabc_Image.json'
|
||||
);
|
||||
|
||||
let _imageMap = null;
|
||||
function loadImageMap() {
|
||||
if (!_imageMap) _imageMap = JSON.parse(readFileSync(IMAGE_MAP_PATH, 'utf8'));
|
||||
return _imageMap;
|
||||
}
|
||||
|
||||
let _imageNaturalSizeMap = null;
|
||||
function loadImageNaturalSizeMap() {
|
||||
if (_imageNaturalSizeMap) return _imageNaturalSizeMap;
|
||||
const list = loadImageMap().ImageFileList;
|
||||
if (!Array.isArray(list)) {
|
||||
throw new Error('gameabc_Image.json missing ImageFileList array');
|
||||
}
|
||||
_imageNaturalSizeMap = new Map();
|
||||
for (const entry of list) {
|
||||
if (!entry || entry.id == null) continue;
|
||||
const width = Number(entry.w_all);
|
||||
const height = Number(entry.h_all);
|
||||
if (!Number.isFinite(width) || !Number.isFinite(height)) continue;
|
||||
_imageNaturalSizeMap.set(String(entry.id), { width, height });
|
||||
}
|
||||
return _imageNaturalSizeMap;
|
||||
}
|
||||
|
||||
function lookupImageNaturalSize(imgResId) {
|
||||
const key = String(imgResId);
|
||||
const naturalSize = loadImageNaturalSizeMap().get(key);
|
||||
if (!naturalSize) {
|
||||
throw new Error(`ImgResID "${imgResId}" missing natural size in gameabc_Image.json`);
|
||||
}
|
||||
return naturalSize;
|
||||
}
|
||||
|
||||
const ATLAS_ROOT = join(
|
||||
__dirname,
|
||||
'../YouleNexus/assets/framework/ui'
|
||||
);
|
||||
|
||||
const ATLAS_BY_LAYER_NAME = [
|
||||
['MainScene_PlayerInfo', 'atlas-hall'],
|
||||
['BackHall', 'atlas-hall'],
|
||||
['Login', 'atlas-login'],
|
||||
['Notice', 'atlas-login'],
|
||||
['Protol', 'atlas-login'],
|
||||
['Loading', 'atlas-login'],
|
||||
['Kick', 'atlas-login'],
|
||||
['Reconnect', 'atlas-login'],
|
||||
['Setting', 'atlas-login'],
|
||||
['Tips', 'atlas-login'],
|
||||
['updateRoomCard', 'atlas-login'],
|
||||
['phoneInfo', 'atlas-login'],
|
||||
['recordLayer', 'atlas-login'],
|
||||
['MenuPlayerInfo', 'atlas-login'],
|
||||
];
|
||||
|
||||
export function selectAtlasForLayerName(layerName) {
|
||||
const normalizedName = String(layerName || '').toLowerCase();
|
||||
const match = ATLAS_BY_LAYER_NAME.find(([keyword]) => normalizedName.includes(keyword.toLowerCase()));
|
||||
return match ? match[1] : 'atlas-login';
|
||||
}
|
||||
|
||||
function listAtlasDirectories() {
|
||||
if (!existsSync(ATLAS_ROOT)) return [];
|
||||
return readdirSync(ATLAS_ROOT)
|
||||
.filter(entry => entry.startsWith('atlas-') && statSync(join(ATLAS_ROOT, entry)).isDirectory());
|
||||
}
|
||||
|
||||
const _bmpToMetaPath = new Map();
|
||||
function loadBmpToMetaPath(preferredAtlas = null) {
|
||||
const cacheKey = preferredAtlas || 'default';
|
||||
if (_bmpToMetaPath.has(cacheKey)) return _bmpToMetaPath.get(cacheKey);
|
||||
const map = new Map();
|
||||
const directories = listAtlasDirectories();
|
||||
const orderedDirectories = [
|
||||
...(preferredAtlas ? [preferredAtlas] : []),
|
||||
...(preferredAtlas === 'atlas-login' || !preferredAtlas ? ['atlas-login'] : []),
|
||||
...directories.filter(entry => entry !== preferredAtlas && entry !== 'atlas-login'),
|
||||
];
|
||||
for (const entry of orderedDirectories) {
|
||||
const dir = join(ATLAS_ROOT, entry);
|
||||
for (const file of readdirSync(dir)) {
|
||||
if (!file.endsWith('.png.meta')) continue;
|
||||
const bmpName = file.replace(/\.meta$/, '');
|
||||
if (!map.has(bmpName)) map.set(bmpName, join(dir, file));
|
||||
}
|
||||
}
|
||||
|
||||
// Cocos imports multi-frame source BMPs as <bmp>_1.png, <bmp>_2.png, ...
|
||||
// Keep the first frame deterministic when a legacy image has no exact BMP basename.
|
||||
const imageMap = loadImageMap();
|
||||
const imageList = Array.isArray(imageMap.ImageFileList) ? imageMap.ImageFileList : [];
|
||||
for (const image of imageList) {
|
||||
if (!image?.bmp || map.has(image.bmp)) continue;
|
||||
const baseName = image.bmp.replace(/\.png$/i, '');
|
||||
const frameCount = Number.isInteger(Number(image.frame_all)) && Number(image.frame_all) > 0
|
||||
? Number(image.frame_all)
|
||||
: 1;
|
||||
for (let frame = 1; frame <= frameCount; frame += 1) {
|
||||
const frameName = `${baseName}_${frame}.png`;
|
||||
if (map.has(frameName)) {
|
||||
map.set(image.bmp, map.get(frameName));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
_bmpToMetaPath.set(cacheKey, map);
|
||||
return map;
|
||||
}
|
||||
|
||||
/**
|
||||
* 将 XML 中的 ImgResID 字符串解析为 SpriteFrame 真 UUID (含 @f9941 sub-asset 后缀).
|
||||
*
|
||||
* 流程: gameabc_Image.json[id].bmp → `atlas-*`/<bmp>.meta → subMetas.f9941.uuid.
|
||||
*
|
||||
* 数据源权威唯一、下游不兜底:
|
||||
* - imgResId 不在 gameabc_Image.json → throw
|
||||
* - 对应 bmp 不在任何 `atlas-*` 下 → throw
|
||||
* - .meta 缺 subMetas.f9941 → throw (说明该资源未走 sprite-frame 导入)
|
||||
*
|
||||
* @param {string} imgResId - XML ImgResID 字符串 (如 "20", "21", "25")
|
||||
* @param {string} [atlasDir] - 可选的 layer atlas 目录, 例如 atlas-login.
|
||||
* @returns {string} SpriteFrame 真 UUID, 形如 "<uuid>@f9941"
|
||||
*/
|
||||
export function resolveSpriteFrameUuid(imgResId, atlasDir = null) {
|
||||
const imageMap = loadImageMap();
|
||||
const list = imageMap.ImageFileList;
|
||||
if (!Array.isArray(list)) {
|
||||
throw new Error('gameabc_Image.json missing ImageFileList array');
|
||||
}
|
||||
const entry = list.find(e => e && e.id != null && (e.id === Number(imgResId) || String(e.id) === imgResId));
|
||||
if (!entry || !entry.bmp) {
|
||||
const known = list.filter(e => e && e.id != null).slice(0, 5).map(e => e.id).join(', ');
|
||||
throw new Error(`ImgResID "${imgResId}" not in gameabc_Image.json (known ids sample: ${known}...)`);
|
||||
}
|
||||
const bmpName = entry.bmp;
|
||||
|
||||
const bmpToMeta = loadBmpToMetaPath(atlasDir);
|
||||
const metaPath = bmpToMeta.get(bmpName);
|
||||
if (!metaPath) {
|
||||
throw new Error(`bmp "${bmpName}" (ImgResID ${imgResId}) not found under 'atlas-*' in ${ATLAS_ROOT}`);
|
||||
}
|
||||
|
||||
const meta = JSON.parse(readFileSync(metaPath, 'utf8'));
|
||||
const spriteFrame = meta.subMetas && meta.subMetas.f9941;
|
||||
if (!spriteFrame || !spriteFrame.uuid) {
|
||||
throw new Error(`${bmpName}.meta missing subMetas.f9941.uuid (importer not sprite-frame?)`);
|
||||
}
|
||||
return spriteFrame.uuid;
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// emitPrefabJson — Layer → Cocos prefab JSON 数组 (Task 8)
|
||||
//
|
||||
// Schema 严格按 fixtures/Login_Layer.prefab (已实测): cc.Prefab 头 + cc.Node 根 +
|
||||
// group-X 父节点 + 每个 Spirit (Node + UITransform + CompPrefabInfo + 主组件 +
|
||||
// CompPrefabInfo + Widget + CompPrefabInfo + PrefabInfo) + 末尾 group/root 的
|
||||
// UITransform/Widget/PrefabInfo 块.
|
||||
//
|
||||
// ID 分配: cc.Prefab 在 array[0] (无 __id__ 字段, 仅 data.__id__=1 引用根);
|
||||
// 从 array[1] 开始 __id__ = array-index. root=1, group-N=2..K, 然后 spirits
|
||||
// 按 group-then-IndexOfLayer 顺序, 每个 spirit 占 8 个 id (1 Node + 1 UIT +
|
||||
// 1 CompInfo + 1 主组件 + 1 CompInfo + 1 Widget + 1 CompInfo + 1 PrefabInfo).
|
||||
// group-N 的 UIT/Widget/PrefabInfo 排在所有 spirits 之后, root 的排在最后.
|
||||
//
|
||||
// 设计分辨率: 1600×720 (YouleNexus project.json), 与 Login_Layer.prefab 中
|
||||
// group/root UITransform._contentSize 一致.
|
||||
// ============================================================================
|
||||
|
||||
const DESIGN_WIDTH = 1600;
|
||||
const DESIGN_HEIGHT = 720;
|
||||
|
||||
function randomFileId() {
|
||||
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
||||
let id = '';
|
||||
for (let i = 0; i < 22; i++) {
|
||||
id += chars[Math.floor(Math.random() * chars.length)];
|
||||
}
|
||||
return id;
|
||||
}
|
||||
|
||||
function makeNode(name, parentRef) {
|
||||
return {
|
||||
__type__: 'cc.Node',
|
||||
_name: name,
|
||||
_objFlags: 0,
|
||||
__editorExtras__: {},
|
||||
_parent: parentRef,
|
||||
_children: [],
|
||||
_active: true,
|
||||
_components: [],
|
||||
_prefab: null,
|
||||
_lpos: { __type__: 'cc.Vec3', x: 0, y: 0, z: 0 },
|
||||
_lrot: { __type__: 'cc.Quat', x: 0, y: 0, z: 0, w: 1 },
|
||||
_lscale: { __type__: 'cc.Vec3', x: 1, y: 1, z: 1 },
|
||||
_mobility: 0,
|
||||
_layer: 1073741824,
|
||||
_euler: { __type__: 'cc.Vec3', x: 0, y: 0, z: 0 },
|
||||
_id: '',
|
||||
};
|
||||
}
|
||||
|
||||
function makeCompPrefabInfo() {
|
||||
return {
|
||||
__type__: 'cc.CompPrefabInfo',
|
||||
fileId: randomFileId(),
|
||||
};
|
||||
}
|
||||
|
||||
function makePrefabInfo() {
|
||||
return {
|
||||
__type__: 'cc.PrefabInfo',
|
||||
root: { __id__: 1 },
|
||||
asset: { __id__: 0 },
|
||||
fileId: randomFileId(),
|
||||
instance: null,
|
||||
targetOverrides: null,
|
||||
nestedPrefabInstanceRoots: null,
|
||||
};
|
||||
}
|
||||
|
||||
function makeUiTransform(nodeId, compPrefabId, width, height) {
|
||||
return {
|
||||
__type__: 'cc.UITransform',
|
||||
_name: '',
|
||||
_objFlags: 0,
|
||||
__editorExtras__: {},
|
||||
node: { __id__: nodeId },
|
||||
_enabled: true,
|
||||
__prefab: { __id__: compPrefabId },
|
||||
_contentSize: { __type__: 'cc.Size', width, height },
|
||||
_anchorPoint: { __type__: 'cc.Vec2', x: 0.5, y: 0.5 },
|
||||
_id: '',
|
||||
};
|
||||
}
|
||||
|
||||
function makeWidget(nodeId, compPrefabId, originalWidth = 100, originalHeight = 100) {
|
||||
return {
|
||||
__type__: 'cc.Widget',
|
||||
_name: '',
|
||||
_objFlags: 0,
|
||||
__editorExtras__: {},
|
||||
node: { __id__: nodeId },
|
||||
_enabled: true,
|
||||
__prefab: { __id__: compPrefabId },
|
||||
_alignFlags: 45,
|
||||
_target: null,
|
||||
_left: 0, _right: 0, _top: 0, _bottom: 0,
|
||||
_horizontalCenter: 0, _verticalCenter: 0,
|
||||
_isAbsLeft: true, _isAbsRight: true, _isAbsTop: true, _isAbsBottom: true,
|
||||
_isAbsHorizontalCenter: true, _isAbsVerticalCenter: true,
|
||||
_originalWidth: originalWidth, _originalHeight: originalHeight,
|
||||
_alignMode: 2,
|
||||
_lockFlags: 0,
|
||||
_id: '',
|
||||
};
|
||||
}
|
||||
|
||||
// Spirit 专用的 Widget 工厂: 调用 computeWidgetAlignment 计算锚定参数.
|
||||
// 用法: buildSpiritBlock 在父节点是 group 时调用此工厂, 替代默认 makeWidget.
|
||||
// 注意: 此工厂只应在 parent 确实是 group 容器 (而非 Layer 根) 时调用 — 见
|
||||
// buildSpiritBlock 的入参语义. Layer 根与 group-X 末尾 envelope 仍用 makeWidget.
|
||||
function makeSpiritWidget(nodeId, compPrefabId, spirit) {
|
||||
const align = computeWidgetAlignment(spirit);
|
||||
return {
|
||||
__type__: 'cc.Widget',
|
||||
_name: '',
|
||||
_objFlags: 0,
|
||||
__editorExtras__: {},
|
||||
node: { __id__: nodeId },
|
||||
_enabled: true,
|
||||
__prefab: { __id__: compPrefabId },
|
||||
...align, // _alignFlags, _horizontal/verticalCenter...
|
||||
_id: '',
|
||||
};
|
||||
}
|
||||
|
||||
function makeSprite(nodeId, compPrefabId, spriteFrameUuid, type = 0) {
|
||||
return {
|
||||
__type__: 'cc.Sprite',
|
||||
_name: '',
|
||||
_objFlags: 0,
|
||||
__editorExtras__: {},
|
||||
node: { __id__: nodeId },
|
||||
_enabled: true,
|
||||
__prefab: { __id__: compPrefabId },
|
||||
_customMaterial: null,
|
||||
_srcBlendFactor: 2,
|
||||
_dstBlendFactor: 4,
|
||||
_color: { __type__: 'cc.Color', r: 255, g: 255, b: 255, a: 255 },
|
||||
_spriteFrame: spriteFrameUuid
|
||||
? { __uuid__: spriteFrameUuid, __expectedType__: 'cc.SpriteFrame' }
|
||||
: null,
|
||||
_type: type, // 0=SIMPLE, 1=SLICED, 2=TILED, 3=FILLED
|
||||
_fillType: 0,
|
||||
_sizeMode: 0,
|
||||
_fillCenter: { __type__: 'cc.Vec2', x: 0, y: 0 },
|
||||
_fillStart: 0,
|
||||
_fillRange: 0,
|
||||
_isTrimmedMode: true,
|
||||
_useGrayscale: false,
|
||||
_atlas: null,
|
||||
_id: '',
|
||||
};
|
||||
}
|
||||
|
||||
function makeLabel(nodeId, compPrefabId, spirit) {
|
||||
const fontSize = Number.isFinite(Number(spirit.fontSize)) ? Number(spirit.fontSize) : 40;
|
||||
const lineSpace = Number.isFinite(Number(spirit.lineSpace)) ? Number(spirit.lineSpace) : fontSize;
|
||||
const rowSpace = Number.isFinite(Number(spirit.rowSpace)) ? Number(spirit.rowSpace) : 0;
|
||||
const color = Number.isInteger(Number(spirit.fontColor)) ? Number(spirit.fontColor) : 0xffffff;
|
||||
const horizontalAlign = Number.isInteger(Number(spirit.alignHorz)) ? Number(spirit.alignHorz) : 1;
|
||||
const verticalAlign = Number.isInteger(Number(spirit.alignVert)) ? Number(spirit.alignVert) : 1;
|
||||
return {
|
||||
__type__: 'cc.Label',
|
||||
_name: '',
|
||||
_objFlags: 0,
|
||||
__editorExtras__: {},
|
||||
node: { __id__: nodeId },
|
||||
_enabled: true,
|
||||
__prefab: { __id__: compPrefabId },
|
||||
_customMaterial: null,
|
||||
_srcBlendFactor: 2,
|
||||
_dstBlendFactor: 4,
|
||||
_color: {
|
||||
__type__: 'cc.Color',
|
||||
r: (color >> 16) & 255,
|
||||
g: (color >> 8) & 255,
|
||||
b: color & 255,
|
||||
a: 255,
|
||||
},
|
||||
_string: spirit.text || spirit.name || '',
|
||||
_horizontalAlign: horizontalAlign,
|
||||
_verticalAlign: verticalAlign,
|
||||
_actualFontSize: fontSize,
|
||||
_fontSize: fontSize,
|
||||
_fontFamily: 'Arial',
|
||||
_lineHeight: lineSpace,
|
||||
_overflow: 0,
|
||||
_enableWrapText: spirit.wordWrap !== undefined && spirit.wordWrap !== '0',
|
||||
_font: null,
|
||||
_isSystemFontUsed: true,
|
||||
_spacingX: rowSpace,
|
||||
_isItalic: false,
|
||||
_isBold: spirit.fontBold !== undefined && spirit.fontBold !== '0',
|
||||
_isUnderline: false,
|
||||
_underlineHeight: 2,
|
||||
_cacheMode: 0,
|
||||
_enableOutline: false,
|
||||
_outlineColor: { __type__: 'cc.Color', r: 0, g: 0, b: 0, a: 255 },
|
||||
_outlineWidth: 2,
|
||||
_enableShadow: false,
|
||||
_shadowColor: { __type__: 'cc.Color', r: 0, g: 0, b: 0, a: 255 },
|
||||
_shadowOffset: { __type__: 'cc.Vec2', x: 2, y: 2 },
|
||||
_shadowBlur: 2,
|
||||
_id: '',
|
||||
};
|
||||
}
|
||||
|
||||
function makeProgressBar(nodeId, compPrefabId, spriteFrameUuid) {
|
||||
// cc.ProgressBar 简化 schema — 真实 fixtures 中 Layer 含 type=3 spirit 但
|
||||
// Login_Layer.prefab fixture 无 ProgressBar 节点. 字段尽量按 Cocos 3.8 实际 schema 写,
|
||||
// 缺资源时降级为 null (非 unknown; 数据源权威缺失由调用方上游补).
|
||||
return {
|
||||
__type__: 'cc.ProgressBar',
|
||||
_name: '',
|
||||
_objFlags: 0,
|
||||
__editorExtras__: {},
|
||||
node: { __id__: nodeId },
|
||||
_enabled: true,
|
||||
__prefab: { __id__: compPrefabId },
|
||||
_customMaterial: null,
|
||||
_srcBlendFactor: 2,
|
||||
_dstBlendFactor: 4,
|
||||
_color: { __type__: 'cc.Color', r: 255, g: 255, b: 255, a: 255 },
|
||||
_spriteFrame: spriteFrameUuid
|
||||
? { __uuid__: spriteFrameUuid, __expectedType__: 'cc.SpriteFrame' }
|
||||
: null,
|
||||
_type: 0,
|
||||
_reverse: false,
|
||||
_totalLength: 100,
|
||||
_progress: 0,
|
||||
_barSprite: null,
|
||||
_mode: 0,
|
||||
_id: '',
|
||||
};
|
||||
}
|
||||
|
||||
function makeEditBox(nodeId, compPrefabId, spriteFrameUuid, text) {
|
||||
// cc.EditBox 简化 schema — 同上, fixture 无 EditBox 节点, 字段按 Cocos 3.8 实际 schema.
|
||||
return {
|
||||
__type__: 'cc.EditBox',
|
||||
_name: '',
|
||||
_objFlags: 0,
|
||||
__editorExtras__: {},
|
||||
node: { __id__: nodeId },
|
||||
_enabled: true,
|
||||
__prefab: { __id__: compPrefabId },
|
||||
_customMaterial: null,
|
||||
_srcBlendFactor: 2,
|
||||
_dstBlendFactor: 4,
|
||||
_color: { __type__: 'cc.Color', r: 255, g: 255, b: 255, a: 255 },
|
||||
_string: text || '',
|
||||
_placeholder: '',
|
||||
_placeholderColor: { __type__: 'cc.Color', r: 127, g: 127, b: 127, a: 255 },
|
||||
_maxLength: 20,
|
||||
_inputMode: 0,
|
||||
_inputFlag: 0,
|
||||
_returnType: 0,
|
||||
_backgroundImage: spriteFrameUuid
|
||||
? { __uuid__: spriteFrameUuid, __expectedType__: 'cc.SpriteFrame' }
|
||||
: null,
|
||||
_fontColor: { __type__: 'cc.Color', r: 255, g: 255, b: 255, a: 255 },
|
||||
_fontSize: 20,
|
||||
_lineHeight: 40,
|
||||
_fontFamily: 'Arial',
|
||||
_isSystemFontUsed: true,
|
||||
_tabIndex: 0,
|
||||
_editingDidBegin: null,
|
||||
_textChanged: null,
|
||||
_editingDidEnded: null,
|
||||
_editingReturn: null,
|
||||
_stayOnTop: false,
|
||||
_id: '',
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* 将 parsed Layer 对象转为 Cocos prefab JSON 数组, schema 严格按
|
||||
* fixtures/Login_Layer.prefab.
|
||||
*
|
||||
* 字段需求 (数据源权威唯一):
|
||||
* layer.layerName — 必有; cc.Prefab._name / 根节点._name
|
||||
* layer.spirits[*].id — 必有; spirit 唯一标识
|
||||
* layer.spirits[*].name — 必有; 节点._name
|
||||
* layer.spirits[*].type — 必有; 走 mapSpiritTypeToComponent (未知 throw)
|
||||
* layer.spirits[*].x/y/w/h — 必有; 走 computeLpos + computeContentSize
|
||||
* layer.spirits[*].group/indexOfLayer — 必有; 走 buildGroupParents
|
||||
* layer.spirits[*].imgResID — Sprite (type=0/5) 必有; 走 resolveSpriteFrameUuid
|
||||
*
|
||||
* ID 分配策略 (与 Login_Layer.prefab 1:1 对齐):
|
||||
* - cc.Prefab 在 array[0], 无 __id__ (data.__id__=1 引用根)
|
||||
* - 数组下标 i ≥ 1 的对象 __id__ = i
|
||||
* - 根节点 = array[1] (id=1)
|
||||
* - group-X 父节点顺序: 按 group ID 升序排, 紧随根节点 (id=2..K)
|
||||
* - Spirit 顺序: 按 group 升序, group 内按 IndexOfLayer 升序
|
||||
* 每个 spirit 占 8 个 id: Node UIT CompInfo 主组件 CompInfo Widget CompInfo PrefabInfo
|
||||
* - group 末尾追加: group-X 的 UIT CompInfo Widget CompInfo PrefabInfo (5 id)
|
||||
* - root 末尾追加: root 的 UIT CompInfo Widget CompInfo PrefabInfo (5 id)
|
||||
*
|
||||
* @param {{ layerId?: string, layerName: string, spirits: Array<{ id: string, name: string, type: string, imgResID: string, x: string, y: string, w: string, h: string, group: string, indexOfLayer: string }> }} layer
|
||||
* @returns {Array<object>} Cocos prefab JSON 数组
|
||||
*/
|
||||
export function emitPrefabJson(layer, opts = {}) {
|
||||
if (!layer || !layer.layerName) {
|
||||
throw new Error('emitPrefabJson: layer.layerName is required');
|
||||
}
|
||||
if (!Array.isArray(layer.spirits)) {
|
||||
throw new Error('emitPrefabJson: layer.spirits must be an array');
|
||||
}
|
||||
|
||||
const out = [];
|
||||
const targetName = opts.targetName || layer.layerName;
|
||||
const atlasName = opts.atlasName || selectAtlasForLayerName(targetName);
|
||||
|
||||
// ── 1. cc.Prefab 头 ─────────────────────────────────────────────
|
||||
out.push({
|
||||
__type__: 'cc.Prefab',
|
||||
_name: targetName,
|
||||
_objFlags: 0,
|
||||
__editorExtras__: {},
|
||||
_native: '',
|
||||
data: { __id__: 1 }, // 根节点 id
|
||||
optimizationPolicy: 0,
|
||||
persistent: false,
|
||||
});
|
||||
|
||||
// ── 2. 根节点 cc.Node (id=1) ────────────────────────────────────
|
||||
const rootNode = makeNode(targetName, null);
|
||||
out.push(rootNode);
|
||||
const rootId = out.length - 1; // =1
|
||||
|
||||
// ── 3. group-X 父节点 ──────────────────────────────────────────
|
||||
const { groupParents, rootChildSpiritIds } = buildGroupParents(layer.spirits);
|
||||
const spiritById = new Map(layer.spirits.map(s => [s.id, s]));
|
||||
|
||||
const groupInfo = []; // [{ group, node, nodeId }]
|
||||
for (const g of groupParents) {
|
||||
const node = makeNode(g.name, { __id__: rootId });
|
||||
out.push(node);
|
||||
const nodeId = out.length - 1;
|
||||
rootNode._children.push({ __id__: nodeId }); // wire group node into root._children (Task 9 fix round 1)
|
||||
groupInfo.push({ group: g, node, nodeId });
|
||||
}
|
||||
|
||||
// ── 4. Spirit 子节点 + 组件 ────────────────────────────────────
|
||||
const spiritInfo = new Map(); // spiritId → { node, nodeId, prefabInfoId }
|
||||
|
||||
for (const gi of groupInfo) {
|
||||
for (const spiritId of gi.group.childSpiritIds) {
|
||||
const spirit = spiritById.get(spiritId);
|
||||
if (!spirit) {
|
||||
throw new Error(`emitPrefabJson: spirit id ${spiritId} referenced by ${gi.group.name} but not found in layer.spirits`);
|
||||
}
|
||||
const info = buildSpiritBlock(spirit, { __id__: gi.nodeId }, out, { parentIsGroup: true, atlasName });
|
||||
spiritInfo.set(spiritId, info);
|
||||
gi.node._children.push({ __id__: info.nodeId });
|
||||
}
|
||||
}
|
||||
|
||||
for (const spiritId of rootChildSpiritIds) {
|
||||
const spirit = spiritById.get(spiritId);
|
||||
if (!spirit) {
|
||||
throw new Error(`emitPrefabJson: root child spirit id ${spiritId} not found in layer.spirits`);
|
||||
}
|
||||
const info = buildSpiritBlock(spirit, { __id__: rootId }, out, { parentIsGroup: false, atlasName });
|
||||
spiritInfo.set(spiritId, info);
|
||||
rootNode._children.push({ __id__: info.nodeId });
|
||||
}
|
||||
|
||||
// ── 5. group-X 末尾 UITransform + Widget + PrefabInfo ──────────
|
||||
for (const gi of groupInfo) {
|
||||
appendNodeEnvelope(gi.node, gi.nodeId, out);
|
||||
}
|
||||
|
||||
// ── 6. 根节点末尾 UITransform + Widget + PrefabInfo ───────────
|
||||
appendNodeEnvelope(rootNode, rootId, out);
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* 构造单个 Spirit 的所有对象 (Node + UITransform + CompPrefabInfo + 主组件 +
|
||||
* CompPrefabInfo + Widget + CompPrefabInfo + PrefabInfo), 按 schema 顺序 push
|
||||
* 到 out 数组, 返回关键 id 供外层 wiring.
|
||||
*
|
||||
* @param {object} spirit - Spirit 字段
|
||||
* @param {{ __id__: number }} parentRef - 父节点引用
|
||||
* @param {Array<object>} out - 输出 JSON 数组
|
||||
* @param {{ parentIsGroup: boolean }} [opts] - parentIsGroup=true 时 Widget
|
||||
* 走 computeWidgetAlignment (锚定 = 水平/垂直居中); false (Layer 根直挂)
|
||||
* 走默认 makeWidget (_alignFlags=45 全屏铺满).
|
||||
*/
|
||||
function buildSpiritBlock(spirit, parentRef, out, opts = { parentIsGroup: false }) {
|
||||
const lpos = computeLpos(spirit);
|
||||
const width = parseFloat(spirit.w || '0');
|
||||
const height = parseFloat(spirit.h || '0');
|
||||
const isFullScreen = width === 1280 && height === 720;
|
||||
const size = isFullScreen
|
||||
? { width: 1600, height: 720 }
|
||||
: computeContentSize(spirit);
|
||||
const componentName = mapSpiritTypeToComponent(spirit.type);
|
||||
|
||||
// 1. cc.Node (主组件 id=K+0)
|
||||
const node = makeNode(spirit.name, parentRef);
|
||||
node._lpos = { __type__: 'cc.Vec3', x: lpos.x, y: lpos.y, z: lpos.z };
|
||||
out.push(node);
|
||||
const nodeId = out.length - 1;
|
||||
|
||||
// 2. cc.UITransform (K+1)
|
||||
const uiCompInfo = makeCompPrefabInfo();
|
||||
const uiTransform = makeUiTransform(nodeId, out.length + 1, size.width, size.height);
|
||||
out.push(uiTransform);
|
||||
const uiId = out.length - 1;
|
||||
out.push(uiCompInfo);
|
||||
const uiCompInfoId = out.length - 1;
|
||||
|
||||
// 3. 主组件 (K+3) — component 先 push, CompPrefabInfo follows it.
|
||||
const mainCompInfo = makeCompPrefabInfo();
|
||||
const mainCompInfoId = out.length + 1;
|
||||
|
||||
const spriteFrameUuid = (spirit.type === '0' || spirit.type === '3' || spirit.type === '5')
|
||||
? resolveSpriteFrameUuid(spirit.imgResID, opts.atlasName)
|
||||
: null;
|
||||
|
||||
let mainComp;
|
||||
if (componentName === 'cc.Sprite') {
|
||||
const spriteType = spirit.type === '5' ? 1 : 0; // 5=SLICED, else SIMPLE
|
||||
mainComp = makeSprite(nodeId, mainCompInfoId, spriteFrameUuid, spriteType);
|
||||
} else if (componentName === 'cc.Label') {
|
||||
mainComp = makeLabel(nodeId, mainCompInfoId, spirit);
|
||||
} else if (componentName === 'cc.ProgressBar') {
|
||||
mainComp = makeProgressBar(nodeId, mainCompInfoId, spriteFrameUuid);
|
||||
} else if (componentName === 'cc.EditBox') {
|
||||
mainComp = makeEditBox(nodeId, mainCompInfoId, spriteFrameUuid, spirit.name);
|
||||
} else {
|
||||
// 数据源权威唯一: mapSpiritTypeToComponent 已 throw "unknown" 情况, 此处兜底是
|
||||
// 防御性 — 若新增组件类型但未在 makeXxx 注册, 显式报错暴露.
|
||||
throw new Error(`emitPrefabJson: component "${componentName}" not yet supported by emitPrefabJson — add makeXxx helper for SpiritType ${spirit.type}`);
|
||||
}
|
||||
out.push(mainComp);
|
||||
const mainCompId = out.length - 1;
|
||||
out.push(mainCompInfo);
|
||||
|
||||
// 4. cc.Widget (K+5) — component 先 push, CompPrefabInfo follows it.
|
||||
const widgetCompInfo = makeCompPrefabInfo();
|
||||
// parentIsGroup 时走 computeWidgetAlignment; Layer 根直挂时使用全屏 Widget.
|
||||
const widget = opts.parentIsGroup
|
||||
? makeSpiritWidget(nodeId, out.length + 1, spirit)
|
||||
: makeWidget(nodeId, out.length + 1);
|
||||
out.push(widget);
|
||||
const widgetId = out.length - 1;
|
||||
out.push(widgetCompInfo);
|
||||
const widgetCompInfoId = out.length - 1;
|
||||
|
||||
// 5. cc.PrefabInfo (K+7) — Node 的 _prefab 指向这里
|
||||
const prefabInfo = makePrefabInfo();
|
||||
out.push(prefabInfo);
|
||||
const prefabInfoId = out.length - 1;
|
||||
|
||||
// ── Wire up Node ────────────────────────────────────────────
|
||||
node._components.push({ __id__: uiId }, { __id__: mainCompId }, { __id__: widgetId });
|
||||
node._prefab = { __id__: prefabInfoId };
|
||||
|
||||
return { node, nodeId, prefabInfoId };
|
||||
}
|
||||
|
||||
/**
|
||||
* 给非 Spirit 节点 (root / group-X) 追加末尾的 UITransform + Widget + PrefabInfo
|
||||
* 块, 并把 node._components / node._prefab 补齐.
|
||||
*/
|
||||
function appendNodeEnvelope(node, nodeId, out) {
|
||||
// 1. UITransform + CompPrefabInfo
|
||||
const uiCompInfo = makeCompPrefabInfo();
|
||||
const uiTransform = makeUiTransform(nodeId, out.length + 1, DESIGN_WIDTH, DESIGN_HEIGHT);
|
||||
out.push(uiTransform);
|
||||
const uiId = out.length - 1;
|
||||
out.push(uiCompInfo);
|
||||
const uiCompInfoId = out.length - 1;
|
||||
|
||||
// 2. Widget + CompPrefabInfo
|
||||
const widgetCompInfo = makeCompPrefabInfo();
|
||||
const widget = makeWidget(nodeId, out.length + 1);
|
||||
out.push(widget);
|
||||
const widgetId = out.length - 1;
|
||||
out.push(widgetCompInfo);
|
||||
const widgetCompInfoId = out.length - 1;
|
||||
|
||||
// 3. PrefabInfo
|
||||
const prefabInfo = makePrefabInfo();
|
||||
out.push(prefabInfo);
|
||||
const prefabInfoId = out.length - 1;
|
||||
|
||||
node._components.push({ __id__: uiId }, { __id__: widgetId });
|
||||
node._prefab = { __id__: prefabInfoId };
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
// 递归收集 framework-tests 下所有 *.test.ts 交给 node 测试运行器。
|
||||
// 递归收集 framework-tests 下所有 *.test.{ts,mjs} 交给 node 测试运行器。
|
||||
// node --test 的 glob 模式需 v20.14+,本仓库当前 node 20.13.x 不支持,
|
||||
// 故用此零依赖、跨平台 runner 显式枚举文件,保持 test:framework 行为一致。
|
||||
// *.test.mjs: legacy-layer-migration 等纯 ESM 脚本测试 (Tasks 9-12 legacy 迁移管线).
|
||||
import { readdirSync, statSync } from 'node:fs';
|
||||
import { join } from 'node:path';
|
||||
import { spawnSync } from 'node:child_process';
|
||||
@@ -11,12 +12,12 @@ const files = [];
|
||||
for (const entry of readdirSync(dir)) {
|
||||
const p = join(dir, entry);
|
||||
if (statSync(p).isDirectory()) walk(p);
|
||||
else if (p.endsWith('.test.ts')) files.push(p);
|
||||
else if (p.endsWith('.test.ts') || p.endsWith('.test.mjs')) files.push(p);
|
||||
}
|
||||
})(root);
|
||||
|
||||
if (files.length === 0) {
|
||||
console.error(`[run-framework-tests] 未发现任何 *.test.ts(root=${root})`);
|
||||
console.error(`[run-framework-tests] 未发现任何 *.test.{ts,mjs}(root=${root})`);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
#!/usr/bin/env node
|
||||
// 批量跑 legacy-layer → Cocos prefab CLI。
|
||||
// 每条 target: <source xml> → <youle prefab> → <OUT_DIR/prefab>.prefab + .diff.
|
||||
//
|
||||
// 设计要点:
|
||||
// - 全部输出到隔离 OUT_DIR (out/legacy-migration/), 不直接覆盖 YouleNexus 现有 prefab.
|
||||
// - 单个 target 失败 (例如 ImgResID 未导入 sprite) 不阻塞后续 target, 日志记录后继续.
|
||||
// - per "下游不兜底" 原则: CLI 本身必须 throw 让错误暴露; batch 仅负责捕获 + 汇总, 不做修补.
|
||||
import { execSync } from 'node:child_process';
|
||||
import { join } from 'node:path';
|
||||
import { ROOT } from './lib/paths.mjs';
|
||||
|
||||
const OUT_DIR = join(ROOT, 'YouleNexus', 'out', 'legacy-migration');
|
||||
const SOURCE = join(ROOT, '..', 'projects', 'Game_Surface_3', 'save');
|
||||
|
||||
// 按 spec 已核实映射表 (11 个 prefab). Layer10_Protocol + Login_Layer + Layer619_BackOtherGame 三个 PoC 已存在,
|
||||
// 但 batch 仍会重新生成它们 (idempotent — 覆盖 out/legacy-migration/*.prefab + .diff).
|
||||
const targets = [
|
||||
{ xml: 'Layer00002.xml', prefab: 'YouleNexus/assets/framework/ui/prefabs/Login_Layer.prefab', name: 'Login_Layer', note: 'PoC 3 (Layer00002)' },
|
||||
{ xml: 'Layer00017.xml', prefab: 'YouleNexus/assets/framework/ui/prefabs/views/PlayerInfoView.prefab', name: 'MenuPlayerInfo_Layer', note: '拍板 A (Layer00017)' },
|
||||
{ xml: 'Layer00029.xml', prefab: 'YouleNexus/assets/framework/ui/prefabs/widgets/Group106_PhoneVerify.prefab', name: 'phoneInfo' },
|
||||
{ xml: 'Layer00010.xml', prefab: 'YouleNexus/assets/framework/ui/prefabs/widgets/Layer10_Protocol.prefab', name: 'Protol_Layer', note: 'PoC 2 (Layer00010)' },
|
||||
{ xml: 'Layer00609.xml', prefab: 'YouleNexus/assets/framework/ui/prefabs/widgets/Layer609_Setting.prefab', name: 'Setting_Layer' },
|
||||
{ xml: 'Layer00612.xml', prefab: 'YouleNexus/assets/framework/ui/prefabs/widgets/Layer612_Tips.prefab', name: 'Tips_Layer' },
|
||||
{ xml: 'Layer00613.xml', prefab: 'YouleNexus/assets/framework/ui/prefabs/widgets/Layer613_RoomCardUpdate.prefab', name: 'updateRoomCard_Layer' },
|
||||
{ xml: 'Layer00614.xml', prefab: 'YouleNexus/assets/framework/ui/prefabs/widgets/Layer614_Loading.prefab', name: 'Loading_Layer' },
|
||||
{ xml: 'Layer00615.xml', prefab: 'YouleNexus/assets/framework/ui/prefabs/widgets/Layer615_Reconnect.prefab', name: 'Reconnect_Layer' },
|
||||
{ xml: 'Layer00616.xml', prefab: 'YouleNexus/assets/framework/ui/prefabs/widgets/Layer616_Kick.prefab', name: 'Kick_Layer' },
|
||||
{ xml: 'Layer00008.xml', prefab: 'YouleNexus/assets/framework/ui/prefabs/widgets/Layer617_Notice.prefab', name: 'Notice_Layer', note: '拍板 B (Layer00008)' },
|
||||
{ xml: 'Layer00619.xml', prefab: 'YouleNexus/assets/framework/ui/prefabs/widgets/Layer619_BackOtherGame.prefab', name: 'BackHall_Layer', note: 'PoC 1 (Layer00619)' },
|
||||
{ xml: 'Layer00620.xml', prefab: 'YouleNexus/assets/framework/ui/prefabs/widgets/Layer620_Record.prefab', name: 'recordLayer' },
|
||||
];
|
||||
|
||||
const results = { ok: [], failed: [] };
|
||||
console.log(`Generating ${targets.length} prefabs to ${OUT_DIR}\n`);
|
||||
|
||||
for (const t of targets) {
|
||||
console.log(`\n=== Processing ${t.name} (${t.xml}) ===`);
|
||||
try {
|
||||
execSync(
|
||||
`node scripts/legacy-layer-to-cocos-prefab-cli.mjs "${SOURCE}/${t.xml}" "${ROOT}/${t.prefab}" "${OUT_DIR}"`,
|
||||
{ stdio: 'inherit' }
|
||||
);
|
||||
results.ok.push(t.name);
|
||||
} catch (e) {
|
||||
console.error(` ⚠️ FAILED: ${t.name}: ${(e.message || String(e)).slice(0, 200)}`);
|
||||
results.failed.push({ name: t.name, xml: t.xml, error: (e.message || String(e)).slice(0, 200) });
|
||||
// Continue with next target — partial success acceptable per "不静默兜底" + batch resilience
|
||||
}
|
||||
}
|
||||
|
||||
console.log('\n=== Batch complete ===');
|
||||
console.log(`Output dir: ${OUT_DIR}`);
|
||||
console.log(`OK: ${results.ok.length} | FAILED: ${results.failed.length}`);
|
||||
if (results.failed.length > 0) {
|
||||
console.log('\nFailed targets:');
|
||||
for (const f of results.failed) {
|
||||
console.log(` - ${f.name} (${f.xml}): ${f.error}`);
|
||||
}
|
||||
}
|
||||
console.log('\nNext step: human reviews each .diff and decides whether to overwrite YouleNexus original prefabs.');
|
||||
process.exitCode = results.failed.length > 0 ? 1 : 0;
|
||||
Reference in New Issue
Block a user