Merge branch 'feature/gacha' into develop

feature/ads-smart-display
tiendat3699 2024-06-11 13:39:09 +07:00
commit 4bfa05df0a
85 changed files with 17965 additions and 1497 deletions

View File

@ -21,5 +21,5 @@
"library/": true,
"**/*.anim": true
},
"cSpell.ignoreWords": ["Poolable", "ccclass", "endregion", "lerp"]
"cSpell.ignoreWords": ["Gacha", "Poolable", "ccclass", "endregion", "lerp"]
}

View File

@ -23,7 +23,11 @@
],
"_exoticAnimation": null,
"_events": [],
"_embeddedPlayers": []
"_embeddedPlayers": [],
"_additiveSettings": {
"__id__": 23
},
"_auxiliaryCurveEntries": []
},
{
"__type__": "cc.animation.VectorTrack",
@ -105,7 +109,7 @@
"__type__": "cc.RealKeyframeValue",
"interpolationMode": 2,
"tangentWeightMode": 0,
"value": 0,
"value": -40,
"rightTangent": 0,
"rightTangentWeight": 1,
"leftTangent": 0,
@ -299,5 +303,10 @@
"_values": [],
"preExtrapolation": 1,
"postExtrapolation": 1
},
{
"__type__": "cc.AnimationClipAdditiveSettings",
"enabled": false,
"refClip": null
}
]

View File

@ -0,0 +1,9 @@
{
"ver": "1.2.0",
"importer": "directory",
"imported": true,
"uuid": "22995de3-ea1d-4f64-b957-9ff35a0bb5a6",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@ -0,0 +1,9 @@
{
"ver": "1.2.0",
"importer": "directory",
"imported": true,
"uuid": "85f6d192-2e60-4da3-9170-7d8436913f8f",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@ -0,0 +1,20 @@
random-flip-card.png
size: 1024,512
format: RGBA8888
filter: Linear,Linear
repeat: none
back
rotate: false
xy: 4, 4
size: 423, 423
orig: 423, 423
offset: 0, 0
index: -1
front
rotate: false
xy: 431, 4
size: 423, 423
orig: 423, 423
offset: 0, 0
index: -1

View File

@ -0,0 +1,11 @@
{
"ver": "1.0.2",
"importer": "text",
"imported": true,
"uuid": "58baf684-79f6-4d9c-b11e-546a892df45d",
"files": [
".json"
],
"subMetas": {},
"userData": {}
}

View File

@ -0,0 +1,316 @@
{
"skeleton": {
"hash": "rPsrGVyt4kSHlUEyWQwYJ7BJ7Cc",
"spine": "3.8.99",
"x": -461.5,
"y": -461.5,
"width": 923,
"height": 923,
"images": "",
"audio": ""
},
"bones": [
{ "name": "root" },
{ "name": "card1", "parent": "root", "x": -250, "y": 250 },
{ "name": "card2", "parent": "root", "x": 250, "y": 250 },
{ "name": "card3", "parent": "root", "x": 250, "y": -250 },
{ "name": "card4", "parent": "root", "x": -250, "y": -250 },
{ "name": "card1-flip", "parent": "card1" },
{ "name": "card2-flip", "parent": "card2" },
{ "name": "card3-flip", "parent": "card3" },
{ "name": "card4-flip", "parent": "card4" }
],
"slots": [
{ "name": "front1", "bone": "card1-flip", "color": "ffffff00", "attachment": "front" },
{ "name": "front2", "bone": "card2-flip", "color": "ffffff00", "attachment": "front" },
{ "name": "front3", "bone": "card3-flip", "color": "ffffff00", "attachment": "front" },
{ "name": "front4", "bone": "card4-flip", "color": "ffffff00", "attachment": "front" },
{ "name": "back1", "bone": "card1-flip", "attachment": "back" },
{ "name": "back2", "bone": "card2-flip", "attachment": "back" },
{ "name": "back3", "bone": "card3-flip", "attachment": "back" },
{ "name": "back4", "bone": "card4-flip", "attachment": "back" }
],
"skins": [
{
"name": "default",
"attachments": {
"back1": {
"back": { "width": 423, "height": 423 }
},
"back2": {
"back": { "width": 423, "height": 423 }
},
"back3": {
"back": { "width": 423, "height": 423 }
},
"back4": {
"back": { "width": 423, "height": 423 }
},
"front1": {
"front": { "width": 423, "height": 423 }
},
"front2": {
"front": { "width": 423, "height": 423 }
},
"front3": {
"front": { "width": 423, "height": 423 }
},
"front4": {
"front": { "width": 423, "height": 423 }
}
}
}
],
"events": {
"card1-active": {},
"card2-active": {},
"card3-active": {},
"card4-active": {}
},
"animations": {
"appear": {
"slots": {
"back1": {
"color": [
{ "color": "ffffff00", "curve": 0.25, "c3": 0.75 },
{ "time": 0.1333, "color": "ffffffff" }
]
},
"back2": {
"color": [
{ "color": "ffffff00", "curve": "stepped" },
{ "time": 0.1667, "color": "ffffff00", "curve": 0.25, "c3": 0.75 },
{ "time": 0.3, "color": "ffffffff" }
]
},
"back3": {
"color": [
{ "color": "ffffff00", "curve": "stepped" },
{ "time": 0.2333, "color": "ffffff00", "curve": 0.25, "c3": 0.75 },
{ "time": 0.3667, "color": "ffffffff" }
]
},
"back4": {
"color": [
{ "color": "ffffff00", "curve": "stepped" },
{ "time": 0.4, "color": "ffffff00", "curve": 0.25, "c3": 0.75 },
{ "time": 0.5333, "color": "ffffffff" }
]
}
},
"bones": {
"card1": {
"translate": [
{ "y": -200.13, "curve": 0.25, "c3": 0.75 },
{ "time": 0.1667, "y": 77.24, "curve": 0.25, "c3": 0.75 },
{ "time": 0.2667, "y": -17.55, "curve": 0.25, "c3": 0.75 },
{ "time": 0.4 }
],
"scale": [
{ "x": 0.5, "y": 0.5, "curve": 0.25, "c3": 0.75 },
{ "time": 0.1, "x": 1.1, "y": 1.1, "curve": 0.25, "c3": 0.75 },
{ "time": 0.3 }
]
},
"card2": {
"translate": [
{ "y": -200.13, "curve": "stepped" },
{ "time": 0.1667, "y": -200.13, "curve": 0.25, "c3": 0.75 },
{ "time": 0.3333, "y": 77.24, "curve": 0.25, "c3": 0.75 },
{ "time": 0.4333, "y": -17.55, "curve": 0.25, "c3": 0.75 },
{ "time": 0.5667 }
],
"scale": [
{ "x": 0.5, "y": 0.5, "curve": "stepped" },
{ "time": 0.1667, "x": 0.5, "y": 0.5, "curve": 0.25, "c3": 0.75 },
{ "time": 0.2667, "x": 1.1, "y": 1.1, "curve": 0.25, "c3": 0.75 },
{ "time": 0.4667 }
]
},
"card3": {
"translate": [
{ "y": -200.13, "curve": "stepped" },
{ "time": 0.2333, "y": -200.13, "curve": 0.25, "c3": 0.75 },
{ "time": 0.4, "y": 77.24, "curve": 0.25, "c3": 0.75 },
{ "time": 0.5, "y": -17.55, "curve": 0.25, "c3": 0.75 },
{ "time": 0.6333 }
],
"scale": [
{ "x": 0.5, "y": 0.5, "curve": "stepped" },
{ "time": 0.2333, "x": 0.5, "y": 0.5, "curve": 0.25, "c3": 0.75 },
{ "time": 0.3333, "x": 1.1, "y": 1.1, "curve": 0.25, "c3": 0.75 },
{ "time": 0.5333 }
]
},
"card4": {
"translate": [
{ "y": -200.13, "curve": "stepped" },
{ "time": 0.4, "y": -200.13, "curve": 0.25, "c3": 0.75 },
{ "time": 0.5667, "y": 77.24, "curve": 0.25, "c3": 0.75 },
{ "time": 0.6667, "y": -17.55, "curve": 0.25, "c3": 0.75 },
{ "time": 0.8 }
],
"scale": [
{ "x": 0.5, "y": 0.5, "curve": "stepped" },
{ "time": 0.4, "x": 0.5, "y": 0.5, "curve": 0.25, "c3": 0.75 },
{ "time": 0.5, "x": 1.1, "y": 1.1, "curve": 0.25, "c3": 0.75 },
{ "time": 0.7 }
]
}
}
},
"card1-active": {
"slots": {
"back1": {
"color": [
{ "color": "ffffffff", "curve": "stepped" },
{ "time": 0.1333, "color": "ffffff00" }
]
},
"front1": {
"color": [
{ "color": "ffffff00", "curve": "stepped" },
{ "time": 0.1333, "color": "ffffffff" }
]
}
},
"bones": {
"card1": {
"scale": [
{ "curve": 0.25, "c3": 0.75 },
{ "time": 0.0667, "x": 0.9, "y": 0.9, "curve": 0.25, "c3": 0.75 },
{ "time": 0.1667, "x": 1.152, "y": 1.152, "curve": 0.25, "c3": 0.75 },
{ "time": 0.3 }
]
},
"card1-flip": {
"scale": [
{ "curve": 0.25, "c3": 0.75 },
{ "time": 0.1333, "x": 0, "curve": 0.25, "c3": 0.75 },
{ "time": 0.2667 }
]
}
},
"events": [
{ "time": 0.1, "name": "card1-active" }
]
},
"card2-active": {
"slots": {
"back2": {
"color": [
{ "color": "ffffffff", "curve": "stepped" },
{ "time": 0.1333, "color": "ffffff00" }
]
},
"front2": {
"color": [
{ "color": "ffffff00", "curve": "stepped" },
{ "time": 0.1333, "color": "ffffffff" }
]
}
},
"bones": {
"card2": {
"scale": [
{ "curve": 0.25, "c3": 0.75 },
{ "time": 0.0667, "x": 0.9, "y": 0.9, "curve": 0.25, "c3": 0.75 },
{ "time": 0.1667, "x": 1.152, "y": 1.152, "curve": 0.25, "c3": 0.75 },
{ "time": 0.3 }
]
},
"card2-flip": {
"scale": [
{ "curve": 0.25, "c3": 0.75 },
{ "time": 0.1333, "x": 0, "curve": 0.25, "c3": 0.75 },
{ "time": 0.2667 }
]
}
},
"events": [
{ "time": 0.1, "name": "card2-active" }
]
},
"card3-active": {
"slots": {
"back3": {
"color": [
{ "color": "ffffffff", "curve": "stepped" },
{ "time": 0.1333, "color": "ffffff00" }
]
},
"front3": {
"color": [
{ "color": "ffffff00", "curve": "stepped" },
{ "time": 0.1333, "color": "ffffffff" }
]
}
},
"bones": {
"card3": {
"scale": [
{ "curve": 0.25, "c3": 0.75 },
{ "time": 0.0667, "x": 0.9, "y": 0.9, "curve": 0.25, "c3": 0.75 },
{ "time": 0.1667, "x": 1.152, "y": 1.152, "curve": 0.25, "c3": 0.75 },
{ "time": 0.3 }
]
},
"card3-flip": {
"scale": [
{ "curve": 0.25, "c3": 0.75 },
{ "time": 0.1333, "x": 0, "curve": 0.25, "c3": 0.75 },
{ "time": 0.2667 }
]
}
},
"events": [
{ "time": 0.1, "name": "card3-active" }
]
},
"card4-active": {
"slots": {
"back4": {
"color": [
{ "color": "ffffffff", "curve": "stepped" },
{ "time": 0.1333, "color": "ffffff00" }
]
},
"front4": {
"color": [
{ "color": "ffffff00", "curve": "stepped" },
{ "time": 0.1333, "color": "ffffffff" }
]
}
},
"bones": {
"card4": {
"scale": [
{ "curve": 0.25, "c3": 0.75 },
{ "time": 0.0667, "x": 0.9, "y": 0.9, "curve": 0.25, "c3": 0.75 },
{ "time": 0.1667, "x": 1.152, "y": 1.152, "curve": 0.25, "c3": 0.75 },
{ "time": 0.3 }
]
},
"card4-flip": {
"scale": [
{ "curve": 0.25, "c3": 0.75 },
{ "time": 0.1333, "x": 0, "curve": 0.25, "c3": 0.75 },
{ "time": 0.2667 }
]
}
},
"events": [
{ "time": 0.0667, "name": "card4-active" }
]
},
"idle": {
"slots": {
"front4": {
"color": [
{ "time": 0.0667, "color": "ffffff00" }
]
}
}
}
}
}

View File

@ -0,0 +1,11 @@
{
"ver": "1.2.6",
"importer": "spine-data",
"imported": true,
"uuid": "aadf64c3-e6a0-4bf8-9805-b291ef07fa28",
"files": [
".json"
],
"subMetas": {},
"userData": {}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

View File

@ -0,0 +1,134 @@
{
"ver": "1.0.26",
"importer": "image",
"imported": true,
"uuid": "5c48abf1-a8de-4880-8fcf-1888513a9bfa",
"files": [
".json",
".png"
],
"subMetas": {
"6c48a": {
"importer": "texture",
"uuid": "5c48abf1-a8de-4880-8fcf-1888513a9bfa@6c48a",
"displayName": "random-flip-card",
"id": "6c48a",
"name": "texture",
"userData": {
"wrapModeS": "clamp-to-edge",
"wrapModeT": "clamp-to-edge",
"imageUuidOrDatabaseUri": "5c48abf1-a8de-4880-8fcf-1888513a9bfa",
"isUuid": true,
"visible": false,
"minfilter": "linear",
"magfilter": "linear",
"mipfilter": "none",
"anisotropy": 0
},
"ver": "1.0.22",
"imported": true,
"files": [
".json"
],
"subMetas": {}
},
"f9941": {
"importer": "sprite-frame",
"uuid": "5c48abf1-a8de-4880-8fcf-1888513a9bfa@f9941",
"displayName": "random-flip-card",
"id": "f9941",
"name": "spriteFrame",
"userData": {
"trimType": "auto",
"trimThreshold": 1,
"rotated": false,
"offsetX": -83,
"offsetY": 40.5,
"trimX": 4,
"trimY": 4,
"width": 850,
"height": 423,
"rawWidth": 1024,
"rawHeight": 512,
"borderTop": 0,
"borderBottom": 0,
"borderLeft": 0,
"borderRight": 0,
"packable": true,
"pixelsToUnit": 100,
"pivotX": 0.5,
"pivotY": 0.5,
"meshType": 0,
"vertices": {
"rawPosition": [
-425,
-211.5,
0,
425,
-211.5,
0,
-425,
211.5,
0,
425,
211.5,
0
],
"indexes": [
0,
1,
2,
2,
1,
3
],
"uv": [
4,
508,
854,
508,
4,
85,
854,
85
],
"nuv": [
0.00390625,
0.166015625,
0.833984375,
0.166015625,
0.00390625,
0.9921875,
0.833984375,
0.9921875
],
"minPos": [
-425,
-211.5,
0
],
"maxPos": [
425,
211.5,
0
]
},
"isUuid": true,
"imageUuidOrDatabaseUri": "5c48abf1-a8de-4880-8fcf-1888513a9bfa@6c48a",
"atlasUuid": ""
},
"ver": "1.0.12",
"imported": true,
"files": [
".json"
],
"subMetas": {}
}
},
"userData": {
"type": "sprite-frame",
"hasAlpha": true,
"fixAlphaTransparencyArtifacts": false,
"redirect": "5c48abf1-a8de-4880-8fcf-1888513a9bfa@f9941"
}
}

View File

@ -0,0 +1,9 @@
{
"ver": "1.2.0",
"importer": "directory",
"imported": true,
"uuid": "6f264072-3786-460d-92e2-e18724282b5c",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@ -0,0 +1,83 @@
lucky chain.png
size: 1024,512
format: RGBA8888
filter: Linear,Linear
repeat: none
card1
rotate: true
xy: 735, 149
size: 135, 148
orig: 135, 148
offset: 0, 0
index: -1
card2
rotate: true
xy: 735, 10
size: 135, 148
orig: 135, 148
offset: 0, 0
index: -1
card3
rotate: true
xy: 735, 10
size: 135, 148
orig: 135, 148
offset: 0, 0
index: -1
card4
rotate: true
xy: 735, 10
size: 135, 148
orig: 135, 148
offset: 0, 0
index: -1
card5
rotate: true
xy: 735, 10
size: 135, 148
orig: 135, 148
offset: 0, 0
index: -1
frame
rotate: false
xy: 4, 4
size: 376, 468
orig: 376, 469
offset: 0, 0
index: -1
frame-planet1
rotate: false
xy: 735, 288
size: 186, 184
orig: 186, 184
offset: 0, 0
index: -1
frame-planet2
rotate: false
xy: 887, 167
size: 122, 117
orig: 122, 117
offset: 0, 0
index: -1
frame-planet3
rotate: false
xy: 887, 51
size: 114, 112
orig: 114, 112
offset: 0, 0
index: -1
galaxy-screen
rotate: false
xy: 384, 45
size: 347, 427
orig: 347, 427
offset: 0, 0
index: -1
txt
rotate: false
xy: 384, 6
size: 278, 35
orig: 278, 35
offset: 0, 0
index: -1

View File

@ -0,0 +1,11 @@
{
"ver": "1.0.2",
"importer": "text",
"imported": true,
"uuid": "e9ef255e-5772-4622-a331-65a911bdbc54",
"files": [
".json"
],
"subMetas": {},
"userData": {}
}

View File

@ -0,0 +1,358 @@
{
"skeleton": {
"hash": "o1owOunyFbd2Jp2OiNn7dNvQ1js",
"spine": "3.8.99",
"x": -631,
"y": -680,
"width": 1252,
"height": 1960,
"images": "",
"audio": "D:/Huy 2D Animation/works/2024/Product/Galaxy Seeker/Reward Animation/lucky chain"
},
"bones": [
{ "name": "root" },
{ "name": "pivot", "parent": "root" },
{ "name": "frame-pivot", "parent": "pivot" },
{ "name": "cards-pivot", "parent": "frame-pivot" },
{ "name": "card1", "parent": "cards-pivot", "x": -259.5, "y": 297.5 },
{ "name": "card2", "parent": "cards-pivot", "x": 267.5, "y": 297.5 },
{ "name": "card3", "parent": "cards-pivot", "x": 267.5, "y": -278.5 },
{ "name": "card4", "parent": "cards-pivot", "x": -259.5, "y": -278.5 },
{ "name": "frame-planet1", "parent": "frame-pivot", "length": 364.06, "rotation": 90, "y": 786.09 },
{ "name": "frame-planet2", "parent": "frame-pivot", "length": 169.63, "rotation": 120.23, "x": -311.5, "y": 867.5 },
{ "name": "frame-planet3", "parent": "frame-pivot", "length": 211.86, "rotation": 45.75, "x": 260.15, "y": 919.93 },
{ "name": "card5", "parent": "cards-pivot", "x": -259.5, "y": -278.5 },
{ "name": "txt", "parent": "frame-pivot", "x": 8, "y": 700 }
],
"slots": [
{ "name": "galaxy-screen", "bone": "frame-pivot", "attachment": "galaxy-screen" },
{ "name": "frame-planet3", "bone": "frame-planet3", "attachment": "frame-planet3" },
{ "name": "frame-planet2", "bone": "frame-planet2", "attachment": "frame-planet2" },
{ "name": "frame-planet1", "bone": "frame-planet1", "attachment": "frame-planet1" },
{ "name": "frame", "bone": "frame-pivot", "attachment": "frame" },
{ "name": "txt", "bone": "txt", "attachment": "txt" },
{ "name": "card5", "bone": "card5", "color": "ffffff00", "attachment": "card5" },
{ "name": "card4", "bone": "card4", "attachment": "card4" },
{ "name": "card3", "bone": "card3", "attachment": "card3" },
{ "name": "card2", "bone": "card2", "attachment": "card2" },
{ "name": "card1", "bone": "card1", "attachment": "card1" },
{ "name": "card2-orange", "bone": "card2", "color": "ffffff00", "attachment": "card1" },
{ "name": "card1-glow", "bone": "card1", "color": "ffffff00", "attachment": "card1", "blend": "additive" }
],
"skins": [
{
"name": "default",
"attachments": {
"card1": {
"card1": { "width": 451, "height": 493 }
},
"card1-glow": {
"card1": { "width": 451, "height": 493 }
},
"card2": {
"card2": { "width": 451, "height": 493 }
},
"card2-orange": {
"card1": { "width": 451, "height": 493 }
},
"card3": {
"card3": { "width": 451, "height": 493 }
},
"card4": {
"card4": { "width": 451, "height": 493 }
},
"card5": {
"card5": { "width": 451, "height": 493 }
},
"frame": {
"frame": { "x": -5, "y": 101, "width": 1252, "height": 1562 }
},
"frame-planet1": {
"frame-planet1": { "x": 187.41, "y": 18.5, "rotation": -90, "width": 621, "height": 613 }
},
"frame-planet2": {
"frame-planet2": { "rotation": -120.23, "width": 405, "height": 391 }
},
"frame-planet3": {
"frame-planet3": { "x": 24.62, "y": 21.4, "rotation": -45.75, "width": 380, "height": 373 }
},
"galaxy-screen": {
"galaxy-screen": { "x": -3, "y": 61, "width": 1156, "height": 1424 }
},
"txt": {
"txt": { "x": -31, "y": 10.5, "width": 926, "height": 115 }
}
}
}
],
"events": {
"card-claimed": {},
"new-card-spawned": {}
},
"animations": {
"active": {
"slots": {
"card1": {
"color": [
{ "time": 0.2, "color": "ffffffff", "curve": 0.25, "c3": 0.75 },
{ "time": 0.4, "color": "ffffff00" }
]
},
"card1-glow": {
"color": [
{ "color": "ffffff00", "curve": 0.25, "c3": 0.75 },
{ "time": 0.0667, "color": "ffffffff", "curve": "stepped" },
{ "time": 0.2, "color": "ffffffff", "curve": 0.25, "c3": 0.75 },
{ "time": 0.4, "color": "ffffff00" }
]
},
"card2": {
"color": [
{ "color": "dadadaff", "curve": "stepped" },
{ "time": 0.4, "color": "dadadaff", "curve": 0.25, "c3": 0.75 },
{ "time": 0.7, "color": "ffffffff" }
]
},
"card2-orange": {
"color": [
{ "time": 0.7, "color": "ffffff00", "curve": 0.25, "c3": 0.75 },
{ "time": 0.9, "color": "ffffffff" }
]
},
"card3": {
"color": [
{ "color": "989898ff", "curve": "stepped" },
{ "time": 0.6, "color": "989898ff", "curve": 0.25, "c3": 0.75 },
{ "time": 0.7667, "color": "dadadaff" }
]
},
"card4": {
"color": [
{ "color": "797979ff", "curve": "stepped" },
{ "time": 0.6, "color": "797979ff", "curve": 0.25, "c3": 0.75 },
{ "time": 0.7667, "color": "808080ff" }
]
},
"card5": {
"color": [
{ "color": "79797900", "curve": "stepped" },
{ "time": 0.7, "color": "79797900", "curve": 0.25, "c3": 0.75 },
{ "time": 0.8, "color": "797979ff" }
]
}
},
"bones": {
"card1": {
"scale": [
{ "curve": 0.25, "c3": 0.75 },
{ "time": 0.1333, "x": 0.9, "y": 0.95, "curve": 0.25, "c3": 0.75 },
{ "time": 0.4, "x": 1.2, "y": 1.2 }
]
},
"card2": {
"translate": [
{ "time": 0.4, "curve": 0.25, "c3": 0.75 },
{ "time": 0.5, "x": 12.5, "curve": 0.25, "c3": 0.75 },
{ "time": 0.7, "x": -567.5, "curve": 0.25, "c3": 0.75 },
{ "time": 0.9, "x": -527 }
]
},
"card3": {
"translate": [
{ "time": 0.6, "curve": 0, "c2": 0.79, "c3": 0.75 },
{ "time": 0.7667, "y": 576 }
]
},
"card4": {
"translate": [
{ "time": 0.6, "curve": 0.25, "c3": 0.75 },
{ "time": 0.7667, "x": 527 }
]
},
"card5": {
"scale": [
{ "x": 0.9, "y": 0.9, "curve": "stepped" },
{ "time": 0.7, "x": 0.9, "y": 0.9, "curve": 0.25, "c3": 0.75 },
{ "time": 0.9, "x": 1.1, "y": 1.1, "curve": 0.25, "c3": 0.75 },
{ "time": 1.1 }
]
}
},
"events": [
{ "time": 0.4, "name": "card-claimed" },
{ "time": 0.8, "name": "new-card-spawned" }
]
},
"appear": {
"slots": {
"card1": {
"color": [
{ "color": "ffffff00", "curve": "stepped" },
{ "time": 0.5, "color": "ffffff00", "curve": 0.25, "c3": 0.75 },
{ "time": 0.6333, "color": "ffffffff" }
]
},
"card2": {
"color": [
{ "color": "dadada00", "curve": "stepped" },
{ "time": 0.6, "color": "dadada00", "curve": 0.25, "c3": 0.75 },
{ "time": 0.7333, "color": "dadadaff" }
]
},
"card3": {
"color": [
{ "color": "98989800", "curve": "stepped" },
{ "time": 0.7333, "color": "98989800", "curve": 0.25, "c3": 0.75 },
{ "time": 0.8667, "color": "989898ff" }
]
},
"card4": {
"color": [
{ "color": "79797900", "curve": "stepped" },
{ "time": 0.9, "color": "79797900", "curve": 0.25, "c3": 0.75 },
{ "time": 1.0333, "color": "797979ff" }
]
},
"frame": {
"color": [
{ "color": "ffffff00", "curve": 0.25, "c3": 0.75 },
{ "time": 0.2, "color": "ffffffff" }
]
},
"frame-planet1": {
"color": [
{ "color": "ffffff00", "curve": "stepped" },
{ "time": 0.6, "color": "ffffff00", "curve": 0.25, "c3": 0.75 },
{ "time": 0.8, "color": "ffffffff" }
]
},
"frame-planet2": {
"color": [
{ "color": "ffffff00", "curve": "stepped" },
{ "time": 0.6667, "color": "ffffff00", "curve": 0.25, "c3": 0.75 },
{ "time": 0.8667, "color": "ffffffff" }
]
},
"frame-planet3": {
"color": [
{ "color": "ffffff00", "curve": "stepped" },
{ "time": 0.7333, "color": "ffffff00", "curve": 0.25, "c3": 0.75 },
{ "time": 0.9333, "color": "ffffffff" }
]
},
"galaxy-screen": {
"color": [
{ "color": "ffffff00", "curve": "stepped" },
{ "time": 0.1, "color": "ffffff00", "curve": 0.25, "c3": 0.75 },
{ "time": 0.4, "color": "ffffffff" }
]
},
"txt": {
"color": [
{ "color": "ffffff00", "curve": "stepped" },
{ "time": 0.8, "color": "ffffff00", "curve": 0.25, "c3": 0.75 },
{ "time": 1, "color": "ffffffff" }
]
}
},
"bones": {
"frame-planet3": {
"translate": [
{ "x": -91.68, "y": -94.13, "curve": "stepped" },
{ "time": 0.7333, "x": -91.68, "y": -94.13, "curve": 0.25, "c3": 0.75 },
{ "time": 0.9333, "x": 22, "y": 22.59, "curve": 0.25, "c3": 0.75 },
{ "time": 1.1333 }
]
},
"frame-planet2": {
"translate": [
{ "x": 66.15, "y": -113.54, "curve": "stepped" },
{ "time": 0.6667, "x": 66.15, "y": -113.54, "curve": 0.25, "c3": 0.75 },
{ "time": 0.8667, "x": -15.88, "y": 27.25, "curve": 0.25, "c3": 0.75 },
{ "time": 1.0667 }
]
},
"frame-planet1": {
"translate": [
{ "y": -131.4, "curve": "stepped" },
{ "time": 0.6, "y": -131.4, "curve": 0.25, "c3": 0.75 },
{ "time": 0.8, "y": 31.54, "curve": 0.25, "c3": 0.75 },
{ "time": 1 }
]
},
"card4": {
"scale": [
{ "x": 0.8, "y": 0.8, "curve": "stepped" },
{ "time": 0.9, "x": 0.8, "y": 0.8, "curve": 0.25, "c3": 0.75 },
{ "time": 1.0333, "x": 1.1, "y": 1.1, "curve": 0.25, "c3": 0.75 },
{ "time": 1.4 }
]
},
"card3": {
"scale": [
{ "x": 0.8, "y": 0.8, "curve": "stepped" },
{ "time": 0.7333, "x": 0.8, "y": 0.8, "curve": 0.25, "c3": 0.75 },
{ "time": 0.8667, "x": 1.1, "y": 1.1, "curve": 0.25, "c3": 0.75 },
{ "time": 1.2333 }
]
},
"card2": {
"scale": [
{ "x": 0.8, "y": 0.8, "curve": "stepped" },
{ "time": 0.6, "x": 0.8, "y": 0.8, "curve": 0.25, "c3": 0.75 },
{ "time": 0.7333, "x": 1.1, "y": 1.1, "curve": 0.25, "c3": 0.75 },
{ "time": 1.1 }
]
},
"card1": {
"scale": [
{ "x": 0.8, "y": 0.8, "curve": "stepped" },
{ "time": 0.5, "x": 0.8, "y": 0.8, "curve": 0.25, "c3": 0.75 },
{ "time": 0.6333, "x": 1.1, "y": 1.1, "curve": 0.25, "c3": 0.75 },
{ "time": 0.8, "x": 0.95, "y": 0.95, "curve": 0.25, "c3": 0.75 },
{ "time": 1 }
]
},
"txt": {
"translate": [
{ "y": 20, "curve": "stepped" },
{ "time": 0.8, "y": 20, "curve": 0, "c2": 0.51, "c3": 0.75 },
{ "time": 1.1, "y": -20, "curve": 0.25, "c3": 0.75 },
{ "time": 1.4 }
]
},
"frame-pivot": {
"translate": [
{ "y": -100, "curve": 0.25, "c3": 0.75 },
{ "time": 0.2, "y": 50, "curve": 0.25, "c3": 0.75 },
{ "time": 0.4 }
],
"scale": [
{ "x": 0.8, "y": 0.8, "curve": 0.25, "c3": 0.75 },
{ "time": 0.2, "x": 1.1, "y": 1.1, "curve": 0.25, "c3": 0.75 },
{ "time": 0.4 }
]
}
}
},
"idle": {
"slots": {
"card2": {
"color": [
{ "color": "dadadaff" }
]
},
"card3": {
"color": [
{ "color": "989898ff" }
]
},
"card4": {
"color": [
{ "color": "7a7a7aff" }
]
}
}
}
}
}

View File

@ -0,0 +1,11 @@
{
"ver": "1.2.6",
"importer": "spine-data",
"imported": true,
"uuid": "2a73a1e0-9f9d-4cdd-b711-394a90fec7a8",
"files": [
".json"
],
"subMetas": {},
"userData": {}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 318 KiB

View File

@ -0,0 +1,134 @@
{
"ver": "1.0.26",
"importer": "image",
"imported": true,
"uuid": "add5af79-0201-4355-be84-161977c7cabf",
"files": [
".json",
".png"
],
"subMetas": {
"6c48a": {
"importer": "texture",
"uuid": "add5af79-0201-4355-be84-161977c7cabf@6c48a",
"displayName": "lucky chain",
"id": "6c48a",
"name": "texture",
"userData": {
"wrapModeS": "clamp-to-edge",
"wrapModeT": "clamp-to-edge",
"imageUuidOrDatabaseUri": "add5af79-0201-4355-be84-161977c7cabf",
"isUuid": true,
"visible": false,
"minfilter": "linear",
"magfilter": "linear",
"mipfilter": "none",
"anisotropy": 0
},
"ver": "1.0.22",
"imported": true,
"files": [
".json"
],
"subMetas": {}
},
"f9941": {
"importer": "sprite-frame",
"uuid": "add5af79-0201-4355-be84-161977c7cabf@f9941",
"displayName": "lucky chain",
"id": "f9941",
"name": "spriteFrame",
"userData": {
"trimType": "auto",
"trimThreshold": 1,
"rotated": false,
"offsetX": -5.5,
"offsetY": 18,
"trimX": 4,
"trimY": 4,
"width": 1005,
"height": 468,
"rawWidth": 1024,
"rawHeight": 512,
"borderTop": 0,
"borderBottom": 0,
"borderLeft": 0,
"borderRight": 0,
"packable": true,
"pixelsToUnit": 100,
"pivotX": 0.5,
"pivotY": 0.5,
"meshType": 0,
"vertices": {
"rawPosition": [
-502.5,
-234,
0,
502.5,
-234,
0,
-502.5,
234,
0,
502.5,
234,
0
],
"indexes": [
0,
1,
2,
2,
1,
3
],
"uv": [
4,
508,
1009,
508,
4,
40,
1009,
40
],
"nuv": [
0.00390625,
0.078125,
0.9853515625,
0.078125,
0.00390625,
0.9921875,
0.9853515625,
0.9921875
],
"minPos": [
-502.5,
-234,
0
],
"maxPos": [
502.5,
234,
0
]
},
"isUuid": true,
"imageUuidOrDatabaseUri": "add5af79-0201-4355-be84-161977c7cabf@6c48a",
"atlasUuid": ""
},
"ver": "1.0.12",
"imported": true,
"files": [
".json"
],
"subMetas": {}
}
},
"userData": {
"type": "sprite-frame",
"hasAlpha": true,
"fixAlphaTransparencyArtifacts": false,
"redirect": "add5af79-0201-4355-be84-161977c7cabf@f9941"
}
}

View File

@ -0,0 +1,9 @@
{
"ver": "1.2.0",
"importer": "directory",
"imported": true,
"uuid": "82330651-9fc7-4280-a25c-80413cc57522",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@ -0,0 +1,34 @@
lucky-chest.png
size: 1024,256
format: RGBA8888
filter: Linear,Linear
repeat: none
chest-lid
rotate: false
xy: 4, 4
size: 314, 217
orig: 318, 221
offset: 2, 3
index: -1
chest-lid2
rotate: false
xy: 619, 74
size: 270, 147
orig: 270, 149
offset: 0, 0
index: -1
glitter-vfx
rotate: false
xy: 619, 27
size: 46, 43
orig: 64, 64
offset: 9, 11
index: -1
lower-chest
rotate: false
xy: 322, 9
size: 293, 212
orig: 295, 212
offset: 2, 0
index: -1

View File

@ -0,0 +1,11 @@
{
"ver": "1.0.2",
"importer": "text",
"imported": true,
"uuid": "9ac5e8c6-d012-424f-ab22-590dafd96f4f",
"files": [
".json"
],
"subMetas": {},
"userData": {}
}

View File

@ -0,0 +1,235 @@
{
"skeleton": {
"hash": "/K19jcKuNHKoLrYG8MhOXbnbIBE",
"spine": "3.8.99",
"x": -596.69,
"y": -520.93,
"width": 1280,
"height": 1280,
"images": "",
"audio": "D:/Huy 2D Animation/works/2024/Product/Galaxy Seeker/Reward Animation/lucky-chest"
},
"bones": [
{ "name": "root" },
{ "name": "pivot", "parent": "root" },
{ "name": "lower-chest", "parent": "pivot", "length": 165.62, "rotation": 90, "x": 25, "y": -60 },
{ "name": "chest-lid", "parent": "lower-chest", "length": 155.21, "x": 180, "y": 35 },
{ "name": "chest-lid2", "parent": "lower-chest", "length": 425.29, "rotation": -79.62, "x": 284.38, "y": 326.62 },
{ "name": "chest-lid3", "parent": "chest-lid2", "length": 177.55, "rotation": 85.02, "x": 79.17, "y": 23.44 },
{ "name": "glitter-vfx", "parent": "pivot", "x": 25, "y": 140 }
],
"slots": [
{ "name": "lower-chest", "bone": "lower-chest", "attachment": "lower-chest" },
{ "name": "chest-lid", "bone": "chest-lid", "attachment": "chest-lid" },
{ "name": "chest-lid2", "bone": "chest-lid2", "color": "ffffff00", "attachment": "chest-lid2" },
{ "name": "glitter-vfx", "bone": "glitter-vfx", "color": "ffffff00", "attachment": "glitter-vfx", "blend": "additive" }
],
"skins": [
{
"name": "default",
"attachments": {
"chest-lid": {
"chest-lid": { "x": 76.5, "y": 13.5, "rotation": -90, "width": 635, "height": 441 }
},
"chest-lid2": {
"chest-lid2": {
"type": "mesh",
"uvs": [ 0.95375, 0.23206, 1, 0.52982, 1, 0.57456, 0.77212, 1, 0.69633, 1, 0.56734, 0.80867, 0.53351, 0.80013, 0.06079, 0.96486, 0.04029, 0.87795, 0, 0.70712, 0, 0.62556, 0.00698, 0.42219, 0.10158, 0.19664, 0.33872, 0.08632, 0.42451, 0.16327, 0.82256, 0.01507, 0.0994, 0.84876, 0.2266, 0.80342, 0.44554, 0.7184, 0.63529, 0.66739, 0.89424, 0.56915 ],
"triangles": [ 3, 20, 2, 20, 3, 19, 5, 19, 4, 3, 4, 19, 6, 17, 18, 6, 7, 17, 7, 16, 17, 7, 8, 16, 8, 9, 16, 17, 16, 10, 5, 6, 19, 17, 10, 11, 11, 12, 17, 17, 14, 18, 17, 13, 14, 17, 12, 13, 6, 18, 19, 18, 14, 19, 10, 16, 9, 19, 15, 20, 19, 14, 15, 20, 1, 2, 20, 0, 1, 20, 15, 0 ],
"vertices": [ 2, 4, 495.4, 120.21, 0.99494, 5, 132.54, -406.26, 0.00506, 1, 4, 503.98, 28.43, 1, 1, 4, 501.58, 15.31, 1, 1, 4, 357.7, -87.23, 1, 1, 4, 317.45, -79.86, 1, 1, 4, 259.2, -11.23, 1, 1, 4, 241.69, -5.44, 1, 2, 4, -18.24, -7.75, 0.99759, 5, -39.53, 94.34, 0.00241, 2, 4, -24.47, 19.72, 0.88135, 5, -12.71, 102.92, 0.11865, 2, 4, -36.7, 73.71, 0.4648, 5, 40.02, 119.79, 0.5352, 2, 4, -32.32, 97.62, 0.32542, 5, 64.22, 117.51, 0.67458, 2, 4, -17.7, 156.55, 0.08952, 5, 124.2, 108.06, 0.91048, 2, 4, 44.65, 213.47, 0.0015, 5, 186.31, 50.88, 0.9985, 2, 4, 176.54, 222.74, 0.16621, 5, 207, -79.7, 0.83379, 2, 4, 217.98, 191.84, 0.40708, 5, 179.81, -123.66, 0.59292, 2, 4, 437.36, 196.57, 0.97028, 5, 203.57, -341.81, 0.02972, 2, 4, 8.49, 22.52, 0.85311, 5, -7.05, 70.33, 0.14689, 2, 4, 78.49, 23.44, 0.00376, 5, -0.05, 0.67, 0.99624, 2, 4, 199.35, 27.07, 0.93561, 5, 14.05, -119.41, 0.06439, 2, 4, 302.88, 23.57, 0.98865, 5, 19.55, -222.86, 0.01135, 2, 4, 445.69, 27.18, 0.99966, 5, 35.55, -364.82, 3.4E-4 ],
"hull": 16,
"edges": [ 0, 30, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 14, 16, 16, 18, 16, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 2 ],
"width": 540,
"height": 298
}
},
"glitter-vfx": {
"glitter-vfx": { "x": 18.31, "y": -20.93, "scaleX": 10, "scaleY": 10, "width": 128, "height": 128 }
},
"lower-chest": {
"lower-chest": { "x": 132, "y": 59.5, "rotation": -90, "width": 589, "height": 424 }
}
}
}
],
"animations": {
"appear": {
"slots": {
"chest-lid": {
"color": [
{ "color": "ffffff00", "curve": 0.25, "c3": 0.75 },
{ "time": 0.1333, "color": "ffffffff" }
]
},
"lower-chest": {
"color": [
{ "color": "ffffff00", "curve": 0.25, "c3": 0.75 },
{ "time": 0.1333, "color": "ffffffff" }
]
}
},
"bones": {
"pivot": {
"scale": [
{ "x": 0.7, "y": 0.7, "curve": 0.25, "c3": 0.75 },
{ "time": 0.2667, "x": 1.1, "y": 1.1, "curve": 0.25, "c3": 0.75 },
{ "time": 0.5 }
]
}
}
},
"idle": {
"bones": {
"pivot": {
"scale": [
{ "curve": 0.25, "c3": 0.75 },
{ "time": 0.4, "x": 1.02, "y": 1.02, "curve": 0.25, "c3": 0.75 },
{ "time": 0.8 }
]
},
"chest-lid": {
"translate": [
{ "curve": 0.25, "c3": 0.75 },
{ "time": 0.2667, "x": 4.89, "curve": 0.25, "c3": 0.75 },
{ "time": 0.5333, "x": -7.33, "curve": 0.25, "c3": 0.75 },
{ "time": 0.8 }
]
}
}
},
"open": {
"slots": {
"chest-lid": {
"color": [
{ "time": 0.6667, "color": "ffffffff", "curve": "stepped" },
{ "time": 0.7333, "color": "ffffff00" }
]
},
"chest-lid2": {
"color": [
{ "color": "ffffff00", "curve": "stepped" },
{ "time": 0.6667, "color": "ffffff00", "curve": "stepped" },
{ "time": 0.7333, "color": "ffffffff" }
]
},
"glitter-vfx": {
"color": [
{ "time": 0.7, "color": "ffffff00", "curve": 0.25, "c3": 0.75 },
{ "time": 0.7667, "color": "ffffffff", "curve": "stepped" },
{ "time": 0.9, "color": "ffffffff", "curve": 0.25, "c3": 0.75 },
{ "time": 1.3, "color": "ffffff00" }
]
}
},
"bones": {
"pivot": {
"rotate": [
{ "time": 0.7, "curve": 0.25, "c3": 0.75 },
{ "time": 0.8333, "angle": 2.85, "curve": 0.25, "c3": 0.75 },
{ "time": 0.9667, "angle": -1.62, "curve": 0.25, "c3": 0.75 },
{ "time": 1.1, "angle": 1.81, "curve": 0.25, "c3": 0.75 },
{ "time": 1.2667 }
],
"translate": [
{ "time": 0.7, "curve": 0.25, "c3": 0.75 },
{ "time": 0.7667, "y": 46.56, "curve": 0.25, "c3": 0.75 },
{ "time": 0.8333, "curve": 0.25, "c3": 0.75 },
{ "time": 0.9667, "y": 6.65, "curve": 0.25, "c3": 0.75 },
{ "time": 1.0667, "curve": 0.25, "c3": 0.75 },
{ "time": 1.1667, "y": 2.22, "curve": 0.25, "c3": 0.75 },
{ "time": 1.3 }
],
"scale": [
{ "curve": 0.25, "c3": 0.75 },
{ "time": 0.7, "x": 0.9, "y": 0.9, "curve": 0.25, "c3": 0.75 },
{ "time": 0.8, "x": 1.1, "y": 1.1, "curve": 0.25, "c3": 0.75 },
{ "time": 1 }
]
},
"lower-chest": {
"translate": [
{ "curve": 0.25, "c3": 0.75 },
{ "time": 0.1, "x": -2.42, "curve": 0.25, "c3": 0.75 },
{ "time": 0.2, "x": 12.33, "y": -7.37, "curve": 0.25, "c3": 0.75 },
{ "time": 0.3, "x": 4.81, "y": 0.14, "curve": 0.25, "c3": 0.75 },
{ "time": 0.4, "x": 8.82, "y": 2.81, "curve": 0.25, "c3": 0.75 },
{ "time": 0.5, "x": 3.37, "y": 1.45, "curve": 0.25, "c3": 0.75 },
{ "time": 0.6, "x": 7.52, "y": -4.08, "curve": 0.25, "c3": 0.75 },
{ "time": 0.7, "x": 10.31, "y": 1.49, "curve": 0.25, "c3": 0.75 },
{ "time": 0.8 }
]
},
"chest-lid": {
"translate": [
{ "curve": 0.25, "c3": 0.75 },
{ "time": 0.1, "x": -5.48, "y": -7.31, "curve": 0.25, "c3": 0.75 },
{ "time": 0.2, "x": -9.2, "y": 3.82, "curve": 0.25, "c3": 0.75 },
{ "time": 0.2667, "x": -3.56, "y": 13.21, "curve": 0.25, "c3": 0.75 },
{ "time": 0.3333, "x": -5.46, "y": 3.7, "curve": 0.25, "c3": 0.75 },
{ "time": 0.4, "x": -11.25, "y": -2.09, "curve": 0.25, "c3": 0.75 },
{ "time": 0.4667, "x": -9.3, "y": 3.77, "curve": 0.25, "c3": 0.75 },
{ "time": 0.5333, "x": -3.36, "y": -2.16, "curve": 0.25, "c3": 0.75 },
{ "time": 0.6, "x": -9.36, "y": 1.84, "curve": 0.25, "c3": 0.75 },
{ "time": 0.6667, "x": -31.49, "y": 5.86, "curve": 0.25, "c3": 0.75 },
{ "time": 0.8 }
]
},
"chest-lid2": {
"rotate": [
{ "time": 0.6667, "curve": 0.25, "c3": 0.75 },
{ "time": 0.8, "angle": 4.28, "curve": 0.25, "c3": 0.75 },
{ "time": 0.9333, "angle": -7.73, "curve": 0.25, "c3": 0.75 },
{ "time": 1.1 }
],
"translate": [
{ "time": 0.6667, "curve": 0.25, "c3": 0.75 },
{ "time": 0.8333, "x": -3.91, "y": 3.78, "curve": 0.25, "c3": 0.75 },
{ "time": 0.9667, "x": 4.44, "y": 14.77, "curve": 0.25, "c3": 0.75 },
{ "time": 1.1333 }
],
"scale": [
{ "time": 0.6667, "curve": 0.25, "c3": 0.75 },
{ "time": 0.7667, "x": 0.984, "y": 1.127, "curve": 0.25, "c3": 0.75 },
{ "time": 1 }
],
"shear": [
{ "time": 0.6667, "curve": 0.25, "c3": 0.75 },
{ "time": 0.8, "x": -2.21, "y": 4.37, "curve": 0.25, "c3": 0.75 },
{ "time": 0.9333, "x": 2.3, "y": 2.71, "curve": 0.25, "c3": 0.75 },
{ "time": 1.1 }
]
},
"chest-lid3": {
"scale": [
{ "time": 0.7, "curve": 0.25, "c3": 0.75 },
{ "time": 0.7667, "x": 0.817, "y": 0.721, "curve": 0.25, "c3": 0.75 },
{ "time": 1 }
],
"shear": [
{ "time": 0.7, "curve": 0.25, "c3": 0.75 },
{ "time": 0.8, "x": 7.69, "y": -14.24, "curve": 0.25, "c3": 0.75 },
{ "time": 0.9333, "x": -6.27, "y": 5.08, "curve": 0.25, "c3": 0.75 },
{ "time": 1.1 }
]
},
"glitter-vfx": {
"rotate": [
{ "time": 0.6333, "curve": 0.25, "c3": 0.75 },
{ "time": 1.4, "angle": -67.1, "curve": "stepped" },
{ "time": 1.5, "angle": -67.1, "curve": 0.25, "c3": 0.75 },
{ "time": 1.6333, "curve": "stepped" },
{ "time": 2 }
],
"translate": [
{ "x": 22.9, "y": 24.3 }
],
"scale": [
{ "x": 0.5, "y": 0.5, "curve": "stepped" },
{ "time": 0.7, "x": 0.5, "y": 0.5, "curve": 0, "c2": 0.89, "c3": 0.75 },
{ "time": 1.3, "x": 1.757, "y": 1.757 }
]
}
}
}
}
}

View File

@ -0,0 +1,11 @@
{
"ver": "1.2.6",
"importer": "spine-data",
"imported": true,
"uuid": "75cc4005-0956-4ded-8966-c8e347fc48d5",
"files": [
".json"
],
"subMetas": {},
"userData": {}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 240 KiB

View File

@ -0,0 +1,134 @@
{
"ver": "1.0.26",
"importer": "image",
"imported": true,
"uuid": "c2c33a8f-af06-4fc8-b718-548b2187eae9",
"files": [
".json",
".png"
],
"subMetas": {
"6c48a": {
"importer": "texture",
"uuid": "c2c33a8f-af06-4fc8-b718-548b2187eae9@6c48a",
"displayName": "lucky-chest",
"id": "6c48a",
"name": "texture",
"userData": {
"wrapModeS": "clamp-to-edge",
"wrapModeT": "clamp-to-edge",
"imageUuidOrDatabaseUri": "c2c33a8f-af06-4fc8-b718-548b2187eae9",
"isUuid": true,
"visible": false,
"minfilter": "linear",
"magfilter": "linear",
"mipfilter": "none",
"anisotropy": 0
},
"ver": "1.0.22",
"imported": true,
"files": [
".json"
],
"subMetas": {}
},
"f9941": {
"importer": "sprite-frame",
"uuid": "c2c33a8f-af06-4fc8-b718-548b2187eae9@f9941",
"displayName": "lucky-chest",
"id": "f9941",
"name": "spriteFrame",
"userData": {
"trimType": "auto",
"trimThreshold": 1,
"rotated": false,
"offsetX": -65.5,
"offsetY": 15.5,
"trimX": 4,
"trimY": 4,
"width": 885,
"height": 217,
"rawWidth": 1024,
"rawHeight": 256,
"borderTop": 0,
"borderBottom": 0,
"borderLeft": 0,
"borderRight": 0,
"packable": true,
"pixelsToUnit": 100,
"pivotX": 0.5,
"pivotY": 0.5,
"meshType": 0,
"vertices": {
"rawPosition": [
-442.5,
-108.5,
0,
442.5,
-108.5,
0,
-442.5,
108.5,
0,
442.5,
108.5,
0
],
"indexes": [
0,
1,
2,
2,
1,
3
],
"uv": [
4,
252,
889,
252,
4,
35,
889,
35
],
"nuv": [
0.00390625,
0.13671875,
0.8681640625,
0.13671875,
0.00390625,
0.984375,
0.8681640625,
0.984375
],
"minPos": [
-442.5,
-108.5,
0
],
"maxPos": [
442.5,
108.5,
0
]
},
"isUuid": true,
"imageUuidOrDatabaseUri": "c2c33a8f-af06-4fc8-b718-548b2187eae9@6c48a",
"atlasUuid": ""
},
"ver": "1.0.12",
"imported": true,
"files": [
".json"
],
"subMetas": {}
}
},
"userData": {
"type": "sprite-frame",
"hasAlpha": true,
"fixAlphaTransparencyArtifacts": false,
"redirect": "c2c33a8f-af06-4fc8-b718-548b2187eae9@f9941"
}
}

View File

@ -0,0 +1,9 @@
{
"ver": "1.2.0",
"importer": "directory",
"imported": true,
"uuid": "4aba6020-b969-4d5c-8c38-bd57ad8dc70d",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@ -0,0 +1,41 @@
lucky-spin.png
size: 1024,1024
format: RGBA8888
filter: Linear,Linear
repeat: none
arrow
rotate: false
xy: 452, 155
size: 103, 157
orig: 103, 158
offset: 0, 0
index: -1
base
rotate: false
xy: 4, 452
size: 543, 548
orig: 544, 550
offset: 0, 1
index: -1
button
rotate: false
xy: 452, 316
size: 132, 132
orig: 132, 132
offset: 0, 0
index: -1
txt-spin
rotate: true
xy: 452, 49
size: 102, 58
orig: 108, 62
offset: 3, 3
index: -1
wheel
rotate: false
xy: 4, 4
size: 444, 444
orig: 444, 444
offset: 0, 0
index: -1

View File

@ -0,0 +1,11 @@
{
"ver": "1.0.2",
"importer": "text",
"imported": true,
"uuid": "7859d8c6-2440-4ffa-ac4a-03b52c0673cb",
"files": [
".json"
],
"subMetas": {},
"userData": {}
}

View File

@ -0,0 +1,130 @@
{
"skeleton": {
"hash": "sKAs3NK0GSdpZcOpBJA0pZ3Vlxo",
"spine": "3.8.99",
"x": -541,
"y": -557,
"width": 1087,
"height": 1227,
"images": "",
"audio": "D:/Huy 2D Animation/works/2024/Product/Galaxy Seeker/Reward Animation/lucky-spin"
},
"bones": [
{ "name": "root" },
{ "name": "pivot", "parent": "root" },
{ "name": "wheel", "parent": "pivot", "length": 415.93, "y": 3.5 },
{ "name": "arrow", "parent": "pivot", "x": -3.78, "y": 505.13 },
{ "name": "spin-button", "parent": "pivot" },
{ "name": "slot01", "parent": "wheel", "length": 80, "x": 3.31, "y": 264.08 },
{ "name": "slot02", "parent": "wheel", "length": 80, "rotation": 36, "x": -152.54, "y": 215.59 },
{ "name": "slot03", "parent": "wheel", "length": 80, "rotation": 72, "x": -250.13, "y": 84.75 },
{ "name": "slot04", "parent": "wheel", "length": 80, "rotation": 108, "x": -252.18, "y": -78.45 },
{ "name": "slot05", "parent": "wheel", "length": 80, "rotation": 144, "x": -157.9, "y": -211.7 },
{ "name": "slot06", "parent": "wheel", "length": 80, "rotation": 180, "x": -3.31, "y": -264.08 },
{ "name": "slot07", "parent": "wheel", "length": 80, "rotation": -144, "x": 152.54, "y": -215.59 },
{ "name": "slot08", "parent": "wheel", "length": 80, "rotation": -108, "x": 250.13, "y": -84.75 },
{ "name": "slot09", "parent": "wheel", "length": 80, "rotation": -72, "x": 252.18, "y": 78.46 },
{ "name": "slot10", "parent": "wheel", "length": 80, "rotation": -36, "x": 157.9, "y": 211.7 }
],
"slots": [
{ "name": "base", "bone": "pivot", "attachment": "base" },
{ "name": "wheel", "bone": "wheel", "attachment": "wheel" },
{ "name": "button", "bone": "spin-button", "attachment": "button" },
{ "name": "arrow", "bone": "arrow", "attachment": "arrow" },
{ "name": "txt-spin", "bone": "spin-button", "attachment": "txt-spin" }
],
"skins": [
{
"name": "default",
"attachments": {
"arrow": {
"arrow": { "x": 6.28, "y": 7.37, "width": 205, "height": 315 }
},
"base": {
"base": { "x": 2.5, "y": -7.5, "width": 1087, "height": 1099 }
},
"button": {
"button": { "width": 264, "height": 264 }
},
"txt-spin": {
"txt-spin": { "y": -2.5, "width": 216, "height": 123 }
},
"wheel": {
"wheel": { "width": 888, "height": 887 }
}
}
}
],
"animations": {
"appear": {
"slots": {
"arrow": {
"color": [
{ "color": "ffffff00", "curve": 0.25, "c3": 0.75 },
{ "time": 0.1667, "color": "ffffffff" }
]
},
"base": {
"color": [
{ "color": "ffffff00", "curve": 0.25, "c3": 0.75 },
{ "time": 0.1667, "color": "ffffffff" }
]
},
"button": {
"color": [
{ "color": "ffffff00", "curve": 0.25, "c3": 0.75 },
{ "time": 0.1667, "color": "ffffffff" }
]
},
"txt-spin": {
"color": [
{ "color": "ffffff00", "curve": 0.25, "c3": 0.75 },
{ "time": 0.1667, "color": "ffffffff" }
]
},
"wheel": {
"color": [
{ "color": "ffffff00", "curve": 0.25, "c3": 0.75 },
{ "time": 0.1667, "color": "ffffffff" }
]
}
},
"bones": {
"pivot": {
"scale": [
{ "x": 0.8, "y": 0.8, "curve": 0.25, "c3": 0.75 },
{ "time": 0.2667, "x": 1.1, "y": 1.1, "curve": 0.25, "c3": 0.75 },
{ "time": 0.5333 }
]
}
}
},
"idle": {
"bones": {
"wheel": {
"rotate": [
{},
{ "time": 3.3333, "angle": 90 },
{ "time": 6.6667, "angle": 180 },
{ "time": 10, "angle": -90 },
{ "time": 13.3333 }
]
}
}
},
"spin": {
"bones": {
"wheel": {
"rotate": [
{},
{ "time": 0.1333, "angle": -90 },
{ "time": 0.2667, "angle": 180 },
{ "time": 0.4, "angle": 90 },
{ "time": 0.5333 }
]
}
}
},
"stop": {}
}
}

View File

@ -0,0 +1,11 @@
{
"ver": "1.2.6",
"importer": "spine-data",
"imported": true,
"uuid": "5321c5a2-7473-436b-913c-39a871376ea0",
"files": [
".json"
],
"subMetas": {},
"userData": {}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 679 KiB

View File

@ -0,0 +1,134 @@
{
"ver": "1.0.26",
"importer": "image",
"imported": true,
"uuid": "005f87de-32cd-49c8-bc85-958afeb9e364",
"files": [
".json",
".png"
],
"subMetas": {
"6c48a": {
"importer": "texture",
"uuid": "005f87de-32cd-49c8-bc85-958afeb9e364@6c48a",
"displayName": "lucky-spin",
"id": "6c48a",
"name": "texture",
"userData": {
"wrapModeS": "clamp-to-edge",
"wrapModeT": "clamp-to-edge",
"imageUuidOrDatabaseUri": "005f87de-32cd-49c8-bc85-958afeb9e364",
"isUuid": true,
"visible": false,
"minfilter": "linear",
"magfilter": "linear",
"mipfilter": "none",
"anisotropy": 0
},
"ver": "1.0.22",
"imported": true,
"files": [
".json"
],
"subMetas": {}
},
"f9941": {
"importer": "sprite-frame",
"uuid": "005f87de-32cd-49c8-bc85-958afeb9e364@f9941",
"displayName": "lucky-spin",
"id": "f9941",
"name": "spriteFrame",
"userData": {
"trimType": "auto",
"trimThreshold": 1,
"rotated": false,
"offsetX": -218,
"offsetY": 10,
"trimX": 4,
"trimY": 4,
"width": 580,
"height": 996,
"rawWidth": 1024,
"rawHeight": 1024,
"borderTop": 0,
"borderBottom": 0,
"borderLeft": 0,
"borderRight": 0,
"packable": true,
"pixelsToUnit": 100,
"pivotX": 0.5,
"pivotY": 0.5,
"meshType": 0,
"vertices": {
"rawPosition": [
-290,
-498,
0,
290,
-498,
0,
-290,
498,
0,
290,
498,
0
],
"indexes": [
0,
1,
2,
2,
1,
3
],
"uv": [
4,
1020,
584,
1020,
4,
24,
584,
24
],
"nuv": [
0.00390625,
0.0234375,
0.5703125,
0.0234375,
0.00390625,
0.99609375,
0.5703125,
0.99609375
],
"minPos": [
-290,
-498,
0
],
"maxPos": [
290,
498,
0
]
},
"isUuid": true,
"imageUuidOrDatabaseUri": "005f87de-32cd-49c8-bc85-958afeb9e364@6c48a",
"atlasUuid": ""
},
"ver": "1.0.12",
"imported": true,
"files": [
".json"
],
"subMetas": {}
}
},
"userData": {
"type": "sprite-frame",
"hasAlpha": true,
"fixAlphaTransparencyArtifacts": false,
"redirect": "005f87de-32cd-49c8-bc85-958afeb9e364@f9941"
}
}

View File

@ -153,7 +153,7 @@
"_lpos": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"y": 40,
"z": 10
},
"_lrot": {
@ -1017,7 +1017,7 @@
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0.5,
"y": 0.5
"y": 0
},
"_id": ""
},
@ -1127,12 +1127,15 @@
"__id__": 80
},
"_collectSound": {
"__uuid__": "1ac12acc-dde3-4d31-9106-dfc30c030d40",
"__uuid__": "05a2671e-35bb-4be0-9244-43d541b9a26a",
"__expectedType__": "cc.AudioClip"
},
"_animation": {
"__id__": 82
},
"sprite": {
"__id__": 73
},
"displayName": "CHEESE",
"time": 10,
"_id": ""

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,13 @@
{
"ver": "1.1.50",
"importer": "prefab",
"imported": true,
"uuid": "fd465778-69b4-4cf8-9be2-48528a561b58",
"files": [
".json"
],
"subMetas": {},
"userData": {
"syncNodeName": "SecretBooster_flip_card"
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,13 @@
{
"ver": "1.1.50",
"importer": "prefab",
"imported": true,
"uuid": "3aaaa833-5e70-4ec2-9480-47180250bb9d",
"files": [
".json"
],
"subMetas": {},
"userData": {
"syncNodeName": "SecretBooster_free_reward"
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,13 @@
{
"ver": "1.1.50",
"importer": "prefab",
"imported": true,
"uuid": "a0154013-d559-4ebd-9c19-e549f8759829",
"files": [
".json"
],
"subMetas": {},
"userData": {
"syncNodeName": "SecretBooster_lucky_chain"
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,13 @@
{
"ver": "1.1.50",
"importer": "prefab",
"imported": true,
"uuid": "c4569dbe-f865-41fd-9cb9-d2be403e5c52",
"files": [
".json"
],
"subMetas": {},
"userData": {
"syncNodeName": "SecretBooster_lucky_wheel"
}
}

View File

@ -0,0 +1,9 @@
{
"ver": "1.2.0",
"importer": "directory",
"imported": true,
"uuid": "90d80be9-d824-4dd9-bfd1-2035981a793b",
"files": [],
"subMetas": {},
"userData": {}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,13 @@
{
"ver": "1.1.50",
"importer": "prefab",
"imported": true,
"uuid": "95970f5f-8dce-493c-8996-6e3965a2fd9f",
"files": [
".json"
],
"subMetas": {},
"userData": {
"syncNodeName": "Flip_Card"
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,13 @@
{
"ver": "1.1.50",
"importer": "prefab",
"imported": true,
"uuid": "5daa0690-4b3e-4026-b745-0b0420095ef2",
"files": [
".json"
],
"subMetas": {},
"userData": {
"syncNodeName": "Lucky_Chain"
}
}

View File

@ -0,0 +1,925 @@
[
{
"__type__": "cc.Prefab",
"_name": "Lucky_Chest",
"_objFlags": 0,
"__editorExtras__": {},
"_native": "",
"data": {
"__id__": 1
},
"optimizationPolicy": 0,
"persistent": false
},
{
"__type__": "cc.Node",
"_name": "Lucky_Chest",
"_objFlags": 0,
"__editorExtras__": {},
"_parent": null,
"_children": [
{
"__id__": 2
}
],
"_active": true,
"_components": [
{
"__id__": 35
},
{
"__id__": 37
},
{
"__id__": 39
}
],
"_prefab": {
"__id__": 41
},
"_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": 33554432,
"_euler": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_id": ""
},
{
"__type__": "cc.Node",
"_name": "spine",
"_objFlags": 0,
"__editorExtras__": {},
"_parent": {
"__id__": 1
},
"_children": [
{
"__id__": 3
},
{
"__id__": 10
}
],
"_active": true,
"_components": [
{
"__id__": 28
},
{
"__id__": 30
},
{
"__id__": 32
}
],
"_prefab": {
"__id__": 34
},
"_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": 33554432,
"_euler": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_id": ""
},
{
"__type__": "cc.Node",
"_name": "Button",
"_objFlags": 0,
"__editorExtras__": {},
"_parent": {
"__id__": 2
},
"_children": [],
"_active": true,
"_components": [
{
"__id__": 4
},
{
"__id__": 6
}
],
"_prefab": {
"__id__": 9
},
"_lpos": {
"__type__": "cc.Vec3",
"x": -30,
"y": 140,
"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": 33554432,
"_euler": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_id": ""
},
{
"__type__": "cc.UITransform",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 3
},
"_enabled": true,
"__prefab": {
"__id__": 5
},
"_contentSize": {
"__type__": "cc.Size",
"width": 600,
"height": 600
},
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0.5,
"y": 0.5
},
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "17q54A7hRAu7w+5ib7EKGa"
},
{
"__type__": "cc.Button",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 3
},
"_enabled": true,
"__prefab": {
"__id__": 7
},
"clickEvents": [
{
"__id__": 8
}
],
"_interactable": true,
"_transition": 0,
"_normalColor": {
"__type__": "cc.Color",
"r": 255,
"g": 255,
"b": 255,
"a": 255
},
"_hoverColor": {
"__type__": "cc.Color",
"r": 211,
"g": 211,
"b": 211,
"a": 255
},
"_pressedColor": {
"__type__": "cc.Color",
"r": 255,
"g": 255,
"b": 255,
"a": 255
},
"_disabledColor": {
"__type__": "cc.Color",
"r": 124,
"g": 124,
"b": 124,
"a": 255
},
"_normalSprite": null,
"_hoverSprite": null,
"_pressedSprite": null,
"_disabledSprite": null,
"_duration": 0.1,
"_zoomScale": 1.2,
"_target": null,
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "0bNQnwKhtHNrIlRZw8VaXB"
},
{
"__type__": "cc.ClickEvent",
"target": {
"__id__": 1
},
"component": "",
"_componentId": "ad470Ao3iRJlqlmRKGumrMu",
"handler": "open",
"customEventData": ""
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 1
},
"asset": {
"__id__": 0
},
"fileId": "a7FWR8Hx1IfILVF+Kna5vR",
"instance": null,
"targetOverrides": null,
"nestedPrefabInstanceRoots": null
},
{
"__type__": "cc.Node",
"_name": "Reward",
"_objFlags": 0,
"__editorExtras__": {},
"_parent": {
"__id__": 2
},
"_children": [
{
"__id__": 11
},
{
"__id__": 17
}
],
"_active": true,
"_components": [
{
"__id__": 23
},
{
"__id__": 25
}
],
"_prefab": {
"__id__": 27
},
"_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": 33554432,
"_euler": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_id": ""
},
{
"__type__": "cc.Node",
"_name": "Label",
"_objFlags": 0,
"__editorExtras__": {},
"_parent": {
"__id__": 10
},
"_children": [],
"_active": true,
"_components": [
{
"__id__": 12
},
{
"__id__": 14
}
],
"_prefab": {
"__id__": 16
},
"_lpos": {
"__type__": "cc.Vec3",
"x": -125.884765625,
"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": 33554432,
"_euler": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_id": ""
},
{
"__type__": "cc.UITransform",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 11
},
"_enabled": true,
"__prefab": {
"__id__": 13
},
"_contentSize": {
"__type__": "cc.Size",
"width": 148.23046875,
"height": 138
},
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0.5,
"y": 0.5
},
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "18zn0tVhhFMpybcPN2M0FU"
},
{
"__type__": "cc.Label",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 11
},
"_enabled": true,
"__prefab": {
"__id__": 15
},
"_customMaterial": null,
"_srcBlendFactor": 2,
"_dstBlendFactor": 4,
"_color": {
"__type__": "cc.Color",
"r": 255,
"g": 255,
"b": 255,
"a": 255
},
"_string": "100",
"_horizontalAlign": 1,
"_verticalAlign": 1,
"_actualFontSize": 100,
"_fontSize": 100,
"_fontFamily": "Arial",
"_lineHeight": 100,
"_overflow": 0,
"_enableWrapText": true,
"_font": {
"__uuid__": "4eb60b5b-72b8-497c-b499-d7921c9b84db",
"__expectedType__": "cc.TTFFont"
},
"_isSystemFontUsed": false,
"_spacingX": 0,
"_isItalic": false,
"_isBold": false,
"_isUnderline": false,
"_underlineHeight": 2,
"_cacheMode": 0,
"_enableOutline": true,
"_outlineColor": {
"__type__": "cc.Color",
"r": 0,
"g": 0,
"b": 0,
"a": 255
},
"_outlineWidth": 6,
"_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": "f0DWlVpChH9b/FpF1x9GMP"
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 1
},
"asset": {
"__id__": 0
},
"fileId": "2au8tDWs9GiJ0Z29DO/vrO",
"instance": null,
"targetOverrides": null,
"nestedPrefabInstanceRoots": null
},
{
"__type__": "cc.Node",
"_name": "Sprite",
"_objFlags": 0,
"__editorExtras__": {},
"_parent": {
"__id__": 10
},
"_children": [],
"_active": true,
"_components": [
{
"__id__": 18
},
{
"__id__": 20
}
],
"_prefab": {
"__id__": 22
},
"_lpos": {
"__type__": "cc.Vec3",
"x": 58.23046875,
"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": 33554432,
"_euler": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_id": ""
},
{
"__type__": "cc.UITransform",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 17
},
"_enabled": true,
"__prefab": {
"__id__": 19
},
"_contentSize": {
"__type__": "cc.Size",
"width": 200,
"height": 200
},
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0.5,
"y": 0.5
},
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "eeSLyxaSdA14MnU1JhQE8L"
},
{
"__type__": "cc.Sprite",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 17
},
"_enabled": true,
"__prefab": {
"__id__": 21
},
"_customMaterial": null,
"_srcBlendFactor": 2,
"_dstBlendFactor": 4,
"_color": {
"__type__": "cc.Color",
"r": 255,
"g": 255,
"b": 255,
"a": 255
},
"_spriteFrame": {
"__uuid__": "5b5a3073-f986-4350-9ef0-e1fddb56a494@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": "ecbp9qmr5AsK8U3oG22/LR"
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 1
},
"asset": {
"__id__": 0
},
"fileId": "01q2I1EmNPXr4APxBvWUXg",
"instance": null,
"targetOverrides": null,
"nestedPrefabInstanceRoots": null
},
{
"__type__": "cc.UITransform",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 10
},
"_enabled": true,
"__prefab": {
"__id__": 24
},
"_contentSize": {
"__type__": "cc.Size",
"width": 400,
"height": 100
},
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0.5,
"y": 0.5
},
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "00TALsq4ZHl6Ld0LVWiUr7"
},
{
"__type__": "cc.Layout",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 10
},
"_enabled": true,
"__prefab": {
"__id__": 26
},
"_resizeMode": 0,
"_layoutType": 1,
"_cellSize": {
"__type__": "cc.Size",
"width": 40,
"height": 40
},
"_startAxis": 0,
"_paddingLeft": 0,
"_paddingRight": 0,
"_paddingTop": 0,
"_paddingBottom": 0,
"_spacingX": 10,
"_spacingY": 0,
"_verticalDirection": 1,
"_horizontalDirection": 0,
"_constraint": 0,
"_constraintNum": 2,
"_affectedByScale": false,
"_isAlign": true,
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "289shnSS9OzLTNRZIo1ZaP"
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 1
},
"asset": {
"__id__": 0
},
"fileId": "eecto8uchI0JBttEQ77b3N",
"instance": null,
"targetOverrides": null,
"nestedPrefabInstanceRoots": null
},
{
"__type__": "cc.UITransform",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 2
},
"_enabled": true,
"__prefab": {
"__id__": 29
},
"_contentSize": {
"__type__": "cc.Size",
"width": 1280,
"height": 1280
},
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0.46616406440734864,
"y": 0.4069765567779541
},
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "0cfBKLa1pChZne6FjL9cYq"
},
{
"__type__": "sp.Skeleton",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 2
},
"_enabled": true,
"__prefab": {
"__id__": 31
},
"_customMaterial": null,
"_srcBlendFactor": 2,
"_dstBlendFactor": 4,
"_color": {
"__type__": "cc.Color",
"r": 255,
"g": 255,
"b": 255,
"a": 255
},
"_skeletonData": {
"__uuid__": "75cc4005-0956-4ded-8966-c8e347fc48d5",
"__expectedType__": "sp.SkeletonData"
},
"defaultSkin": "default",
"defaultAnimation": "",
"_premultipliedAlpha": true,
"_timeScale": 1,
"_preCacheMode": 0,
"_cacheMode": 0,
"_sockets": [],
"_useTint": false,
"_debugMesh": false,
"_debugBones": false,
"_debugSlots": false,
"_enableBatch": false,
"loop": false,
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "21L7AIRjlL4LYtwXg0hbBU"
},
{
"__type__": "88095558MdN+qsTqyxCx1uE",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 2
},
"_enabled": true,
"__prefab": {
"__id__": 33
},
"ignoreTimeScale": true,
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "d5wG1k12tPSLtnW0+IQXsf"
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 1
},
"asset": {
"__id__": 0
},
"fileId": "d8x2Oiw+pDOaWKifX4nb+x",
"instance": null,
"targetOverrides": null,
"nestedPrefabInstanceRoots": null
},
{
"__type__": "cc.UITransform",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 1
},
"_enabled": true,
"__prefab": {
"__id__": 36
},
"_contentSize": {
"__type__": "cc.Size",
"width": 100,
"height": 100
},
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0.5,
"y": 0.5
},
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "88ziLh6chEWpDcSRlXBn+Z"
},
{
"__type__": "b2937Y+5yVLE4z8uGa84ZqS",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 1
},
"_enabled": true,
"__prefab": {
"__id__": 38
},
"skeleton": {
"__id__": 30
},
"_flipX": false,
"_flipY": false,
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "c1MbWXU5hLnKm6/fqQUv00"
},
{
"__type__": "ad470Ao3iRJlqlmRKGumrMu",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 1
},
"_enabled": true,
"__prefab": {
"__id__": 40
},
"animationHandler": {
"__id__": 37
},
"spineRoot": {
"__id__": 2
},
"rewardRoot": {
"__id__": 10
},
"rewardSprite": {
"__id__": 20
},
"rewardLabel": {
"__id__": 14
},
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "cfV16eXGdO6agmNgVxnedh"
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 1
},
"asset": {
"__id__": 0
},
"fileId": "d8nEtFnupHxp1DyuqkemXx",
"instance": null,
"targetOverrides": null
}
]

View File

@ -0,0 +1,13 @@
{
"ver": "1.1.50",
"importer": "prefab",
"imported": true,
"uuid": "f1071cf2-53d2-46b0-8fa4-c95b17f8e622",
"files": [
".json"
],
"subMetas": {},
"userData": {
"syncNodeName": "Lucky_Chest"
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,13 @@
{
"ver": "1.1.50",
"importer": "prefab",
"imported": true,
"uuid": "624d1fb0-782f-48f7-8864-9e1db2dc8483",
"files": [
".json"
],
"subMetas": {},
"userData": {
"syncNodeName": "Lucky_Wheel"
}
}

View File

@ -92,7 +92,7 @@
},
"_lpos": {
"__type__": "cc.Vec3",
"x": 30.310546875,
"x": 46.12109375,
"y": 0,
"z": 0
},
@ -207,7 +207,7 @@
"_alignFlags": 34,
"_target": null,
"_left": 20.619999999999997,
"_right": -40,
"_right": -45,
"_top": 0,
"_bottom": 0,
"_horizontalCenter": 0,
@ -255,7 +255,7 @@
},
"_contentSize": {
"__type__": "cc.Size",
"width": 60.62109375,
"width": 82.2421875,
"height": 54.4
},
"_anchorPoint": {
@ -291,7 +291,7 @@
"b": 0,
"a": 255
},
"_string": "+10",
"_string": "+100",
"_horizontalAlign": 1,
"_verticalAlign": 1,
"_actualFontSize": 40,

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,938 @@
[
{
"__type__": "cc.SceneAsset",
"_name": "Gacha",
"_objFlags": 0,
"__editorExtras__": {},
"_native": "",
"scene": {
"__id__": 1
}
},
{
"__type__": "cc.Scene",
"_name": "Gacha",
"_objFlags": 0,
"__editorExtras__": {},
"_parent": null,
"_children": [
{
"__id__": 2
}
],
"_active": true,
"_components": [],
"_prefab": {
"__id__": 40
},
"_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
},
"autoReleaseAssets": false,
"_globals": {
"__id__": 41
},
"_id": "8eb392e2-dfc6-410a-9878-b5a65b2550f5"
},
{
"__type__": "cc.Node",
"_name": "Canvas",
"_objFlags": 0,
"__editorExtras__": {},
"_parent": {
"__id__": 1
},
"_children": [
{
"__id__": 3
},
{
"__id__": 5
},
{
"__id__": 13
},
{
"__id__": 21
},
{
"__id__": 29
}
],
"_active": true,
"_components": [
{
"__id__": 37
},
{
"__id__": 38
},
{
"__id__": 39
}
],
"_prefab": null,
"_lpos": {
"__type__": "cc.Vec3",
"x": 540,
"y": 1170,
"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": 33554432,
"_euler": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_id": "41AP9kplZNU7evCD9gzXVY"
},
{
"__type__": "cc.Node",
"_name": "Camera",
"_objFlags": 0,
"__editorExtras__": {},
"_parent": {
"__id__": 2
},
"_children": [],
"_active": true,
"_components": [
{
"__id__": 4
}
],
"_prefab": null,
"_lpos": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 1000
},
"_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": "51BKHOQYxNLqscuw1zcU/M"
},
{
"__type__": "cc.Camera",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 3
},
"_enabled": true,
"__prefab": null,
"_projection": 0,
"_priority": 1073741824,
"_fov": 45,
"_fovAxis": 0,
"_orthoHeight": 1170,
"_near": 1,
"_far": 2000,
"_color": {
"__type__": "cc.Color",
"r": 0,
"g": 0,
"b": 0,
"a": 255
},
"_depth": 1,
"_stencil": 0,
"_clearFlags": 6,
"_rect": {
"__type__": "cc.Rect",
"x": 0,
"y": 0,
"width": 1,
"height": 1
},
"_aperture": 19,
"_shutter": 7,
"_iso": 0,
"_screenScale": 1,
"_visibility": 41943040,
"_targetTexture": null,
"_postProcess": null,
"_usePostProcess": false,
"_cameraType": -1,
"_trackingType": 0,
"_id": "ad49ilyBRJKaliSJ0LVK+c"
},
{
"__type__": "cc.Node",
"_objFlags": 0,
"_parent": {
"__id__": 2
},
"_prefab": {
"__id__": 6
},
"__editorExtras__": {}
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 5
},
"asset": {
"__uuid__": "95970f5f-8dce-493c-8996-6e3965a2fd9f",
"__expectedType__": "cc.Prefab"
},
"fileId": "244TXoUqdKA4qqvhPODAbd",
"instance": {
"__id__": 7
},
"targetOverrides": null,
"nestedPrefabInstanceRoots": null
},
{
"__type__": "cc.PrefabInstance",
"fileId": "a4XVLiWqxF76rWoXo+3ZjB",
"prefabRootNode": null,
"mountedChildren": [],
"mountedComponents": [],
"propertyOverrides": [
{
"__id__": 8
},
{
"__id__": 10
},
{
"__id__": 11
},
{
"__id__": 12
}
],
"removedComponents": []
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 9
},
"propertyPath": [
"_name"
],
"value": "Flip_Card"
},
{
"__type__": "cc.TargetInfo",
"localID": [
"244TXoUqdKA4qqvhPODAbd"
]
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 9
},
"propertyPath": [
"_lpos"
],
"value": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
}
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 9
},
"propertyPath": [
"_lrot"
],
"value": {
"__type__": "cc.Quat",
"x": 0,
"y": 0,
"z": 0,
"w": 1
}
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 9
},
"propertyPath": [
"_euler"
],
"value": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
}
},
{
"__type__": "cc.Node",
"_objFlags": 0,
"_parent": {
"__id__": 2
},
"_prefab": {
"__id__": 14
},
"__editorExtras__": {}
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 13
},
"asset": {
"__uuid__": "5daa0690-4b3e-4026-b745-0b0420095ef2",
"__expectedType__": "cc.Prefab"
},
"fileId": "ec0xxH/etG0KDLbW0fRRht",
"instance": {
"__id__": 15
},
"targetOverrides": null,
"nestedPrefabInstanceRoots": null
},
{
"__type__": "cc.PrefabInstance",
"fileId": "33Dn9AllBGnZKARbgAO2Xe",
"prefabRootNode": null,
"mountedChildren": [],
"mountedComponents": [],
"propertyOverrides": [
{
"__id__": 16
},
{
"__id__": 18
},
{
"__id__": 19
},
{
"__id__": 20
}
],
"removedComponents": []
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 17
},
"propertyPath": [
"_name"
],
"value": "Lucky_Chain"
},
{
"__type__": "cc.TargetInfo",
"localID": [
"ec0xxH/etG0KDLbW0fRRht"
]
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 17
},
"propertyPath": [
"_lpos"
],
"value": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
}
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 17
},
"propertyPath": [
"_lrot"
],
"value": {
"__type__": "cc.Quat",
"x": 0,
"y": 0,
"z": 0,
"w": 1
}
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 17
},
"propertyPath": [
"_euler"
],
"value": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
}
},
{
"__type__": "cc.Node",
"_objFlags": 0,
"_parent": {
"__id__": 2
},
"_prefab": {
"__id__": 22
},
"__editorExtras__": {}
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 21
},
"asset": {
"__uuid__": "f1071cf2-53d2-46b0-8fa4-c95b17f8e622",
"__expectedType__": "cc.Prefab"
},
"fileId": "d8nEtFnupHxp1DyuqkemXx",
"instance": {
"__id__": 23
},
"targetOverrides": null,
"nestedPrefabInstanceRoots": null
},
{
"__type__": "cc.PrefabInstance",
"fileId": "27EfF6GvJF+KV13+AjJAGy",
"prefabRootNode": null,
"mountedChildren": [],
"mountedComponents": [],
"propertyOverrides": [
{
"__id__": 24
},
{
"__id__": 26
},
{
"__id__": 27
},
{
"__id__": 28
}
],
"removedComponents": []
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 25
},
"propertyPath": [
"_name"
],
"value": "Lucky_Chest"
},
{
"__type__": "cc.TargetInfo",
"localID": [
"d8nEtFnupHxp1DyuqkemXx"
]
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 25
},
"propertyPath": [
"_lpos"
],
"value": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
}
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 25
},
"propertyPath": [
"_lrot"
],
"value": {
"__type__": "cc.Quat",
"x": 0,
"y": 0,
"z": 0,
"w": 1
}
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 25
},
"propertyPath": [
"_euler"
],
"value": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
}
},
{
"__type__": "cc.Node",
"_objFlags": 0,
"_parent": {
"__id__": 2
},
"_prefab": {
"__id__": 30
},
"__editorExtras__": {}
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 29
},
"asset": {
"__uuid__": "624d1fb0-782f-48f7-8864-9e1db2dc8483",
"__expectedType__": "cc.Prefab"
},
"fileId": "b0CgrEZDdPP6qjRGc5LHCx",
"instance": {
"__id__": 31
},
"targetOverrides": null,
"nestedPrefabInstanceRoots": null
},
{
"__type__": "cc.PrefabInstance",
"fileId": "b1LNwy8O9NnJG96oZk+dmI",
"prefabRootNode": null,
"mountedChildren": [],
"mountedComponents": [],
"propertyOverrides": [
{
"__id__": 32
},
{
"__id__": 34
},
{
"__id__": 35
},
{
"__id__": 36
}
],
"removedComponents": []
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 33
},
"propertyPath": [
"_name"
],
"value": "Lucky_Wheel"
},
{
"__type__": "cc.TargetInfo",
"localID": [
"b0CgrEZDdPP6qjRGc5LHCx"
]
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 33
},
"propertyPath": [
"_lpos"
],
"value": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
}
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 33
},
"propertyPath": [
"_lrot"
],
"value": {
"__type__": "cc.Quat",
"x": 0,
"y": 0,
"z": 0,
"w": 1
}
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 33
},
"propertyPath": [
"_euler"
],
"value": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
}
},
{
"__type__": "cc.UITransform",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 2
},
"_enabled": true,
"__prefab": null,
"_contentSize": {
"__type__": "cc.Size",
"width": 1080,
"height": 2340
},
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0.5,
"y": 0.5
},
"_id": "1byJDTeCFEMplbBRH6ENVx"
},
{
"__type__": "cc.Canvas",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 2
},
"_enabled": true,
"__prefab": null,
"_cameraComponent": {
"__id__": 4
},
"_alignCanvasWithScreen": true,
"_id": "5cIJe+efpGw4NUMmyS4LLA"
},
{
"__type__": "cc.Widget",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 2
},
"_enabled": true,
"__prefab": null,
"_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": "d01IgeBABMcb9w3a9D7uoK"
},
{
"__type__": "cc.PrefabInfo",
"root": null,
"asset": null,
"fileId": "8eb392e2-dfc6-410a-9878-b5a65b2550f5",
"instance": null,
"targetOverrides": null,
"nestedPrefabInstanceRoots": [
{
"__id__": 5
},
{
"__id__": 13
},
{
"__id__": 21
},
{
"__id__": 29
}
]
},
{
"__type__": "cc.SceneGlobals",
"ambient": {
"__id__": 42
},
"shadows": {
"__id__": 43
},
"_skybox": {
"__id__": 44
},
"fog": {
"__id__": 45
},
"octree": {
"__id__": 46
},
"skin": {
"__id__": 47
},
"lightProbeInfo": {
"__id__": 48
},
"postSettings": {
"__id__": 49
},
"bakedWithStationaryMainLight": false,
"bakedWithHighpLightmap": false
},
{
"__type__": "cc.AmbientInfo",
"_skyColorHDR": {
"__type__": "cc.Vec4",
"x": 0.2,
"y": 0.5,
"z": 0.8,
"w": 0.520833125
},
"_skyColor": {
"__type__": "cc.Vec4",
"x": 0.2,
"y": 0.5,
"z": 0.8,
"w": 0.520833125
},
"_skyIllumHDR": 20000,
"_skyIllum": 20000,
"_groundAlbedoHDR": {
"__type__": "cc.Vec4",
"x": 0.2,
"y": 0.2,
"z": 0.2,
"w": 1
},
"_groundAlbedo": {
"__type__": "cc.Vec4",
"x": 0.2,
"y": 0.2,
"z": 0.2,
"w": 1
},
"_skyColorLDR": {
"__type__": "cc.Vec4",
"x": 0.452588,
"y": 0.607642,
"z": 0.755699,
"w": 0
},
"_skyIllumLDR": 0.8,
"_groundAlbedoLDR": {
"__type__": "cc.Vec4",
"x": 0.618555,
"y": 0.577848,
"z": 0.544564,
"w": 0
}
},
{
"__type__": "cc.ShadowsInfo",
"_enabled": false,
"_type": 0,
"_normal": {
"__type__": "cc.Vec3",
"x": 0,
"y": 1,
"z": 0
},
"_distance": 0,
"_planeBias": 1,
"_shadowColor": {
"__type__": "cc.Color",
"r": 76,
"g": 76,
"b": 76,
"a": 255
},
"_maxReceived": 4,
"_size": {
"__type__": "cc.Vec2",
"x": 1024,
"y": 1024
}
},
{
"__type__": "cc.SkyboxInfo",
"_envLightingType": 0,
"_envmapHDR": {
"__uuid__": "d032ac98-05e1-4090-88bb-eb640dcb5fc1@b47c0",
"__expectedType__": "cc.TextureCube"
},
"_envmap": {
"__uuid__": "d032ac98-05e1-4090-88bb-eb640dcb5fc1@b47c0",
"__expectedType__": "cc.TextureCube"
},
"_envmapLDR": {
"__uuid__": "6f01cf7f-81bf-4a7e-bd5d-0afc19696480@b47c0",
"__expectedType__": "cc.TextureCube"
},
"_diffuseMapHDR": null,
"_diffuseMapLDR": null,
"_enabled": false,
"_useHDR": true,
"_editableMaterial": null,
"_reflectionHDR": null,
"_reflectionLDR": null,
"_rotationAngle": 0
},
{
"__type__": "cc.FogInfo",
"_type": 0,
"_fogColor": {
"__type__": "cc.Color",
"r": 200,
"g": 200,
"b": 200,
"a": 255
},
"_enabled": false,
"_fogDensity": 0.3,
"_fogStart": 0.5,
"_fogEnd": 300,
"_fogAtten": 5,
"_fogTop": 1.5,
"_fogRange": 1.2,
"_accurate": false
},
{
"__type__": "cc.OctreeInfo",
"_enabled": false,
"_minPos": {
"__type__": "cc.Vec3",
"x": -1024,
"y": -1024,
"z": -1024
},
"_maxPos": {
"__type__": "cc.Vec3",
"x": 1024,
"y": 1024,
"z": 1024
},
"_depth": 8
},
{
"__type__": "cc.SkinInfo",
"_enabled": true,
"_blurRadius": 0.01,
"_sssIntensity": 3
},
{
"__type__": "cc.LightProbeInfo",
"_giScale": 1,
"_giSamples": 1024,
"_bounces": 2,
"_reduceRinging": 0,
"_showProbe": true,
"_showWireframe": true,
"_showConvex": false,
"_data": null,
"_lightProbeSphereVolume": 1
},
{
"__type__": "cc.PostSettingsInfo",
"_toneMappingType": 0
}
]

View File

@ -0,0 +1,11 @@
{
"ver": "1.1.50",
"importer": "scene",
"imported": true,
"uuid": "8eb392e2-dfc6-410a-9878-b5a65b2550f5",
"files": [
".json"
],
"subMetas": {},
"userData": {}
}

View File

@ -0,0 +1,8 @@
import { _decorator, Component, Node } from 'cc';
const { ccclass, property } = _decorator;
@ccclass('GachaBase')
export default abstract class GachaBase extends Component {
public abstract show(): void;
}

View File

@ -0,0 +1,9 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "f323b624-13bd-4ebd-9abf-28bb66340668",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@ -0,0 +1,282 @@
import { _decorator, Component, Enum, Node, setPropertyEnumType, sp } from 'cc';
const { ccclass, property, type } = _decorator;
export enum SocketPath {}
Enum(SocketPath);
export enum SpineAnimation {}
Enum(SpineAnimation);
export enum SpineSkin {}
Enum(SpineSkin);
@ccclass('SpineAnimationHandler')
export default class SpineAnimationHandler extends Component {
@property(sp.Skeleton)
private skeleton: sp.Skeleton;
@property({ visible: true })
private _flipX: boolean = false;
@property({ visible: true })
private _flipY: boolean = false;
public get flipX() {
return this._flipX;
}
public set flipX(value: boolean) {
if (value) {
this.skeleton._skeleton.scaleX = -Math.abs(this.skeleton._skeleton.scaleX);
} else {
this.skeleton._skeleton.scaleX = Math.abs(this.skeleton._skeleton.scaleX);
}
this._flipX = value;
}
public get flipY() {
return this._flipY;
}
public set flipY(value: boolean) {
if (value) {
this.skeleton._skeleton.scaleY = -Math.abs(this.skeleton._skeleton.scaleY);
} else {
this.skeleton._skeleton.scaleY = Math.abs(this.skeleton._skeleton.scaleY);
}
this._flipX = value;
}
private _enumSocketPath = Enum({});
private _enumAnimation = Enum({});
private _enumSkin = Enum({});
onFocusInEditor(): void {
this.setPropertySocketPath(this, '');
}
protected onLoad(): void {
this.skeleton._skeleton.scaleX = this._flipX ? -this.skeleton._skeleton.scaleX : this.skeleton._skeleton.scaleX;
this.skeleton._skeleton.scaleY = this._flipY ? -this.skeleton._skeleton.scaleY : this.skeleton._skeleton.scaleY;
}
public setPropertySocketPath(object: object, propertyName: string) {
//update enum SocketPath
let pathEnum = {};
this.skeleton.querySockets().forEach((path, i) => {
pathEnum[path] = i;
});
this._enumSocketPath = Enum({});
Object.assign(this._enumSocketPath, pathEnum);
Enum.update(this._enumSocketPath);
setPropertyEnumType(object, propertyName, this._enumSocketPath);
}
public setPropertySpineAnimation(object: object, propertyName: string) {
//update enum Animations
let animEnum = this.skeleton.skeletonData.getAnimsEnum();
this._enumAnimation = Enum({});
Object.assign(this._enumAnimation, animEnum);
Enum.update(this._enumAnimation);
setPropertyEnumType(object, propertyName, this._enumAnimation);
}
public setPropertySpineSkin(object: object, propertyName: string) {
//update enum Skin
let skinEnum = this.skeleton.skeletonData.getSkinsEnum();
this._enumSkin = Enum({});
Object.assign(this._enumSkin, skinEnum);
Enum.update(this._enumSkin);
setPropertyEnumType(object, propertyName, this._enumSkin);
}
public setAnimation(
animName: string,
options?: {
loop?: boolean;
trackIndex?: number;
ignoreAnimationRunning?: boolean;
onComplete?: (entry: sp.spine.TrackEntry) => void;
},
): sp.spine.TrackEntry {
if (!this.skeleton) return null;
const opts = {
trackIndex: 0,
loop: false,
...options,
};
if (opts.ignoreAnimationRunning) {
const trackEntry = this.skeleton.getCurrent(opts.trackIndex);
const animRunning = trackEntry?.animation?.name;
if (animRunning && animRunning == animName) return trackEntry;
}
this.skeleton.setCompleteListener(null);
const trackEntry = this.skeleton.setAnimation(opts?.trackIndex || 0, animName, opts?.loop);
if (opts.onComplete) {
this.skeleton.setCompleteListener(opts.onComplete);
}
return trackEntry;
}
public setListener(listener: (entry: sp.spine.TrackEntry, e: sp.spine.Event) => void) {
this.skeleton.setEventListener(listener);
}
public setAnimationAsync(
animName: string,
options?: {
loop?: boolean;
trackIndex?: number;
ignoreAnimationRunning?: boolean;
},
): Promise<sp.spine.TrackEntry> {
return new Promise((resolve) => {
this.setAnimation(animName, {
...options,
onComplete(entry) {
resolve(entry);
},
});
});
}
public addAnimation(
animName: string,
options?: {
loop?: boolean;
trackIndex?: number;
mixDuration?: number;
delay?: number;
onComplete?: (entry: sp.spine.TrackEntry) => void;
},
): sp.spine.TrackEntry {
if (!this.skeleton) return null;
const opts = {
trackIndex: 0,
loop: false,
...options,
};
this.skeleton.setCompleteListener(null);
const trackEntry = this.skeleton.addAnimation(opts?.trackIndex || 0, animName, opts?.loop, opts?.delay);
if (opts?.mixDuration) {
trackEntry.mixDuration = opts.mixDuration;
}
if (opts.onComplete) {
this.skeleton.setCompleteListener(opts.onComplete);
}
return trackEntry;
}
public addAnimationAsync(
animName: string,
options?: {
loop?: boolean;
trackIndex?: number;
mixDuration?: number;
delay?: number;
},
): Promise<sp.spine.TrackEntry> {
return new Promise((resolve) => {
this.addAnimation(animName, {
...options,
onComplete(entry) {
resolve(entry);
},
});
});
}
public addEmptyAnimation(options?: {
trackIndex?: number;
mixDuration?: number;
delay?: number;
onComplete?: (entry: sp.spine.TrackEntry) => void;
}): sp.spine.TrackEntry {
if (!this.skeleton) return;
const opts = {
trackIndex: 0,
mixDuration: 0.2,
delay: 0.2,
...options,
};
const trackEntry = this.skeleton.getState().addEmptyAnimation(opts.trackIndex, opts.mixDuration, opts.delay);
if (opts.onComplete) {
this.skeleton.setTrackCompleteListener(trackEntry, opts.onComplete);
}
return trackEntry;
}
public addEmptyAnimationAsync(options?: {
trackIndex?: number;
mixDuration?: number;
delay?: number;
}): Promise<sp.spine.TrackEntry> {
return new Promise((resolve) => {
this.addEmptyAnimation({
...options,
onComplete(entry) {
resolve(entry);
},
});
});
}
public clearTrack(trackIndex: number = 0): void {
if (!this.skeleton) return;
this.skeleton.clearTrack(trackIndex);
}
public findBone(boneName: string): sp.spine.Bone {
return this.skeleton.findBone(boneName);
}
public socketPathToString(socketPath: SocketPath): string {
return this.skeleton.querySockets()[socketPath];
}
public SpineAnimationToString(animationName: SpineAnimation): string {
return this.skeleton._skeleton.data.animations[animationName].name;
}
public SpineAnimationToAnimation(animationName: SpineAnimation): sp.spine.Animation {
return this.skeleton._skeleton.data.animations[animationName];
}
public addSocket(socketPath: SocketPath | string, target: Node): sp.SpineSocket {
let socket: sp.SpineSocket;
if (typeof socketPath === 'string') {
socket = new sp.SpineSocket(socketPath, target);
} else {
socket = new sp.SpineSocket(this.socketPathToString(socketPath), target);
}
this.skeleton.sockets.push(socket);
this.skeleton!.sockets = this.skeleton!.sockets;
return socket;
}
public updateSocketPath(socket: sp.SpineSocket, socketPath: SocketPath | string): sp.SpineSocket {
let newSocket: sp.SpineSocket;
if (typeof socketPath === 'string') {
newSocket = new sp.SpineSocket(socketPath, socket.target);
} else {
newSocket = new sp.SpineSocket(this.socketPathToString(socketPath), socket.target);
}
const index = this.skeleton.sockets.indexOf(socket);
this.skeleton.sockets[index] = newSocket;
this.skeleton!.sockets = this.skeleton!.sockets;
return newSocket;
}
public removeSocket(socket: sp.SpineSocket): void {
const index = this.skeleton.sockets.indexOf(socket);
this.skeleton.sockets.splice(index, 1);
this.skeleton!.sockets = this.skeleton!.sockets;
}
}

View File

@ -0,0 +1,9 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "b293763e-e725-4b13-8cfc-b866bce19a92",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@ -0,0 +1,22 @@
import { _decorator, CCBoolean, Component, game, Node, sp } from 'cc';
const { ccclass, property, requireComponent } = _decorator;
@ccclass('SpineIgnoreTimeScale')
@requireComponent(sp.Skeleton)
export default class SpineIgnoreTimeScale extends Component {
@property(CCBoolean)
private ignoreTimeScale: boolean = false;
private _skeleton: sp.Skeleton;
protected onLoad(): void {
this._skeleton = this.getComponent(sp.Skeleton);
}
protected update(dt: number): void {
if (game.timeScale != 1) {
this._skeleton.updateAnimation(this.ignoreTimeScale ? game.deltaTime : dt);
}
}
}

View File

@ -0,0 +1,9 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "88095e79-f0c7-4dfa-ab13-ab2c42c75b84",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@ -1,7 +1,21 @@
import { _decorator, Animation, AudioClip, CCFloat, CCString, Collider2D, Component, Contact2DType } from 'cc';
import {
_decorator,
Animation,
AudioClip,
CCFloat,
CCString,
Collider2D,
Component,
Contact2DType,
Node,
Sprite,
Vec3,
} from 'cc';
import BoosterType from '../Enum/BoosterType';
import GameEvent from '../Events/GameEvent';
import AudioManager from '../Manager/AudioManager';
import { EventManger } from '../Manager/EventManger';
import { GameManager } from '../Manager/GameManager';
import IPoolable from '../Pool/IPoolable';
import ObjectPool from '../Pool/ObjectPool';
import Utils from '../Utilities';
@ -15,35 +29,73 @@ export class BoosterBase extends Component implements IPoolable {
protected _collectSound: AudioClip;
@property({ type: Animation, visible: true })
private _animation: Animation;
@property(Sprite)
private sprite: Sprite;
@property(CCString)
public readonly displayName: string = 'CHEESE';
@property(CCFloat)
protected time: number = 10;
protected duration: number = 10;
private active: boolean = true;
public readonly type: BoosterType;
private _timer: number = 0;
private _activeCollider: boolean = true;
private _active: boolean = false;
public get active() {
return this._active;
}
protected onLoad(): void {
this._collider.on(Contact2DType.BEGIN_CONTACT, this.onContactBegin, this);
this.active = false;
this._activeCollider = false;
}
private onContactBegin(self: Collider2D, other: Collider2D) {
if (!this.active) return;
this.boosterActive();
this.active = false;
if (!this._activeCollider) return;
this._activeCollider = false;
AudioManager.playSfx(this._collectSound);
EventManger.instance.emit(GameEvent.ObjectRelease, this.node);
ObjectPool.release(this.node);
GameManager.instance.addBooster(this);
}
protected boosterActive?(): void;
public tick(dt: number) {
if (!this._active) return;
this.node.setPosition(Vec3.ZERO);
this._timer += dt;
if (this._timer >= this.duration) {
this._active = false;
}
}
public resetTime() {
this._timer = 0;
}
public collect(collector: Node) {
this._active = true;
this._timer = 0;
this.sprite.setNodeActive(false);
this.node.setParent(collector);
}
public end() {
if (!this.node.releaseToPool()) {
this.node.destroy();
}
}
public dispose() {
if (!this.node.releaseToPool()) {
this.node.destroy();
}
}
async onGet() {
this._animation.play();
await Utils.delay(this._animation.defaultClip.duration);
this.active = true;
this._activeCollider = true;
this.sprite.setNodeActive(true);
}
onRelease() {
this.active = false;
this._activeCollider = false;
}
}

View File

@ -1,12 +1,20 @@
import { _decorator, Component, Node } from 'cc';
import { BoosterBase } from './BoosterBase';
import { GameManager } from '../Manager/GameManager';
import BoosterType from '../Enum/BoosterType';
import AudioManager from '../Manager/AudioManager';
import { BoosterBase } from './BoosterBase';
const { ccclass, property } = _decorator;
@ccclass('CumulativeBooster')
export class CumulativeBooster extends BoosterBase {
protected boosterActive(): void {
GameManager.instance.ActiveBooster(BoosterType.CumulativeBar, this.time, this.displayName);
public readonly type: BoosterType = BoosterType.CumulativeBar;
public collect(collector: Node): void {
super.collect(collector);
AudioManager.setPlayRateBGM(1.5);
}
public end(): void {
super.end();
AudioManager.setPlayRateBGM(1);
}
}

View File

@ -0,0 +1,24 @@
import { _decorator, Component, game, Node, TweenSystem } from 'cc';
import BoosterType from '../Enum/BoosterType';
import GachaManager, { GachaType } from '../Manager/GachaManager';
import { BoosterBase } from './BoosterBase';
const { ccclass, property } = _decorator;
@ccclass('SecretBoxBooster')
export default class SecretBoxBooster extends BoosterBase {
public readonly type: BoosterType = BoosterType.Gacha;
@property({ type: GachaType })
private gachaType: GachaType;
public collect(collector: Node) {
super.collect(collector);
GachaManager.instance.show(this.gachaType, 1.5);
}
public tick(dt: number): void {
super.tick(dt);
TweenSystem.instance.update(game.deltaTime);
}
}

View File

@ -0,0 +1,9 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "016c5a9d-bb6a-44d9-acef-c99f56add5a3",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@ -1,5 +1,6 @@
enum BoosterType {
CumulativeBar,
Gacha,
}
export default BoosterType;

View File

@ -1,5 +1,6 @@
import { _decorator, CCFloat, Component, geometry, Label, Sprite, SpriteFrame, tween, Vec3 } from 'cc';
import { _decorator, CCFloat, Component, geometry, Label, Sprite, SpriteFrame, tween, Vec3, Widget } from 'cc';
import ObjectPool from '../Pool/ObjectPool';
import Utils from '../Utilities';
const { ccclass, property } = _decorator;
@ccclass('FloatingText')
@ -16,7 +17,7 @@ export class FloatingText extends Component {
private readonly _scaleDownDuration = 0.2;
private _moveDuration = 0;
public show(text: string, position: Vec3, scale = 1, duration = 1, image: SpriteFrame = null) {
public async show(text: string, position: Vec3, scale = 1, duration = 1, image: SpriteFrame = null) {
if (duration < this._scaleUpDuration + this._scaleDownDuration) {
console.warn(
`show duration time of floating text must be greater than ${this._scaleUpDuration + this._scaleDownDuration}`,
@ -54,5 +55,7 @@ export class FloatingText extends Component {
ObjectPool.release(this.node);
})
.start();
await Utils.delay(0.05);
this._sprite.getComponent(Widget).updateAlignment();
}
}

View File

@ -3,6 +3,7 @@ import BoosterType from '../Enum/BoosterType';
import ControllerSide from '../Enum/ControllerSide';
import GameState from '../Enum/GameState';
import ScoreType from '../Enum/ScoreType';
import { RewardType } from '../Manager/GachaManager';
enum GameEvent {
Score,

View File

@ -85,6 +85,7 @@ declare global {
}
interface Array<T> {
getRandomIndex(): number;
getRandom(): T;
getRandom(weights: number[]): T;
}
@ -268,6 +269,10 @@ String.prototype.isNullOrWhiteSpace = function () {
//#region ARRAY
Array.prototype.getRandomIndex = function () {
return randomRangeInt(0, this.length);
};
Array.prototype.getRandom = function (weights?: number[]) {
if (weights) {
let weightsClone = [...weights];

View File

@ -0,0 +1,9 @@
{
"ver": "1.2.0",
"importer": "directory",
"imported": true,
"uuid": "8c032cda-38fa-43e1-8b9f-3e8ba49c6c13",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@ -0,0 +1,68 @@
import { _decorator, Component, Node, Sprite } from 'cc';
import GachaBase from '../Base/GachaBase';
import SpineAnimationHandler from '../Base/SpineAnimationHandler';
import GachaManager from '../Manager/GachaManager';
const { ccclass, property } = _decorator;
@ccclass('FlipCard')
export default class FlipCard extends GachaBase {
@property(SpineAnimationHandler)
private animationHandler: SpineAnimationHandler;
@property(Node)
private spineRoot: Node;
@property(Sprite)
private cards: Sprite[] = [];
private _opened: boolean = false;
protected onLoad(): void {
this.animationHandler.setListener((_, e) => {
switch (e.data.name) {
case 'card1-active':
this.cards[0].setNodeActive(true);
break;
case 'card2-active':
this.cards[1].setNodeActive(true);
break;
case 'card3-active':
this.cards[2].setNodeActive(true);
break;
case 'card4-active':
this.cards[3].setNodeActive(true);
break;
}
});
}
protected onEnable(): void {
this._opened = false;
this.cards.forEach((card) => card.setNodeActive(false));
this.spineRoot.setActive(false);
}
public async show(): Promise<void> {
this.spineRoot.setActive(true);
await this.animationHandler.setAnimationAsync('appear');
this.animationHandler.addAnimation('idle', { loop: true });
}
public async open(event: Event, value: string) {
if (this._opened) return;
this._opened = true;
if (this.cards[+value - 1].node.active) return;
const reward = await GachaManager.instance.getReward();
if (reward) {
this.cards[+value - 1].spriteFrame = reward.icon;
await this.animationHandler.setAnimationAsync(`card${value}-active`, { trackIndex: +value });
GachaManager.instance.showFloatingText(
reward.quantity.toString(),
this.cards[+value - 1].node.worldPosition,
reward.icon,
);
GachaManager.instance.gachaDone();
}
GachaManager.instance.gachaDone();
}
}

View File

@ -0,0 +1,9 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "818c6c87-fb05-44d6-8633-e887d400aab5",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@ -0,0 +1,73 @@
import { _decorator, clamp01, Component, easing, game, Label, Node, Sprite, Vec3 } from 'cc';
import GachaBase from '../Base/GachaBase';
import SpineAnimationHandler from '../Base/SpineAnimationHandler';
import GachaManager, { RewardConfig } from '../Manager/GachaManager';
import Utils from '../Utilities';
const { ccclass, property } = _decorator;
@ccclass('FreeReward')
export default class FreeReward extends GachaBase {
@property(SpineAnimationHandler)
private animationHandler: SpineAnimationHandler;
@property(Node)
private spineRoot: Node;
@property(Node)
private rewardRoot: Node;
@property(Sprite)
private rewardSprite: Sprite;
@property(Label)
private rewardLabel: Label;
private _opened: boolean = false;
private _startShowReward: boolean = false;
private _timer: number = 0;
private _reward: RewardConfig;
protected onEnable(): void {
this.spineRoot.setActive(false);
this.rewardRoot.setActive(false);
this._opened = false;
}
protected update(dt: number): void {
if (this._startShowReward) {
let k = clamp01(this._timer / 0.3);
k = easing.quintInOut(k);
const targetScale = Vec3.lerp(this.rewardRoot.scale, Vec3.ZERO, Vec3.ONE, k);
const targetPosition = Vec3.lerp(this.rewardRoot.position, new Vec3(0, 150), new Vec3(0, 700), k);
this.rewardRoot.setScale(targetScale);
this.rewardRoot.setPosition(targetPosition);
this._timer += game.deltaTime;
if (k === 1) {
this._startShowReward = false;
GachaManager.instance.gachaDone();
}
}
}
public async show() {
this.spineRoot.setActive(true);
await this.animationHandler.setAnimationAsync('appear');
this.animationHandler.addAnimation('idle', { loop: true });
}
public async open() {
if (this._opened) return;
this._timer = 0;
this._opened = true;
this._reward = await GachaManager.instance.getReward();
if (this._reward) {
this.animationHandler.setAnimation('open');
this.rewardSprite.spriteFrame = this._reward.icon;
this.rewardLabel.string = this._reward.quantity.toString();
await Utils.delay(1);
this.rewardRoot.setActive(true);
this._startShowReward = true;
return;
}
this._startShowReward = false;
GachaManager.instance.gachaDone();
}
}

View File

@ -0,0 +1,9 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "ad470028-de24-4996-a966-44a1ae9ab32e",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@ -0,0 +1,109 @@
import { _decorator, Component, Node, sp, Sprite, SpriteFrame } from 'cc';
import GachaBase from '../Base/GachaBase';
import SpineAnimationHandler, { SocketPath, SpineAnimation, SpineSkin } from '../Base/SpineAnimationHandler';
import GachaManager, { RewardConfig } from '../Manager/GachaManager';
import Utils from '../Utilities';
const { ccclass, property } = _decorator;
class RewardCard {
public socket: sp.SpineSocket;
public node: Node;
public reward: RewardConfig;
constructor(node: Node, reward: RewardConfig) {
this.node = node;
this.reward = reward;
}
public setActive(value: boolean) {
this.node.setActive(value);
}
}
@ccclass('LuckyChain')
export default class LuckyChain extends GachaBase {
@property(SpineAnimationHandler)
private animationHandler: SpineAnimationHandler;
@property(Node)
private spriteRoot: Node;
@property(Node)
private cards: Node[] = [];
@property({ type: SocketPath })
private cardSlotPath: SocketPath[] = [];
private _activeCards: RewardCard[] = [];
private _allCards: RewardCard[] = [];
private _reward: RewardCard;
onFocusInEditor(): void {
this.animationHandler.setPropertySocketPath(this, 'cardSlotPath');
}
protected onLoad(): void {
this.setReward();
for (let i = 0; i < 4; i++) {
const card = this._allCards.shift();
const path = this.cardSlotPath[i];
const socket = this.animationHandler.addSocket(path, card.node);
card.setActive(true);
card.socket = socket;
this._activeCards.push(card);
}
this.animationHandler.setListener((_, e) => {
switch (e.data.name) {
case 'card-claimed':
const cardRemove = this._activeCards.shift();
this._reward = cardRemove;
this.animationHandler.removeSocket(cardRemove.socket);
cardRemove.setActive(false);
cardRemove.socket = null;
this._allCards.push(cardRemove);
break;
case 'new-card-spawned':
const card = this._allCards.shift();
const path = this.cardSlotPath[this.cardSlotPath.length - 1];
const socket = this.animationHandler.addSocket(path, card.node);
card.setActive(true);
card.socket = socket;
this._activeCards.push(card);
break;
}
});
}
protected onEnable(): void {
this.spriteRoot.setActive(false);
}
private setReward() {
this._allCards = this.cards.map((card) => {
const rw = GachaManager.instance.getRandomReward([60, 35, 5]);
card.getComponent(Sprite).spriteFrame = rw.icon;
card.setActive(false);
return new RewardCard(card, rw);
});
}
public async show(): Promise<void> {
this.spriteRoot.setActive(true);
await this.animationHandler.setAnimationAsync('appear');
await this.animationHandler.addAnimationAsync('active');
GachaManager.instance.showFloatingText(
this._reward.reward.quantity.toString(),
this.node.worldPosition,
this._reward.reward.icon,
);
GachaManager.instance.setReward(this._reward.reward.id);
await Utils.delay(1.5);
//update socket path
for (let i = 0; i < 4; i++) {
const card = this._activeCards[i];
const path = this.cardSlotPath[i];
this._activeCards[i].socket = this.animationHandler.updateSocketPath(card.socket, path);
}
}
}

View File

@ -0,0 +1,9 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "750b24fe-b9b8-4a9d-aa06-2da4dfb6d70d",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@ -0,0 +1,122 @@
import {
_decorator,
CCInteger,
CCString,
Component,
game,
Node,
random,
randomRangeInt,
RealCurve,
sp,
Sprite,
} from 'cc';
import GachaBase from '../Base/GachaBase';
import SpineAnimationHandler from '../Base/SpineAnimationHandler';
import GachaManager, { RewardConfig } from '../Manager/GachaManager';
const { ccclass, property } = _decorator;
class RewardCard {
public node: Node;
public reward: RewardConfig;
constructor(node: Node, reward: RewardConfig) {
this.node = node;
this.reward = reward;
}
public setActive(value: boolean) {
this.node.setActive(value);
}
}
@ccclass('LuckyWheel')
export default class LuckyWheel extends GachaBase {
@property(SpineAnimationHandler)
private animationHandler: SpineAnimationHandler;
@property(Node)
private spineRoot: Node;
@property(CCString)
private wheelBoneName: string = '';
@property(CCInteger)
private speed: number = 1;
@property(RealCurve)
private spinCurve: RealCurve = new RealCurve();
@property(Sprite)
private sprites: Sprite[] = [];
private _wheel: sp.spine.Bone;
private _targetAngle: number = 0;
private _spinning: boolean = false;
private _timer: number = 0;
private _timeSpin: number = 0;
private _maxAngle: number = 0;
private _allCards: RewardCard[];
private _random: number;
protected onLoad(): void {
this._wheel = this.animationHandler.findBone(this.wheelBoneName);
}
protected onEnable(): void {
this.setReward();
this.spineRoot.setActive(false);
this._wheel.rotation = 0;
this._wheel.update();
}
protected update(): void {
if (this._spinning) {
this._timer += game.deltaTime * this.speed;
const angle = this._maxAngle * this.spinCurve.evaluate(this._timer / this._timeSpin);
this._wheel.rotation = this._targetAngle + angle;
this._wheel.update();
if (this._timer >= this._timeSpin) {
this._spinning = false;
GachaManager.instance.showFloatingText(
this._allCards[this._random].reward.quantity.toString(),
this.node.worldPosition,
this._allCards[this._random].reward.icon,
);
GachaManager.instance.setReward(this._allCards[this._random].reward.id);
}
}
}
private setReward() {
this._allCards = this.sprites.map((card) => {
const rw = GachaManager.instance.getRandomReward([60, 35, 5]);
card.spriteFrame = rw.icon;
return new RewardCard(card.node, rw);
});
}
public async show(): Promise<void> {
for (let i = 0; i < GachaManager.instance.rewards.length; i++) {
this.sprites[i].spriteFrame = GachaManager.instance.rewards[i].icon;
}
this.spineRoot.setActive(true);
await this.animationHandler.setAnimationAsync('appear');
this.animationHandler.addAnimation('idle', { loop: true });
}
public async spin() {
if (this._spinning) return;
this._spinning = true;
this._random = this._allCards.getRandomIndex();
if (this._random) {
this.animationHandler.clearTrack(0);
this._targetAngle = -36 * this._random;
this._timer = 0;
this._timeSpin = randomRangeInt(10, 15);
this._maxAngle = 360 * this._timeSpin;
return;
}
this._spinning = true;
GachaManager.instance.setReward(this._allCards[this._random].reward.id);
}
}

View File

@ -0,0 +1,9 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "622ab578-e8ed-4f66-b548-d7fc834c69d4",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@ -0,0 +1,156 @@
import {
_decorator,
CCInteger,
CCString,
clamp01,
Component,
easing,
Enum,
game,
lerp,
Node,
SpriteFrame,
tween,
UIOpacity,
Vec3,
} from 'cc';
import GachaBase from '../Base/GachaBase';
import ScoreType from '../Enum/ScoreType';
import GameEvent from '../Events/GameEvent';
import FloatingTextFactory from '../Factory/FloatingTextFactory';
import Singleton from '../Singleton';
import Utils from '../Utilities';
import { EventManger } from './EventManger';
import { GameManager } from './GameManager';
const { ccclass, property } = _decorator;
export enum GachaType {
FreeReward,
LuckyWheel,
LuckyChain,
FlipCard,
}
Enum(GachaType);
export enum RewardType {
Star,
Time,
Cheese,
}
Enum(RewardType);
@ccclass('Gacha')
class Gacha {
@property(CCString)
public id: string = '';
@property({ type: GachaType })
public type: GachaType = GachaType.FreeReward;
@property(GachaBase)
public gacha: GachaBase;
}
@ccclass('RewardConfig')
export class RewardConfig {
@property(CCString)
public id: string = '';
@property({ type: RewardType })
public type: RewardType = RewardType.Star;
@property(SpriteFrame)
public icon: SpriteFrame;
@property(CCInteger)
public quantity: number;
}
@ccclass('GachaManager')
export default class GachaManager extends Singleton<GachaManager>() {
@property(CCString)
public gachaId: string;
@property(UIOpacity)
private container: UIOpacity;
@property(FloatingTextFactory)
private floatingScoreFactory: FloatingTextFactory;
@property(Gacha)
private gachas: Gacha[] = [];
@property(RewardConfig)
public rewards: RewardConfig[] = [];
private _reward: RewardConfig;
private _showing: boolean = false;
private _showTimer: number = 0;
private _idType: GachaType;
protected onLoad(): void {
super.onLoad();
this.container.setNodeActive(false);
}
public async show(type: GachaType, delay: number = 0) {
game.timeScale = 0;
await Utils.delay(delay);
this.container.setNodeActive(true);
this._showTimer = 0;
this._showing = true;
this._idType = type;
}
protected update(dt: number): void {
if (this._showing) {
this._showTimer += game.deltaTime;
const k = easing.smooth(clamp01(this._showTimer / 0.2));
this.container.opacity = lerp(0, 255, k);
if (k === 1) {
this._showing = false;
this.showGacha();
}
}
}
public showFloatingText(text: string, position: Vec3, icon: SpriteFrame) {
const floatingText = this.floatingScoreFactory.create(this.node);
floatingText.show(`+${text}`, position, 3, 1, icon);
}
private showGacha() {
const gacha = this.gachas.find((gacha) => gacha.type == this._idType);
gacha.gacha.show();
}
public async getReward(): Promise<RewardConfig> {
this._reward = this.getRandomReward();
return this._reward;
}
public getRewardIndex(reward: RewardConfig): number {
return this.rewards.indexOf(reward);
}
public async gachaDone() {
console.log(`Gacha reward: ${RewardType[this._reward.type]} quantity: ${this._reward.quantity}`);
await Utils.delay(1);
game.timeScale = 1;
tween(this.container)
.to(0.1, { opacity: 0 })
.call(() => {
this.container.setNodeActive(false);
switch (this._reward.type) {
case RewardType.Star:
GameManager.instance.addScore(this._reward.quantity, ScoreType.DestroyObject);
break;
case RewardType.Time:
GameManager.instance.addTime(this._reward.quantity, Vec3.ZERO);
break;
}
})
.start();
}
public getRandomReward(weights?: number[]) {
return this.rewards.getRandom(weights);
}
public setReward(id: string) {
this._reward = this.rewards.find((r) => r.id == id);
this.gachaDone();
}
}

View File

@ -0,0 +1,9 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "d004121d-a639-4e05-8376-794e0c448bbc",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@ -9,11 +9,13 @@ import {
Quat,
randomRangeInt,
SpriteFrame,
tween,
Vec2,
Vec3,
} from 'cc';
import BEConnector from '../API/BEConnector';
import Timer, { TimerType } from '../Base/Timer';
import { BoosterBase } from '../Booster/BoosterBase';
import BoosterType from '../Enum/BoosterType';
import GameState from '../Enum/GameState';
import ScoreType from '../Enum/ScoreType';
@ -41,17 +43,6 @@ window.addEventListener('message', (data) => {
}
});
class Booster {
public type: BoosterType;
public time: number;
public runningTime: number = 0;
constructor(type: BoosterType, time: number) {
this.type = type;
this.time = time;
}
}
@ccclass('GameManager')
export class GameManager extends Singleton<GameManager>() {
@property({ visible: true })
@ -70,8 +61,6 @@ export class GameManager extends Singleton<GameManager>() {
@property({ type: SpriteFrame, visible: true })
private _clockIcon: SpriteFrame;
@property({ type: AudioClip, visible: true })
private _boosterActiveSound: AudioClip;
@property({ type: AudioClip, visible: true })
private _startSound: AudioClip;
@property({ type: AudioClip, visible: true })
@ -83,7 +72,7 @@ export class GameManager extends Singleton<GameManager>() {
private _gameState: GameState;
private _timer: Timer = new Timer(TimerType.countDown);
private _boostersActive: Booster[] = [];
private _activeBoosters: Map<BoosterType, BoosterBase> = new Map();
private _score = 0;
private isReplayed = false;
@ -125,17 +114,7 @@ export class GameManager extends Singleton<GameManager>() {
protected update(dt: number): void {
this._timer.update(dt);
if (this._gameState != GameState.Playing) return;
for (let i = 0; i < this._boostersActive.length; i++) {
const booster = this._boostersActive[i];
booster.runningTime += dt;
if (booster.runningTime >= booster.time) {
this._boostersActive.splice(i, 1);
if (this._boostersActive.length == 0) {
AudioManager.setPlayRateBGM(1);
}
EventManger.instance.emit(GameEvent.BoosterDisable, booster.type);
}
}
this.runBooster(dt);
}
private async changeGameState(state: GameState) {
@ -169,17 +148,19 @@ export class GameManager extends Singleton<GameManager>() {
public addScore(
score: number,
type: ScoreType,
position: Vec3,
position?: Vec3,
opts?: { scaleMin?: number; scaleMax?: number; duration?: number },
) {
this._score += score;
const floatingScore = this._floatingScoreFactory.create(this._topContainer);
if (position) {
floatingScore.show(
`+${score}`,
position,
score >= 100 ? opts?.scaleMax || 1 : opts?.scaleMin || 1,
opts?.duration || 1,
);
}
EventManger.instance.emit(GameEvent.Score, [this._score, score, type, position]);
}
@ -236,7 +217,7 @@ export class GameManager extends Singleton<GameManager>() {
if (playStartSound) AudioManager.playSfx(this._startSound);
this.setCurrentBallInGame(1);
const ball = BallFactory.instance.create(this._ballHolder);
ball.init(this._boostersActive.length > 0);
ball.init(this._activeBoosters.size > 0);
ball.node.setRotation(Quat.IDENTITY);
ball.node.setPosition(this._ballSpawnPosition);
if (!throwBall) return ball;
@ -254,7 +235,7 @@ export class GameManager extends Singleton<GameManager>() {
if (this._currentBallInGame <= 0) {
EventManger.instance.emit(GameEvent.BallOut, null);
AudioManager.playSfx(this._ballOutSound);
this.DisableAllBooster();
this.cleanBooster();
await Utils.delay(TimeConfig.DelayPLay);
this.spawnBall(true);
}
@ -283,24 +264,26 @@ export class GameManager extends Singleton<GameManager>() {
await Utils.delay(0.3);
}
if (bonusTime) {
this.addTime(bonusTime);
const floatingScore = this._floatingScoreFactory.create(this._topContainer);
floatingScore.show(`+${bonusTime}`, position, 1.5, 1, this._clockIcon);
this.addTime(bonusTime, position);
}
}
public addTime(time: number) {
public addTime(time: number, position?: Vec3) {
this._timer.time += time;
if (this._warningTime && this._timer.time > 10) {
this._warningTime = false;
EventManger.instance.emit(GameEvent.WarningTime, false);
}
if (position) {
const floatingScore = this._floatingScoreFactory.create(this._topContainer);
floatingScore.show(`+${time}`, position, 1.5, 1, this._clockIcon);
}
EventManger.instance.emit(GameEvent.TimeUpdate, this._timer.timeRound);
}
public async gameOver() {
BallFactory.instance.releaseAll();
this.DisableAllBooster();
this.cleanBooster();
AudioManager.playBGM(this._gameOverMusic);
StickerManager.instance.showLabel('TIME UP!!!', { color: new Color('#ed3a18'), outLineColor: Color.WHITE });
BEConnector.gameScore = this.score;
@ -341,24 +324,46 @@ export class GameManager extends Singleton<GameManager>() {
this.spawnBall(true);
}
private DisableAllBooster() {
for (let i = 0; i < this._boostersActive.length; i++) {
const booster = this._boostersActive[i];
EventManger.instance.emit(GameEvent.BoosterDisable, booster.type);
public addBooster(booster: BoosterBase) {
let activeBooster = this._activeBoosters.get(booster.type);
if (activeBooster) {
booster.dispose();
activeBooster.resetTime();
return;
} else {
activeBooster = booster;
}
this._boostersActive = [];
AudioManager.setPlayRateBGM(1);
activeBooster.collect(this.node);
console.log(booster.displayName + ' active');
this._activeBoosters.set(booster.type, booster);
EventManger.instance.emit(GameEvent.BoosterActive, [booster.type, booster.displayName]);
}
public async ActiveBooster(type: BoosterType, time: number, displayName: string) {
//check booster already active
for (let i = 0; i < this._boostersActive.length; i++) {
const booster = this._boostersActive[i];
if (booster.type == type) return;
private cleanBooster() {
this._activeBoosters.forEach((booster) => {
booster.end();
EventManger.instance.emit(GameEvent.BoosterDisable, booster.type);
});
this._activeBoosters.clear();
}
private runBooster(dt: number) {
if (this._activeBoosters.size > 0) {
const boosterToRemove: BoosterBase[] = [];
this._activeBoosters.forEach((booster) => {
booster.tick(dt);
if (!booster.active) {
boosterToRemove.push(booster);
}
});
console.log(boosterToRemove.length);
boosterToRemove.forEach((booster) => {
booster.end();
EventManger.instance.emit(GameEvent.BoosterDisable, booster.type);
this._activeBoosters.delete(booster.type);
console.log(booster.displayName + ' inactive');
});
}
this._boostersActive.push(new Booster(type, time));
EventManger.instance.emit(GameEvent.BoosterActive, [type, displayName]);
AudioManager.playSfx(this._boosterActiveSound);
AudioManager.setPlayRateBGM(1.25);
}
}

View File

@ -1,4 +1,4 @@
import { _decorator, CCString, Color, Component, Label, Node, Sprite, SpriteFrame, Tween, tween, Vec3 } from 'cc';
import { _decorator, CCString, Color, Label, Node, Sprite, SpriteFrame, Tween, tween, Vec3 } from 'cc';
import Singleton from '../Singleton';
const { ccclass, property } = _decorator;

View File

@ -0,0 +1,9 @@
{
"ver": "1.2.0",
"importer": "directory",
"imported": true,
"uuid": "9d09f58c-4e94-4644-bb29-5926a43a1b18",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@ -131,7 +131,7 @@ export class GameOverPanel extends Component {
score += x;
duration = this._starSpeedCurve.evaluate(i / items - 1);
score = score > totalScore ? totalScore : score;
const obj = this._floatingStarFactory.create(this.node);
const obj = this._floatingStarFactory.create(this._scoreUI);
obj.node.setWorldPosition(this._scoreUI.worldPosition);
tween(obj.node)
.to(

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View File

@ -0,0 +1,134 @@
{
"ver": "1.0.26",
"importer": "image",
"imported": true,
"uuid": "9ee71731-507c-4afa-acbe-f2f16dc3cd50",
"files": [
".json",
".png"
],
"subMetas": {
"6c48a": {
"importer": "texture",
"uuid": "9ee71731-507c-4afa-acbe-f2f16dc3cd50@6c48a",
"displayName": "Asset Booster Random Gacha",
"id": "6c48a",
"name": "texture",
"userData": {
"wrapModeS": "clamp-to-edge",
"wrapModeT": "clamp-to-edge",
"imageUuidOrDatabaseUri": "9ee71731-507c-4afa-acbe-f2f16dc3cd50",
"isUuid": true,
"visible": false,
"minfilter": "linear",
"magfilter": "linear",
"mipfilter": "none",
"anisotropy": 0
},
"ver": "1.0.22",
"imported": true,
"files": [
".json"
],
"subMetas": {}
},
"f9941": {
"importer": "sprite-frame",
"uuid": "9ee71731-507c-4afa-acbe-f2f16dc3cd50@f9941",
"displayName": "Asset Booster Random Gacha",
"id": "f9941",
"name": "spriteFrame",
"userData": {
"trimType": "auto",
"trimThreshold": 1,
"rotated": false,
"offsetX": 0,
"offsetY": 0,
"trimX": 0,
"trimY": 0,
"width": 176,
"height": 155,
"rawWidth": 176,
"rawHeight": 155,
"borderTop": 0,
"borderBottom": 0,
"borderLeft": 0,
"borderRight": 0,
"packable": true,
"pixelsToUnit": 100,
"pivotX": 0.5,
"pivotY": 0.5,
"meshType": 0,
"vertices": {
"rawPosition": [
-88,
-77.5,
0,
88,
-77.5,
0,
-88,
77.5,
0,
88,
77.5,
0
],
"indexes": [
0,
1,
2,
2,
1,
3
],
"uv": [
0,
155,
176,
155,
0,
0,
176,
0
],
"nuv": [
0,
0,
1,
0,
0,
1,
1,
1
],
"minPos": [
-88,
-77.5,
0
],
"maxPos": [
88,
77.5,
0
]
},
"isUuid": true,
"imageUuidOrDatabaseUri": "9ee71731-507c-4afa-acbe-f2f16dc3cd50@6c48a",
"atlasUuid": ""
},
"ver": "1.0.12",
"imported": true,
"files": [
".json"
],
"subMetas": {}
}
},
"userData": {
"type": "sprite-frame",
"hasAlpha": true,
"fixAlphaTransparencyArtifacts": false,
"redirect": "9ee71731-507c-4afa-acbe-f2f16dc3cd50@f9941"
}
}

View File

@ -110,7 +110,7 @@
"_value": false
},
"spine": {
"_value": false
"_value": true
},
"dragon-bones": {
"_value": false
@ -138,6 +138,7 @@
"particle-2d",
"physics-2d-box2d",
"profiler",
"spine",
"tween",
"ui",
"websocket"