Initial commit

main
TamNguyen0511 2024-02-28 09:19:33 +07:00
commit 720b8ebfc2
105 changed files with 20541 additions and 0 deletions

View File

@ -0,0 +1,2 @@
[InternetShortcut]
URL=https://docs.cocos.com/creator/manual/en/scripting/setup.html#custom-script-template

View File

@ -0,0 +1,5 @@
{
"image": {
"type": "sprite-frame"
}
}

24
.gitignore vendored Normal file
View File

@ -0,0 +1,24 @@
#///////////////////////////
# Cocos Creator 3D Project
#///////////////////////////
library/
temp/
local/
build/
profiles/
native
#//////////////////////////
# NPM
#//////////////////////////
node_modules/
#//////////////////////////
# VSCode
#//////////////////////////
.vscode/
#//////////////////////////
# WebStorm
#//////////////////////////
.idea/

12
assets/Assets.meta Normal file
View File

@ -0,0 +1,12 @@
{
"ver": "1.1.0",
"importer": "directory",
"imported": true,
"uuid": "78b85539-ce17-48d8-b265-ae4db4c51cc0",
"files": [],
"subMetas": {},
"userData": {
"compressionType": {},
"isRemoteBundle": {}
}
}

BIN
assets/Assets/BG.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 297 KiB

134
assets/Assets/BG.png.meta Normal file
View File

@ -0,0 +1,134 @@
{
"ver": "1.0.25",
"importer": "image",
"imported": true,
"uuid": "ebc7ce3b-e6fd-4be1-a6a3-c54ff2e5db87",
"files": [
".json",
".png"
],
"subMetas": {
"6c48a": {
"importer": "texture",
"uuid": "ebc7ce3b-e6fd-4be1-a6a3-c54ff2e5db87@6c48a",
"displayName": "BG",
"id": "6c48a",
"name": "texture",
"userData": {
"wrapModeS": "clamp-to-edge",
"wrapModeT": "clamp-to-edge",
"imageUuidOrDatabaseUri": "ebc7ce3b-e6fd-4be1-a6a3-c54ff2e5db87",
"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": "ebc7ce3b-e6fd-4be1-a6a3-c54ff2e5db87@f9941",
"displayName": "BG",
"id": "f9941",
"name": "spriteFrame",
"userData": {
"trimType": "auto",
"trimThreshold": 1,
"rotated": false,
"offsetX": 0,
"offsetY": 0,
"trimX": 0,
"trimY": 0,
"width": 1920,
"height": 1080,
"rawWidth": 1920,
"rawHeight": 1080,
"borderTop": 0,
"borderBottom": 0,
"borderLeft": 0,
"borderRight": 0,
"packable": true,
"pixelsToUnit": 100,
"pivotX": 0.5,
"pivotY": 0.5,
"meshType": 0,
"vertices": {
"rawPosition": [
-960,
-540,
0,
960,
-540,
0,
-960,
540,
0,
960,
540,
0
],
"indexes": [
0,
1,
2,
2,
1,
3
],
"uv": [
0,
1080,
1920,
1080,
0,
0,
1920,
0
],
"nuv": [
0,
0,
1,
0,
0,
1,
1,
1
],
"minPos": [
-960,
-540,
0
],
"maxPos": [
960,
540,
0
]
},
"isUuid": true,
"imageUuidOrDatabaseUri": "ebc7ce3b-e6fd-4be1-a6a3-c54ff2e5db87@6c48a",
"atlasUuid": ""
},
"ver": "1.0.11",
"imported": true,
"files": [
".json"
],
"subMetas": {}
}
},
"userData": {
"type": "sprite-frame",
"fixAlphaTransparencyArtifacts": true,
"hasAlpha": true,
"redirect": "ebc7ce3b-e6fd-4be1-a6a3-c54ff2e5db87@f9941"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

View File

@ -0,0 +1,134 @@
{
"ver": "1.0.25",
"importer": "image",
"imported": true,
"uuid": "39e019fb-5f0a-4620-9772-63da8db7d311",
"files": [
".json",
".png"
],
"subMetas": {
"6c48a": {
"importer": "texture",
"uuid": "39e019fb-5f0a-4620-9772-63da8db7d311@6c48a",
"displayName": "Gameover_Board",
"id": "6c48a",
"name": "texture",
"userData": {
"wrapModeS": "clamp-to-edge",
"wrapModeT": "clamp-to-edge",
"imageUuidOrDatabaseUri": "39e019fb-5f0a-4620-9772-63da8db7d311",
"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": "39e019fb-5f0a-4620-9772-63da8db7d311@f9941",
"displayName": "Gameover_Board",
"id": "f9941",
"name": "spriteFrame",
"userData": {
"trimType": "auto",
"trimThreshold": 1,
"rotated": false,
"offsetX": 0,
"offsetY": 0,
"trimX": 0,
"trimY": 0,
"width": 981,
"height": 590,
"rawWidth": 981,
"rawHeight": 590,
"borderTop": 0,
"borderBottom": 0,
"borderLeft": 0,
"borderRight": 0,
"packable": true,
"pixelsToUnit": 100,
"pivotX": 0.5,
"pivotY": 0.5,
"meshType": 0,
"vertices": {
"rawPosition": [
-490.5,
-295,
0,
490.5,
-295,
0,
-490.5,
295,
0,
490.5,
295,
0
],
"indexes": [
0,
1,
2,
2,
1,
3
],
"uv": [
0,
590,
981,
590,
0,
0,
981,
0
],
"nuv": [
0,
0,
1,
0,
0,
1,
1,
1
],
"minPos": [
-490.5,
-295,
0
],
"maxPos": [
490.5,
295,
0
]
},
"isUuid": true,
"imageUuidOrDatabaseUri": "39e019fb-5f0a-4620-9772-63da8db7d311@6c48a",
"atlasUuid": ""
},
"ver": "1.0.11",
"imported": true,
"files": [
".json"
],
"subMetas": {}
}
},
"userData": {
"type": "sprite-frame",
"fixAlphaTransparencyArtifacts": true,
"hasAlpha": true,
"redirect": "39e019fb-5f0a-4620-9772-63da8db7d311@f9941"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

View File

@ -0,0 +1,134 @@
{
"ver": "1.0.25",
"importer": "image",
"imported": true,
"uuid": "ff046972-01bd-4d20-b27d-92120e050ca3",
"files": [
".json",
".png"
],
"subMetas": {
"6c48a": {
"importer": "texture",
"uuid": "ff046972-01bd-4d20-b27d-92120e050ca3@6c48a",
"displayName": "Play_Button",
"id": "6c48a",
"name": "texture",
"userData": {
"wrapModeS": "clamp-to-edge",
"wrapModeT": "clamp-to-edge",
"imageUuidOrDatabaseUri": "ff046972-01bd-4d20-b27d-92120e050ca3",
"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": "ff046972-01bd-4d20-b27d-92120e050ca3@f9941",
"displayName": "Play_Button",
"id": "f9941",
"name": "spriteFrame",
"userData": {
"trimType": "auto",
"trimThreshold": 1,
"rotated": false,
"offsetX": 0,
"offsetY": 0,
"trimX": 0,
"trimY": 0,
"width": 478,
"height": 194,
"rawWidth": 478,
"rawHeight": 194,
"borderTop": 0,
"borderBottom": 0,
"borderLeft": 0,
"borderRight": 0,
"packable": true,
"pixelsToUnit": 100,
"pivotX": 0.5,
"pivotY": 0.5,
"meshType": 0,
"vertices": {
"rawPosition": [
-239,
-97,
0,
239,
-97,
0,
-239,
97,
0,
239,
97,
0
],
"indexes": [
0,
1,
2,
2,
1,
3
],
"uv": [
0,
194,
478,
194,
0,
0,
478,
0
],
"nuv": [
0,
0,
1,
0,
0,
1,
1,
1
],
"minPos": [
-239,
-97,
0
],
"maxPos": [
239,
97,
0
]
},
"isUuid": true,
"imageUuidOrDatabaseUri": "ff046972-01bd-4d20-b27d-92120e050ca3@6c48a",
"atlasUuid": ""
},
"ver": "1.0.11",
"imported": true,
"files": [
".json"
],
"subMetas": {}
}
},
"userData": {
"type": "sprite-frame",
"fixAlphaTransparencyArtifacts": true,
"hasAlpha": true,
"redirect": "ff046972-01bd-4d20-b27d-92120e050ca3@f9941"
}
}

BIN
assets/Assets/T_goal.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

View File

@ -0,0 +1,134 @@
{
"ver": "1.0.25",
"importer": "image",
"imported": true,
"uuid": "2ee842e1-bb95-48f7-b919-59aadb8e138a",
"files": [
".json",
".png"
],
"subMetas": {
"6c48a": {
"importer": "texture",
"uuid": "2ee842e1-bb95-48f7-b919-59aadb8e138a@6c48a",
"displayName": "T_goal",
"id": "6c48a",
"name": "texture",
"userData": {
"wrapModeS": "clamp-to-edge",
"wrapModeT": "clamp-to-edge",
"imageUuidOrDatabaseUri": "2ee842e1-bb95-48f7-b919-59aadb8e138a",
"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": "2ee842e1-bb95-48f7-b919-59aadb8e138a@f9941",
"displayName": "T_goal",
"id": "f9941",
"name": "spriteFrame",
"userData": {
"trimType": "auto",
"trimThreshold": 1,
"rotated": false,
"offsetX": 0,
"offsetY": 0.5,
"trimX": 10,
"trimY": 15,
"width": 236,
"height": 88,
"rawWidth": 256,
"rawHeight": 119,
"borderTop": 0,
"borderBottom": 0,
"borderLeft": 0,
"borderRight": 0,
"packable": true,
"pixelsToUnit": 100,
"pivotX": 0.5,
"pivotY": 0.5,
"meshType": 0,
"vertices": {
"rawPosition": [
-118,
-44,
0,
118,
-44,
0,
-118,
44,
0,
118,
44,
0
],
"indexes": [
0,
1,
2,
2,
1,
3
],
"uv": [
10,
104,
246,
104,
10,
16,
246,
16
],
"nuv": [
0.0390625,
0.13445378151260504,
0.9609375,
0.13445378151260504,
0.0390625,
0.8739495798319328,
0.9609375,
0.8739495798319328
],
"minPos": [
-118,
-44,
0
],
"maxPos": [
118,
44,
0
]
},
"isUuid": true,
"imageUuidOrDatabaseUri": "2ee842e1-bb95-48f7-b919-59aadb8e138a@6c48a",
"atlasUuid": ""
},
"ver": "1.0.11",
"imported": true,
"files": [
".json"
],
"subMetas": {}
}
},
"userData": {
"type": "sprite-frame",
"fixAlphaTransparencyArtifacts": true,
"hasAlpha": true,
"redirect": "2ee842e1-bb95-48f7-b919-59aadb8e138a@f9941"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

@ -0,0 +1,134 @@
{
"ver": "1.0.25",
"importer": "image",
"imported": true,
"uuid": "b32b8e37-0a90-4a56-ad3a-060cb0e83298",
"files": [
".json",
".png"
],
"subMetas": {
"6c48a": {
"importer": "texture",
"uuid": "b32b8e37-0a90-4a56-ad3a-060cb0e83298@6c48a",
"displayName": "Yes_Button",
"id": "6c48a",
"name": "texture",
"userData": {
"wrapModeS": "clamp-to-edge",
"wrapModeT": "clamp-to-edge",
"imageUuidOrDatabaseUri": "b32b8e37-0a90-4a56-ad3a-060cb0e83298",
"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": "b32b8e37-0a90-4a56-ad3a-060cb0e83298@f9941",
"displayName": "Yes_Button",
"id": "f9941",
"name": "spriteFrame",
"userData": {
"trimType": "auto",
"trimThreshold": 1,
"rotated": false,
"offsetX": 0,
"offsetY": 0,
"trimX": 0,
"trimY": 0,
"width": 377,
"height": 114,
"rawWidth": 377,
"rawHeight": 114,
"borderTop": 0,
"borderBottom": 0,
"borderLeft": 0,
"borderRight": 0,
"packable": true,
"pixelsToUnit": 100,
"pivotX": 0.5,
"pivotY": 0.5,
"meshType": 0,
"vertices": {
"rawPosition": [
-188.5,
-57,
0,
188.5,
-57,
0,
-188.5,
57,
0,
188.5,
57,
0
],
"indexes": [
0,
1,
2,
2,
1,
3
],
"uv": [
0,
114,
377,
114,
0,
0,
377,
0
],
"nuv": [
0,
0,
1,
0,
0,
1,
1,
1
],
"minPos": [
-188.5,
-57,
0
],
"maxPos": [
188.5,
57,
0
]
},
"isUuid": true,
"imageUuidOrDatabaseUri": "b32b8e37-0a90-4a56-ad3a-060cb0e83298@6c48a",
"atlasUuid": ""
},
"ver": "1.0.11",
"imported": true,
"files": [
".json"
],
"subMetas": {}
}
},
"userData": {
"type": "sprite-frame",
"fixAlphaTransparencyArtifacts": true,
"hasAlpha": true,
"redirect": "b32b8e37-0a90-4a56-ad3a-060cb0e83298@f9941"
}
}

BIN
assets/Assets/ball1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

View File

@ -0,0 +1,134 @@
{
"ver": "1.0.25",
"importer": "image",
"imported": true,
"uuid": "4f72234d-abd9-4cef-acf2-bd453ad42c8d",
"files": [
".json",
".png"
],
"subMetas": {
"6c48a": {
"importer": "texture",
"uuid": "4f72234d-abd9-4cef-acf2-bd453ad42c8d@6c48a",
"displayName": "ball1",
"id": "6c48a",
"name": "texture",
"userData": {
"wrapModeS": "clamp-to-edge",
"wrapModeT": "clamp-to-edge",
"imageUuidOrDatabaseUri": "4f72234d-abd9-4cef-acf2-bd453ad42c8d",
"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": "4f72234d-abd9-4cef-acf2-bd453ad42c8d@f9941",
"displayName": "ball1",
"id": "f9941",
"name": "spriteFrame",
"userData": {
"trimType": "auto",
"trimThreshold": 1,
"rotated": false,
"offsetX": 0,
"offsetY": 0,
"trimX": 0,
"trimY": 0,
"width": 200,
"height": 200,
"rawWidth": 200,
"rawHeight": 200,
"borderTop": 0,
"borderBottom": 0,
"borderLeft": 0,
"borderRight": 0,
"packable": true,
"pixelsToUnit": 100,
"pivotX": 0.5,
"pivotY": 0.5,
"meshType": 0,
"vertices": {
"rawPosition": [
-100,
-100,
0,
100,
-100,
0,
-100,
100,
0,
100,
100,
0
],
"indexes": [
0,
1,
2,
2,
1,
3
],
"uv": [
0,
200,
200,
200,
0,
0,
200,
0
],
"nuv": [
0,
0,
1,
0,
0,
1,
1,
1
],
"minPos": [
-100,
-100,
0
],
"maxPos": [
100,
100,
0
]
},
"isUuid": true,
"imageUuidOrDatabaseUri": "4f72234d-abd9-4cef-acf2-bd453ad42c8d@6c48a",
"atlasUuid": ""
},
"ver": "1.0.11",
"imported": true,
"files": [
".json"
],
"subMetas": {}
}
},
"userData": {
"type": "sprite-frame",
"fixAlphaTransparencyArtifacts": true,
"hasAlpha": true,
"redirect": "4f72234d-abd9-4cef-acf2-bd453ad42c8d@f9941"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 713 B

View File

@ -0,0 +1,134 @@
{
"ver": "1.0.25",
"importer": "image",
"imported": true,
"uuid": "8bc52c2c-7db5-4951-9bf1-a38f1914bf0e",
"files": [
".json",
".png"
],
"subMetas": {
"6c48a": {
"importer": "texture",
"uuid": "8bc52c2c-7db5-4951-9bf1-a38f1914bf0e@6c48a",
"displayName": "characterRed",
"id": "6c48a",
"name": "texture",
"userData": {
"wrapModeS": "clamp-to-edge",
"wrapModeT": "clamp-to-edge",
"imageUuidOrDatabaseUri": "8bc52c2c-7db5-4951-9bf1-a38f1914bf0e",
"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": "8bc52c2c-7db5-4951-9bf1-a38f1914bf0e@f9941",
"displayName": "characterRed",
"id": "f9941",
"name": "spriteFrame",
"userData": {
"trimType": "auto",
"trimThreshold": 1,
"rotated": false,
"offsetX": 0,
"offsetY": 0,
"trimX": 0,
"trimY": 0,
"width": 21,
"height": 31,
"rawWidth": 21,
"rawHeight": 31,
"borderTop": 0,
"borderBottom": 0,
"borderLeft": 0,
"borderRight": 0,
"packable": true,
"pixelsToUnit": 100,
"pivotX": 0.5,
"pivotY": 0.5,
"meshType": 0,
"vertices": {
"rawPosition": [
-10.5,
-15.5,
0,
10.5,
-15.5,
0,
-10.5,
15.5,
0,
10.5,
15.5,
0
],
"indexes": [
0,
1,
2,
2,
1,
3
],
"uv": [
0,
31,
21,
31,
0,
0,
21,
0
],
"nuv": [
0,
0,
1,
0,
0,
1,
1,
1
],
"minPos": [
-10.5,
-15.5,
0
],
"maxPos": [
10.5,
15.5,
0
]
},
"isUuid": true,
"imageUuidOrDatabaseUri": "8bc52c2c-7db5-4951-9bf1-a38f1914bf0e@6c48a",
"atlasUuid": ""
},
"ver": "1.0.11",
"imported": true,
"files": [
".json"
],
"subMetas": {}
}
},
"userData": {
"type": "sprite-frame",
"fixAlphaTransparencyArtifacts": true,
"hasAlpha": true,
"redirect": "8bc52c2c-7db5-4951-9bf1-a38f1914bf0e@f9941"
}
}

BIN
assets/Assets/flipper.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

View File

@ -0,0 +1,134 @@
{
"ver": "1.0.25",
"importer": "image",
"imported": true,
"uuid": "99965ba1-0be3-4b32-be47-131eaac4b520",
"files": [
".json",
".png"
],
"subMetas": {
"6c48a": {
"importer": "texture",
"uuid": "99965ba1-0be3-4b32-be47-131eaac4b520@6c48a",
"displayName": "flipper",
"id": "6c48a",
"name": "texture",
"userData": {
"wrapModeS": "clamp-to-edge",
"wrapModeT": "clamp-to-edge",
"imageUuidOrDatabaseUri": "99965ba1-0be3-4b32-be47-131eaac4b520",
"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": "99965ba1-0be3-4b32-be47-131eaac4b520@f9941",
"displayName": "flipper",
"id": "f9941",
"name": "spriteFrame",
"userData": {
"trimType": "auto",
"trimThreshold": 1,
"rotated": false,
"offsetX": 0,
"offsetY": 0,
"trimX": 0,
"trimY": 0,
"width": 328,
"height": 90,
"rawWidth": 328,
"rawHeight": 90,
"borderTop": 0,
"borderBottom": 0,
"borderLeft": 0,
"borderRight": 0,
"packable": true,
"pixelsToUnit": 100,
"pivotX": 0.5,
"pivotY": 0.5,
"meshType": 0,
"vertices": {
"rawPosition": [
-164,
-45,
0,
164,
-45,
0,
-164,
45,
0,
164,
45,
0
],
"indexes": [
0,
1,
2,
2,
1,
3
],
"uv": [
0,
90,
328,
90,
0,
0,
328,
0
],
"nuv": [
0,
0,
1,
0,
0,
1,
1,
1
],
"minPos": [
-164,
-45,
0
],
"maxPos": [
164,
45,
0
]
},
"isUuid": true,
"imageUuidOrDatabaseUri": "99965ba1-0be3-4b32-be47-131eaac4b520@6c48a",
"atlasUuid": ""
},
"ver": "1.0.11",
"imported": true,
"files": [
".json"
],
"subMetas": {}
}
},
"userData": {
"type": "sprite-frame",
"fixAlphaTransparencyArtifacts": true,
"hasAlpha": true,
"redirect": "99965ba1-0be3-4b32-be47-131eaac4b520@f9941"
}
}

BIN
assets/Assets/slingshot.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

@ -0,0 +1,134 @@
{
"ver": "1.0.25",
"importer": "image",
"imported": true,
"uuid": "ed7b6eb5-9598-4de9-bb0d-acd3fabe4867",
"files": [
".json",
".png"
],
"subMetas": {
"6c48a": {
"importer": "texture",
"uuid": "ed7b6eb5-9598-4de9-bb0d-acd3fabe4867@6c48a",
"displayName": "slingshot",
"id": "6c48a",
"name": "texture",
"userData": {
"wrapModeS": "clamp-to-edge",
"wrapModeT": "clamp-to-edge",
"imageUuidOrDatabaseUri": "ed7b6eb5-9598-4de9-bb0d-acd3fabe4867",
"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": "ed7b6eb5-9598-4de9-bb0d-acd3fabe4867@f9941",
"displayName": "slingshot",
"id": "f9941",
"name": "spriteFrame",
"userData": {
"trimType": "auto",
"trimThreshold": 1,
"rotated": false,
"offsetX": 0,
"offsetY": 0,
"trimX": 0,
"trimY": 0,
"width": 197,
"height": 301,
"rawWidth": 197,
"rawHeight": 301,
"borderTop": 0,
"borderBottom": 0,
"borderLeft": 0,
"borderRight": 0,
"packable": true,
"pixelsToUnit": 100,
"pivotX": 0.5,
"pivotY": 0.5,
"meshType": 0,
"vertices": {
"rawPosition": [
-98.5,
-150.5,
0,
98.5,
-150.5,
0,
-98.5,
150.5,
0,
98.5,
150.5,
0
],
"indexes": [
0,
1,
2,
2,
1,
3
],
"uv": [
0,
301,
197,
301,
0,
0,
197,
0
],
"nuv": [
0,
0,
1,
0,
0,
1,
1,
1
],
"minPos": [
-98.5,
-150.5,
0
],
"maxPos": [
98.5,
150.5,
0
]
},
"isUuid": true,
"imageUuidOrDatabaseUri": "ed7b6eb5-9598-4de9-bb0d-acd3fabe4867@6c48a",
"atlasUuid": ""
},
"ver": "1.0.11",
"imported": true,
"files": [
".json"
],
"subMetas": {}
}
},
"userData": {
"type": "sprite-frame",
"fixAlphaTransparencyArtifacts": true,
"hasAlpha": true,
"redirect": "ed7b6eb5-9598-4de9-bb0d-acd3fabe4867@f9941"
}
}

12
assets/Assets/test.meta Normal file
View File

@ -0,0 +1,12 @@
{
"ver": "1.1.0",
"importer": "directory",
"imported": true,
"uuid": "808f6a72-4905-4684-b0ef-a138191db715",
"files": [],
"subMetas": {},
"userData": {
"compressionType": {},
"isRemoteBundle": {}
}
}

View File

@ -0,0 +1,10 @@
{
"__type__": "cc.PhysicsMaterial",
"_name": "",
"_objFlags": 0,
"_native": "",
"_friction": 2,
"_rollingFriction": 0,
"_spinningFriction": 0,
"_restitution": 0.5
}

View File

@ -0,0 +1,11 @@
{
"ver": "1.0.1",
"importer": "physics-material",
"imported": true,
"uuid": "e48b2190-6e7f-4293-99c7-18cdcc00d3c3",
"files": [
".json"
],
"subMetas": {},
"userData": {}
}

BIN
assets/Assets/wall.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

134
assets/Assets/wall.png.meta Normal file
View File

@ -0,0 +1,134 @@
{
"ver": "1.0.25",
"importer": "image",
"imported": true,
"uuid": "f72f1770-f28c-4784-a68e-83a814c5af3d",
"files": [
".json",
".png"
],
"subMetas": {
"6c48a": {
"importer": "texture",
"uuid": "f72f1770-f28c-4784-a68e-83a814c5af3d@6c48a",
"displayName": "wall",
"id": "6c48a",
"name": "texture",
"userData": {
"wrapModeS": "clamp-to-edge",
"wrapModeT": "clamp-to-edge",
"imageUuidOrDatabaseUri": "f72f1770-f28c-4784-a68e-83a814c5af3d",
"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": "f72f1770-f28c-4784-a68e-83a814c5af3d@f9941",
"displayName": "wall",
"id": "f9941",
"name": "spriteFrame",
"userData": {
"trimType": "auto",
"trimThreshold": 1,
"rotated": false,
"offsetX": 0,
"offsetY": 0,
"trimX": 0,
"trimY": 0,
"width": 351,
"height": 69,
"rawWidth": 351,
"rawHeight": 69,
"borderTop": 0,
"borderBottom": 0,
"borderLeft": 0,
"borderRight": 0,
"packable": true,
"pixelsToUnit": 100,
"pivotX": 0.5,
"pivotY": 0.5,
"meshType": 0,
"vertices": {
"rawPosition": [
-175.5,
-34.5,
0,
175.5,
-34.5,
0,
-175.5,
34.5,
0,
175.5,
34.5,
0
],
"indexes": [
0,
1,
2,
2,
1,
3
],
"uv": [
0,
69,
351,
69,
0,
0,
351,
0
],
"nuv": [
0,
0,
1,
0,
0,
1,
1,
1
],
"minPos": [
-175.5,
-34.5,
0
],
"maxPos": [
175.5,
34.5,
0
]
},
"isUuid": true,
"imageUuidOrDatabaseUri": "f72f1770-f28c-4784-a68e-83a814c5af3d@6c48a",
"atlasUuid": ""
},
"ver": "1.0.11",
"imported": true,
"files": [
".json"
],
"subMetas": {}
}
},
"userData": {
"type": "sprite-frame",
"fixAlphaTransparencyArtifacts": true,
"hasAlpha": true,
"redirect": "f72f1770-f28c-4784-a68e-83a814c5af3d@f9941"
}
}

12
assets/Prefabs.meta Normal file
View File

@ -0,0 +1,12 @@
{
"ver": "1.1.0",
"importer": "directory",
"imported": true,
"uuid": "730ca6ee-2864-4f40-a17c-4eb910458473",
"files": [],
"subMetas": {},
"userData": {
"compressionType": {},
"isRemoteBundle": {}
}
}

267
assets/Prefabs/Ball.prefab Normal file
View File

@ -0,0 +1,267 @@
[
{
"__type__": "cc.Prefab",
"_name": "Ball",
"_objFlags": 0,
"_native": "",
"data": {
"__id__": 1
},
"optimizationPolicy": 0,
"persistent": false
},
{
"__type__": "cc.Node",
"_name": "Ball",
"_objFlags": 0,
"__editorExtras__": {},
"_parent": null,
"_children": [],
"_active": true,
"_components": [
{
"__id__": 2
},
{
"__id__": 4
},
{
"__id__": 6
},
{
"__id__": 8
},
{
"__id__": 10
}
],
"_prefab": {
"__id__": 12
},
"_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": 0.3,
"y": 0.3,
"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__": 1
},
"_enabled": true,
"__prefab": {
"__id__": 3
},
"_contentSize": {
"__type__": "cc.Size",
"width": 200,
"height": 200
},
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0.5,
"y": 0.5
},
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "beBPBHPMpEJraWP8VptTuG"
},
{
"__type__": "cc.Sprite",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 1
},
"_enabled": true,
"__prefab": {
"__id__": 5
},
"_customMaterial": null,
"_srcBlendFactor": 2,
"_dstBlendFactor": 4,
"_color": {
"__type__": "cc.Color",
"r": 255,
"g": 255,
"b": 255,
"a": 255
},
"_spriteFrame": {
"__uuid__": "4f72234d-abd9-4cef-acf2-bd453ad42c8d@f9941",
"__expectedType__": "cc.SpriteFrame"
},
"_type": 0,
"_fillType": 0,
"_sizeMode": 1,
"_fillCenter": {
"__type__": "cc.Vec2",
"x": 0,
"y": 0
},
"_fillStart": 0,
"_fillRange": 0,
"_isTrimmedMode": true,
"_useGrayscale": false,
"_atlas": null,
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "bbNUf7fcREKbdMzeD2KyNQ"
},
{
"__type__": "cc.CircleCollider2D",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 1
},
"_enabled": true,
"__prefab": {
"__id__": 7
},
"tag": 0,
"_group": 1,
"_density": 1,
"_sensor": false,
"_friction": 0,
"_restitution": 0.5,
"_offset": {
"__type__": "cc.Vec2",
"x": 0,
"y": 0
},
"_radius": 100,
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "1dqSoMImdC0rB01Xr+HmI/"
},
{
"__type__": "cc.RigidBody2D",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 1
},
"_enabled": true,
"__prefab": {
"__id__": 9
},
"enabledContactListener": true,
"bullet": true,
"awakeOnLoad": true,
"_group": 1,
"_type": 2,
"_allowSleep": true,
"_gravityScale": 1,
"_linearDamping": 0,
"_angularDamping": 0,
"_linearVelocity": {
"__type__": "cc.Vec2",
"x": 0,
"y": 0
},
"_angularVelocity": 0,
"_fixedRotation": false,
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "9crXsAtjdEQIcD0a2IceFl"
},
{
"__type__": "cad12cEubBIXb2NvvCon5Ge",
"_name": "",
"_objFlags": 0,
"node": {
"__id__": 1
},
"_enabled": true,
"__prefab": {
"__id__": 11
},
"maxSpeed": 2,
"rigidbody": {
"__id__": 8
},
"collider": {
"__id__": 6
},
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "c1lmpQL0VK3q2DI79nkPRA"
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 1
},
"asset": {
"__id__": 0
},
"fileId": "ecwvc2xHdIf6kSfbLqrETl",
"instance": null,
"targetOverrides": [
{
"__id__": 13
}
]
},
{
"__type__": "cc.TargetOverrideInfo",
"source": {
"__id__": 10
},
"sourceInfo": null,
"propertyPath": [
"goalParticle"
],
"target": null,
"targetInfo": {
"__id__": 14
}
},
{
"__type__": "cc.TargetInfo",
"localID": [
"74gD9Y10BHHIFl8LKXE/Rx"
]
}
]

View File

@ -0,0 +1,13 @@
{
"ver": "1.1.43",
"importer": "prefab",
"imported": true,
"uuid": "9b471c78-2e1d-4db8-ab08-b3df7c938d64",
"files": [
".json"
],
"subMetas": {},
"userData": {
"syncNodeName": "Ball"
}
}

View File

@ -0,0 +1,748 @@
[
{
"__type__": "cc.Prefab",
"_name": "Goal Particle",
"_objFlags": 0,
"_native": "",
"data": {
"__id__": 1
},
"optimizationPolicy": 0,
"persistent": false
},
{
"__type__": "cc.Node",
"_name": "Goal Particle",
"_objFlags": 0,
"__editorExtras__": {},
"_parent": null,
"_children": [],
"_active": true,
"_components": [
{
"__id__": 2
}
],
"_prefab": {
"__id__": 59
},
"_lpos": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_lrot": {
"__type__": "cc.Quat",
"x": 0,
"y": 0,
"z": 0,
"w": 1
},
"_lscale": {
"__type__": "cc.Vec3",
"x": 1,
"y": 1,
"z": 1
},
"_mobility": 0,
"_layer": 1073741824,
"_euler": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_id": ""
},
{
"__type__": "cc.ParticleSystem",
"_name": "",
"_objFlags": 0,
"node": {
"__id__": 1
},
"_enabled": true,
"__prefab": {
"__id__": 3
},
"_materials": [
{
"__uuid__": "ea7478b0-408d-4052-b703-f0d2355e095f",
"__expectedType__": "cc.Material"
}
],
"_visFlags": 0,
"startColor": {
"__id__": 4
},
"scaleSpace": 1,
"startSize3D": true,
"startSizeX": {
"__id__": 9
},
"startSize": {
"__id__": 9
},
"startSizeY": {
"__id__": 10
},
"startSizeZ": {
"__id__": 11
},
"startSpeed": {
"__id__": 12
},
"startRotation3D": true,
"startRotationX": {
"__id__": 13
},
"startRotationY": {
"__id__": 14
},
"startRotationZ": {
"__id__": 15
},
"startRotation": {
"__id__": 15
},
"startDelay": {
"__id__": 16
},
"startLifetime": {
"__id__": 17
},
"duration": 1.5,
"loop": false,
"simulationSpeed": 1,
"playOnAwake": true,
"gravityModifier": {
"__id__": 18
},
"rateOverTime": {
"__id__": 19
},
"rateOverDistance": {
"__id__": 20
},
"bursts": [],
"_renderCulling": false,
"_cullingMode": 0,
"_aabbHalfX": 0,
"_aabbHalfY": 0,
"_aabbHalfZ": 0,
"_dataCulling": false,
"enableCulling": false,
"_colorOverLifetimeModule": {
"__id__": 21
},
"_shapeModule": {
"__id__": 23
},
"_sizeOvertimeModule": {
"__id__": 25
},
"_velocityOvertimeModule": {
"__id__": 30
},
"_forceOvertimeModule": {
"__id__": 35
},
"_limitVelocityOvertimeModule": {
"__id__": 39
},
"_rotationOvertimeModule": {
"__id__": 44
},
"_textureAnimationModule": {
"__id__": 48
},
"_noiseModule": {
"__id__": 52
},
"_trailModule": {
"__id__": 53
},
"renderer": {
"__id__": 58
},
"_prewarm": false,
"_capacity": 100,
"_simulationSpace": 1,
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "74gD9Y10BHHIFl8LKXE/Rx"
},
{
"__type__": "cc.GradientRange",
"_mode": 1,
"gradient": {
"__id__": 5
}
},
{
"__type__": "cc.Gradient",
"colorKeys": [
{
"__id__": 6
},
{
"__id__": 7
},
{
"__id__": 8
}
],
"alphaKeys": [],
"mode": 0
},
{
"__type__": "cc.ColorKey",
"color": {
"__type__": "cc.Color",
"r": 255,
"g": 0,
"b": 0,
"a": 255
},
"time": 0.25
},
{
"__type__": "cc.ColorKey",
"color": {
"__type__": "cc.Color",
"r": 0,
"g": 255,
"b": 51,
"a": 255
},
"time": 0.5
},
{
"__type__": "cc.ColorKey",
"color": {
"__type__": "cc.Color",
"r": 0,
"g": 173,
"b": 255,
"a": 255
},
"time": 0.75
},
{
"__type__": "cc.CurveRange",
"mode": 3,
"constantMin": 0.1,
"constantMax": 0.3,
"multiplier": 1
},
{
"__type__": "cc.CurveRange",
"mode": 3,
"constantMin": 0.1,
"constantMax": 0.3,
"multiplier": 1
},
{
"__type__": "cc.CurveRange",
"mode": 0,
"constant": 1,
"multiplier": 1
},
{
"__type__": "cc.CurveRange",
"mode": 3,
"constantMin": 5,
"constantMax": 10,
"multiplier": 1
},
{
"__type__": "cc.CurveRange",
"mode": 3,
"constantMin": 0,
"constantMax": 0.015230877516916316,
"multiplier": 1
},
{
"__type__": "cc.CurveRange",
"mode": 3,
"constantMin": 0,
"constantMax": 0.015230877516916316,
"multiplier": 1
},
{
"__type__": "cc.CurveRange",
"mode": 3,
"constantMin": 0,
"constantMax": 0.0003046123143505703,
"multiplier": 1
},
{
"__type__": "cc.CurveRange",
"mode": 0,
"constant": 0,
"multiplier": 1
},
{
"__type__": "cc.CurveRange",
"mode": 3,
"constantMin": 0.3,
"constantMax": 1.5,
"multiplier": 1
},
{
"__type__": "cc.CurveRange",
"mode": 0,
"constant": 1,
"multiplier": 1
},
{
"__type__": "cc.CurveRange",
"mode": 0,
"constant": 0,
"multiplier": 1
},
{
"__type__": "cc.CurveRange",
"mode": 0,
"constant": 0,
"multiplier": 1
},
{
"__type__": "cc.ColorOvertimeModule",
"_enable": false,
"color": {
"__id__": 22
}
},
{
"__type__": "cc.GradientRange",
"_mode": 0,
"color": {
"__type__": "cc.Color",
"r": 255,
"g": 255,
"b": 255,
"a": 255
}
},
{
"__type__": "cc.ShapeModule",
"_enable": true,
"_shapeType": 4,
"shapeType": 4,
"emitFrom": 3,
"alignToDirection": false,
"randomDirectionAmount": 0,
"sphericalDirectionAmount": 0,
"randomPositionAmount": 0,
"radius": 0.05,
"radiusThickness": 0,
"arcMode": 0,
"arcSpread": 0,
"arcSpeed": {
"__id__": 24
},
"length": 5,
"boxThickness": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_position": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_rotation": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_scale": {
"__type__": "cc.Vec3",
"x": 1,
"y": 1,
"z": 1
},
"_arc": 6.283185307179586,
"_angle": 0.4363323129985824
},
{
"__type__": "cc.CurveRange",
"mode": 0,
"constant": 1,
"multiplier": 1
},
{
"__type__": "cc.SizeOvertimeModule",
"_enable": false,
"separateAxes": false,
"size": {
"__id__": 26
},
"x": {
"__id__": 27
},
"y": {
"__id__": 28
},
"z": {
"__id__": 29
}
},
{
"__type__": "cc.CurveRange",
"mode": 0,
"constant": 0,
"multiplier": 1
},
{
"__type__": "cc.CurveRange",
"mode": 0,
"constant": 0,
"multiplier": 1
},
{
"__type__": "cc.CurveRange",
"mode": 0,
"constant": 0,
"multiplier": 1
},
{
"__type__": "cc.CurveRange",
"mode": 0,
"constant": 0,
"multiplier": 1
},
{
"__type__": "cc.VelocityOvertimeModule",
"_enable": false,
"x": {
"__id__": 31
},
"y": {
"__id__": 32
},
"z": {
"__id__": 33
},
"speedModifier": {
"__id__": 34
},
"space": 1
},
{
"__type__": "cc.CurveRange",
"mode": 0,
"constant": 0,
"multiplier": 1
},
{
"__type__": "cc.CurveRange",
"mode": 0,
"constant": 3,
"multiplier": 1
},
{
"__type__": "cc.CurveRange",
"mode": 0,
"constant": 0,
"multiplier": 1
},
{
"__type__": "cc.CurveRange",
"mode": 0,
"constant": 1,
"multiplier": 1
},
{
"__type__": "cc.ForceOvertimeModule",
"_enable": false,
"x": {
"__id__": 36
},
"y": {
"__id__": 37
},
"z": {
"__id__": 38
},
"space": 1
},
{
"__type__": "cc.CurveRange",
"mode": 0,
"constant": 0,
"multiplier": 1
},
{
"__type__": "cc.CurveRange",
"mode": 0,
"constant": 0,
"multiplier": 1
},
{
"__type__": "cc.CurveRange",
"mode": 0,
"constant": 0,
"multiplier": 1
},
{
"__type__": "cc.LimitVelocityOvertimeModule",
"_enable": false,
"limitX": {
"__id__": 40
},
"limitY": {
"__id__": 41
},
"limitZ": {
"__id__": 42
},
"limit": {
"__id__": 43
},
"dampen": 3,
"separateAxes": false,
"space": 1
},
{
"__type__": "cc.CurveRange",
"mode": 0,
"constant": 0,
"multiplier": 1
},
{
"__type__": "cc.CurveRange",
"mode": 0,
"constant": 0,
"multiplier": 1
},
{
"__type__": "cc.CurveRange",
"mode": 0,
"constant": 0,
"multiplier": 1
},
{
"__type__": "cc.CurveRange",
"mode": 0,
"constant": 0,
"multiplier": 1
},
{
"__type__": "cc.RotationOvertimeModule",
"_enable": false,
"_separateAxes": false,
"x": {
"__id__": 45
},
"y": {
"__id__": 46
},
"z": {
"__id__": 47
}
},
{
"__type__": "cc.CurveRange",
"mode": 0,
"constant": 0,
"multiplier": 1
},
{
"__type__": "cc.CurveRange",
"mode": 0,
"constant": 0,
"multiplier": 1
},
{
"__type__": "cc.CurveRange",
"mode": 0,
"constant": 0,
"multiplier": 1
},
{
"__type__": "cc.TextureAnimationModule",
"_enable": false,
"_numTilesX": 0,
"numTilesX": 0,
"_numTilesY": 0,
"numTilesY": 0,
"_mode": 0,
"animation": 0,
"frameOverTime": {
"__id__": 49
},
"startFrame": {
"__id__": 51
},
"cycleCount": 0,
"_flipU": 0,
"_flipV": 0,
"_uvChannelMask": -1,
"randomRow": false,
"rowIndex": 0
},
{
"__type__": "cc.CurveRange",
"mode": 1,
"spline": {
"__id__": 50
},
"multiplier": 1
},
{
"__type__": "cc.RealCurve",
"_times": [
0,
1
],
"_values": [
{
"__type__": "cc.RealKeyframeValue",
"interpolationMode": 2,
"tangentWeightMode": 0,
"value": 1,
"rightTangent": 0,
"rightTangentWeight": 0,
"leftTangent": 0,
"leftTangentWeight": 0,
"easingMethod": 0,
"__editorExtras__": null
},
{
"__type__": "cc.RealKeyframeValue",
"interpolationMode": 2,
"tangentWeightMode": 0,
"value": 1,
"rightTangent": 0,
"rightTangentWeight": 0,
"leftTangent": 0,
"leftTangentWeight": 0,
"easingMethod": 0,
"__editorExtras__": null
}
],
"preExtrapolation": 1,
"postExtrapolation": 1
},
{
"__type__": "cc.CurveRange",
"mode": 0,
"constant": 0,
"multiplier": 1
},
{
"__type__": "cc.NoiseModule",
"_enable": false,
"_strengthX": 10,
"_strengthY": 10,
"_strengthZ": 10,
"_noiseSpeedX": 0,
"_noiseSpeedY": 0,
"_noiseSpeedZ": 0,
"_noiseFrequency": 1,
"_remapX": 0,
"_remapY": 0,
"_remapZ": 0,
"_octaves": 1,
"_octaveMultiplier": 0.5,
"_octaveScale": 2
},
{
"__type__": "cc.TrailModule",
"_enable": false,
"mode": 0,
"lifeTime": {
"__id__": 54
},
"_minParticleDistance": 0.1,
"existWithParticles": true,
"textureMode": 0,
"widthFromParticle": true,
"widthRatio": {
"__id__": 55
},
"colorFromParticle": false,
"colorOverTrail": {
"__id__": 56
},
"colorOvertime": {
"__id__": 57
},
"_space": 0,
"_particleSystem": {
"__id__": 2
}
},
{
"__type__": "cc.CurveRange",
"mode": 0,
"constant": 1,
"multiplier": 1
},
{
"__type__": "cc.CurveRange",
"mode": 0,
"constant": 0,
"multiplier": 1
},
{
"__type__": "cc.GradientRange",
"_mode": 0,
"color": {
"__type__": "cc.Color",
"r": 255,
"g": 255,
"b": 255,
"a": 255
}
},
{
"__type__": "cc.GradientRange",
"_mode": 0,
"color": {
"__type__": "cc.Color",
"r": 255,
"g": 255,
"b": 255,
"a": 255
}
},
{
"__type__": "cc.ParticleSystemRenderer",
"_renderMode": 0,
"_velocityScale": 1,
"_lengthScale": 1,
"_mesh": null,
"_cpuMaterial": {
"__uuid__": "ea7478b0-408d-4052-b703-f0d2355e095f",
"__expectedType__": "cc.Material"
},
"_gpuMaterial": null,
"_mainTexture": {
"__uuid__": "b5b27ab1-e740-4398-b407-848fc2b2c897@6c48a",
"__expectedType__": "cc.Texture2D"
},
"_useGPU": false,
"_alignSpace": 2
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 1
},
"asset": {
"__id__": 0
},
"fileId": "65yusfkDBDE68dh4sqPVS4",
"targetOverrides": null
}
]

View File

@ -0,0 +1,13 @@
{
"ver": "1.1.43",
"importer": "prefab",
"imported": true,
"uuid": "f54a7c19-37d5-4255-9336-f6df0e956be7",
"files": [
".json"
],
"subMetas": {},
"userData": {
"syncNodeName": "Goal Particle"
}
}

View File

@ -0,0 +1,12 @@
{
"ver": "1.1.0",
"importer": "directory",
"imported": true,
"uuid": "4b7ba894-d27b-4472-9a6b-5a08f677f44f",
"files": [],
"subMetas": {},
"userData": {
"compressionType": {},
"isRemoteBundle": {}
}
}

View File

@ -0,0 +1,611 @@
[
{
"__type__": "cc.Prefab",
"_name": "Easy Obstacle 1",
"_objFlags": 0,
"_native": "",
"data": {
"__id__": 1
},
"optimizationPolicy": 0,
"persistent": false
},
{
"__type__": "cc.Node",
"_name": "Easy Obstacle 1",
"_objFlags": 0,
"__editorExtras__": {},
"_parent": null,
"_children": [
{
"__id__": 2
},
{
"__id__": 4
},
{
"__id__": 6
},
{
"__id__": 14
},
{
"__id__": 22
}
],
"_active": true,
"_components": [
{
"__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": "Waypoint L",
"_objFlags": 0,
"_parent": {
"__id__": 1
},
"_children": [],
"_active": true,
"_components": [],
"_prefab": {
"__id__": 3
},
"_lpos": {
"__type__": "cc.Vec3",
"x": -75,
"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.PrefabInfo",
"root": {
"__id__": 1
},
"asset": {
"__id__": 0
},
"fileId": "de8VqIuyVFIJIRj77PlLqI",
"instance": null,
"targetOverrides": null,
"nestedPrefabInstanceRoots": null
},
{
"__type__": "cc.Node",
"_name": "Waypoint R",
"_objFlags": 0,
"_parent": {
"__id__": 1
},
"_children": [],
"_active": true,
"_components": [],
"_prefab": {
"__id__": 5
},
"_lpos": {
"__type__": "cc.Vec3",
"x": 75,
"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.PrefabInfo",
"root": {
"__id__": 1
},
"asset": {
"__id__": 0
},
"fileId": "8ezI4xD7dPB7nmq1CTcPMa",
"instance": null,
"targetOverrides": null,
"nestedPrefabInstanceRoots": null
},
{
"__type__": "cc.Node",
"_objFlags": 0,
"_parent": {
"__id__": 1
},
"_prefab": {
"__id__": 7
},
"__editorExtras__": {}
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 6
},
"asset": {
"__uuid__": "f49ff774-8d49-42fd-81de-aeb7f53d03f5",
"__expectedType__": "cc.Prefab"
},
"fileId": "a0kYAhzm5AAa3h8r/fe/j5",
"instance": {
"__id__": 8
},
"targetOverrides": null
},
{
"__type__": "cc.PrefabInstance",
"fileId": "e633jfzBlG8YZuWVy1ieV8",
"prefabRootNode": {
"__id__": 1
},
"mountedChildren": [],
"mountedComponents": [],
"propertyOverrides": [
{
"__id__": 9
},
{
"__id__": 11
},
{
"__id__": 12
},
{
"__id__": 13
}
],
"removedComponents": []
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 10
},
"propertyPath": [
"_name"
],
"value": "Obstacle"
},
{
"__type__": "cc.TargetInfo",
"localID": [
"a0kYAhzm5AAa3h8r/fe/j5"
]
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 10
},
"propertyPath": [
"_lpos"
],
"value": {
"__type__": "cc.Vec3",
"x": 75,
"y": -80,
"z": 0
}
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 10
},
"propertyPath": [
"_lrot"
],
"value": {
"__type__": "cc.Quat",
"x": 0,
"y": 0,
"z": -0.7071067811865475,
"w": 0.7071067811865476
}
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 10
},
"propertyPath": [
"_euler"
],
"value": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": -90
}
},
{
"__type__": "cc.Node",
"_objFlags": 0,
"_parent": {
"__id__": 1
},
"_prefab": {
"__id__": 15
},
"__editorExtras__": {}
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 14
},
"asset": {
"__uuid__": "f49ff774-8d49-42fd-81de-aeb7f53d03f5",
"__expectedType__": "cc.Prefab"
},
"fileId": "a0kYAhzm5AAa3h8r/fe/j5",
"instance": {
"__id__": 16
},
"targetOverrides": null
},
{
"__type__": "cc.PrefabInstance",
"fileId": "369FaOtYlAMoSc+EHcwivl",
"prefabRootNode": {
"__id__": 1
},
"mountedChildren": [],
"mountedComponents": [],
"propertyOverrides": [
{
"__id__": 17
},
{
"__id__": 19
},
{
"__id__": 20
},
{
"__id__": 21
}
],
"removedComponents": []
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 18
},
"propertyPath": [
"_name"
],
"value": "Obstacle"
},
{
"__type__": "cc.TargetInfo",
"localID": [
"a0kYAhzm5AAa3h8r/fe/j5"
]
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 18
},
"propertyPath": [
"_lpos"
],
"value": {
"__type__": "cc.Vec3",
"x": -75,
"y": -80,
"z": 0
}
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 18
},
"propertyPath": [
"_lrot"
],
"value": {
"__type__": "cc.Quat",
"x": 0,
"y": 0,
"z": -0.7071067811865475,
"w": 0.7071067811865476
}
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 18
},
"propertyPath": [
"_euler"
],
"value": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": -90
}
},
{
"__type__": "cc.Node",
"_objFlags": 0,
"_parent": {
"__id__": 1
},
"_prefab": {
"__id__": 23
},
"__editorExtras__": {}
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 22
},
"asset": {
"__uuid__": "f49ff774-8d49-42fd-81de-aeb7f53d03f5",
"__expectedType__": "cc.Prefab"
},
"fileId": "a0kYAhzm5AAa3h8r/fe/j5",
"instance": {
"__id__": 24
},
"targetOverrides": null
},
{
"__type__": "cc.PrefabInstance",
"fileId": "c5w6eyXR5HprwDgmS1eEzX",
"prefabRootNode": {
"__id__": 1
},
"mountedChildren": [],
"mountedComponents": [],
"propertyOverrides": [
{
"__id__": 25
},
{
"__id__": 27
},
{
"__id__": 28
},
{
"__id__": 29
}
],
"removedComponents": []
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 26
},
"propertyPath": [
"_name"
],
"value": "Obstacle"
},
{
"__type__": "cc.TargetInfo",
"localID": [
"a0kYAhzm5AAa3h8r/fe/j5"
]
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 26
},
"propertyPath": [
"_lpos"
],
"value": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
}
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 26
},
"propertyPath": [
"_lrot"
],
"value": {
"__type__": "cc.Quat",
"x": 0,
"y": 0,
"z": -0.7071067811865475,
"w": 0.7071067811865476
}
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 26
},
"propertyPath": [
"_euler"
],
"value": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": -90
}
},
{
"__type__": "cc.UITransform",
"_name": "",
"_objFlags": 0,
"node": {
"__id__": 1
},
"_enabled": true,
"__prefab": {
"__id__": 31
},
"_contentSize": {
"__type__": "cc.Size",
"width": 100,
"height": 100
},
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0.5,
"y": 0.5
},
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "95+Xig555LLYmKXCqZB+hR"
},
{
"__type__": "c8e705yAJlBEKcUg/gyt/xJ",
"_name": "",
"_objFlags": 0,
"node": {
"__id__": 1
},
"_enabled": true,
"__prefab": {
"__id__": 33
},
"targets": [
{
"__id__": 6
},
{
"__id__": 14
},
{
"__id__": 22
}
],
"waypoints": [
{
"__id__": 4
},
{
"__id__": 2
}
],
"speed": 1,
"selectedObstacle": null,
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "9d9KKHmPlB6JUx7ketBzxb"
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 1
},
"asset": {
"__id__": 0
},
"fileId": "8bAB5AG0pEMal3JgTX45pf",
"instance": null,
"targetOverrides": null,
"nestedPrefabInstanceRoots": [
{
"__id__": 22
},
{
"__id__": 14
},
{
"__id__": 6
}
]
}
]

View File

@ -0,0 +1,13 @@
{
"ver": "1.1.43",
"importer": "prefab",
"imported": true,
"uuid": "f30b309a-4220-4c22-b3d5-ac450258eb77",
"files": [
".json"
],
"subMetas": {},
"userData": {
"syncNodeName": "Easy Obstacle 1"
}
}

View File

@ -0,0 +1,601 @@
[
{
"__type__": "cc.Prefab",
"_name": "Easy Obstacle 2",
"_objFlags": 0,
"_native": "",
"data": {
"__id__": 1
},
"optimizationPolicy": 0,
"persistent": false
},
{
"__type__": "cc.Node",
"_name": "Easy Obstacle 2",
"_objFlags": 0,
"__editorExtras__": {},
"_parent": null,
"_children": [
{
"__id__": 2
},
{
"__id__": 4
},
{
"__id__": 6
},
{
"__id__": 14
},
{
"__id__": 22
}
],
"_active": true,
"_components": [
{
"__id__": 30
},
{
"__id__": 32
}
],
"_prefab": {
"__id__": 34
},
"_lpos": {
"__type__": "cc.Vec3",
"x": 0,
"y": 200,
"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": "Waypoint L",
"_objFlags": 0,
"_parent": {
"__id__": 1
},
"_children": [],
"_active": true,
"_components": [],
"_prefab": {
"__id__": 3
},
"_lpos": {
"__type__": "cc.Vec3",
"x": -60,
"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.PrefabInfo",
"root": {
"__id__": 1
},
"asset": {
"__id__": 0
},
"fileId": "de8VqIuyVFIJIRj77PlLqI",
"instance": null,
"targetOverrides": null,
"nestedPrefabInstanceRoots": null
},
{
"__type__": "cc.Node",
"_name": "Waypoint R",
"_objFlags": 0,
"_parent": {
"__id__": 1
},
"_children": [],
"_active": true,
"_components": [],
"_prefab": {
"__id__": 5
},
"_lpos": {
"__type__": "cc.Vec3",
"x": 60,
"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.PrefabInfo",
"root": {
"__id__": 1
},
"asset": {
"__id__": 0
},
"fileId": "8ezI4xD7dPB7nmq1CTcPMa",
"instance": null,
"targetOverrides": null,
"nestedPrefabInstanceRoots": null
},
{
"__type__": "cc.Node",
"_objFlags": 0,
"_parent": {
"__id__": 1
},
"_prefab": {
"__id__": 7
},
"__editorExtras__": {}
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 6
},
"asset": {
"__uuid__": "f49ff774-8d49-42fd-81de-aeb7f53d03f5",
"__expectedType__": "cc.Prefab"
},
"fileId": "a0kYAhzm5AAa3h8r/fe/j5",
"instance": {
"__id__": 8
},
"targetOverrides": null
},
{
"__type__": "cc.PrefabInstance",
"fileId": "d5MUuJhTtHPqoYxWAJkdvs",
"prefabRootNode": {
"__id__": 1
},
"mountedChildren": [],
"mountedComponents": [],
"propertyOverrides": [
{
"__id__": 9
},
{
"__id__": 11
},
{
"__id__": 12
},
{
"__id__": 13
}
],
"removedComponents": []
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 10
},
"propertyPath": [
"_name"
],
"value": "Obstacle"
},
{
"__type__": "cc.TargetInfo",
"localID": [
"a0kYAhzm5AAa3h8r/fe/j5"
]
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 10
},
"propertyPath": [
"_lpos"
],
"value": {
"__type__": "cc.Vec3",
"x": 60,
"y": -90,
"z": 0
}
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 10
},
"propertyPath": [
"_lrot"
],
"value": {
"__type__": "cc.Quat",
"x": 0,
"y": 0,
"z": -0.7071067811865475,
"w": 0.7071067811865476
}
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 10
},
"propertyPath": [
"_euler"
],
"value": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": -90
}
},
{
"__type__": "cc.Node",
"_objFlags": 0,
"_parent": {
"__id__": 1
},
"_prefab": {
"__id__": 15
},
"__editorExtras__": {}
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 14
},
"asset": {
"__uuid__": "f49ff774-8d49-42fd-81de-aeb7f53d03f5",
"__expectedType__": "cc.Prefab"
},
"fileId": "a0kYAhzm5AAa3h8r/fe/j5",
"instance": {
"__id__": 16
},
"targetOverrides": null
},
{
"__type__": "cc.PrefabInstance",
"fileId": "e1NT6f+hhFro0n3pDSh9q8",
"prefabRootNode": {
"__id__": 1
},
"mountedChildren": [],
"mountedComponents": [],
"propertyOverrides": [
{
"__id__": 17
},
{
"__id__": 19
},
{
"__id__": 20
},
{
"__id__": 21
}
],
"removedComponents": []
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 18
},
"propertyPath": [
"_name"
],
"value": "Obstacle"
},
{
"__type__": "cc.TargetInfo",
"localID": [
"a0kYAhzm5AAa3h8r/fe/j5"
]
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 18
},
"propertyPath": [
"_lpos"
],
"value": {
"__type__": "cc.Vec3",
"x": 60,
"y": -170,
"z": 0
}
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 18
},
"propertyPath": [
"_lrot"
],
"value": {
"__type__": "cc.Quat",
"x": 0,
"y": 0,
"z": -0.7071067811865475,
"w": 0.7071067811865476
}
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 18
},
"propertyPath": [
"_euler"
],
"value": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": -90
}
},
{
"__type__": "cc.Node",
"_objFlags": 0,
"_parent": {
"__id__": 1
},
"_prefab": {
"__id__": 23
},
"__editorExtras__": {}
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 22
},
"asset": {
"__uuid__": "f49ff774-8d49-42fd-81de-aeb7f53d03f5",
"__expectedType__": "cc.Prefab"
},
"fileId": "a0kYAhzm5AAa3h8r/fe/j5",
"instance": {
"__id__": 24
},
"targetOverrides": null
},
{
"__type__": "cc.PrefabInstance",
"fileId": "80I6iQCNhH2LFLQwLhSOR/",
"prefabRootNode": {
"__id__": 1
},
"mountedChildren": [],
"mountedComponents": [],
"propertyOverrides": [
{
"__id__": 25
},
{
"__id__": 27
},
{
"__id__": 28
},
{
"__id__": 29
}
],
"removedComponents": []
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 26
},
"propertyPath": [
"_name"
],
"value": "Obstacle"
},
{
"__type__": "cc.TargetInfo",
"localID": [
"a0kYAhzm5AAa3h8r/fe/j5"
]
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 26
},
"propertyPath": [
"_lpos"
],
"value": {
"__type__": "cc.Vec3",
"x": 60,
"y": -250,
"z": 0
}
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 26
},
"propertyPath": [
"_lrot"
],
"value": {
"__type__": "cc.Quat",
"x": 0,
"y": 0,
"z": -0.7071067811865475,
"w": 0.7071067811865476
}
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 26
},
"propertyPath": [
"_euler"
],
"value": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": -90
}
},
{
"__type__": "cc.UITransform",
"_name": "",
"_objFlags": 0,
"node": {
"__id__": 1
},
"_enabled": true,
"__prefab": {
"__id__": 31
},
"_contentSize": {
"__type__": "cc.Size",
"width": 100,
"height": 100
},
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0.5,
"y": 0.5
},
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "95+Xig555LLYmKXCqZB+hR"
},
{
"__type__": "c8e705yAJlBEKcUg/gyt/xJ",
"_name": "",
"_objFlags": 0,
"node": {
"__id__": 1
},
"_enabled": true,
"__prefab": {
"__id__": 33
},
"targets": [],
"waypoints": [
{
"__id__": 4
},
{
"__id__": 2
}
],
"speed": 1,
"selectedObstacle": null,
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "9d9KKHmPlB6JUx7ketBzxb"
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 1
},
"asset": {
"__id__": 0
},
"fileId": "8bAB5AG0pEMal3JgTX45pf",
"instance": null,
"targetOverrides": null,
"nestedPrefabInstanceRoots": [
{
"__id__": 22
},
{
"__id__": 14
},
{
"__id__": 6
}
]
}
]

View File

@ -0,0 +1,13 @@
{
"ver": "1.1.43",
"importer": "prefab",
"imported": true,
"uuid": "36df1e3d-a2ea-4b8d-8a5c-fc97275927ed",
"files": [
".json"
],
"subMetas": {},
"userData": {
"syncNodeName": "Easy Obstacle 2"
}
}

View File

@ -0,0 +1,605 @@
[
{
"__type__": "cc.Prefab",
"_name": "Easy Obstacle 3",
"_objFlags": 0,
"_native": "",
"data": {
"__id__": 1
},
"optimizationPolicy": 0,
"persistent": false
},
{
"__type__": "cc.Node",
"_name": "Easy Obstacle 3",
"_objFlags": 0,
"__editorExtras__": {},
"_parent": null,
"_children": [
{
"__id__": 2
},
{
"__id__": 4
},
{
"__id__": 6
},
{
"__id__": 14
},
{
"__id__": 22
}
],
"_active": true,
"_components": [
{
"__id__": 30
},
{
"__id__": 32
}
],
"_prefab": {
"__id__": 34
},
"_lpos": {
"__type__": "cc.Vec3",
"x": 0,
"y": 200,
"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": "Waypoint L",
"_objFlags": 0,
"_parent": {
"__id__": 1
},
"_children": [],
"_active": true,
"_components": [],
"_prefab": {
"__id__": 3
},
"_lpos": {
"__type__": "cc.Vec3",
"x": -60,
"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.PrefabInfo",
"root": {
"__id__": 1
},
"asset": {
"__id__": 0
},
"fileId": "de8VqIuyVFIJIRj77PlLqI",
"instance": null,
"targetOverrides": null,
"nestedPrefabInstanceRoots": null
},
{
"__type__": "cc.Node",
"_name": "Waypoint R",
"_objFlags": 0,
"_parent": {
"__id__": 1
},
"_children": [],
"_active": true,
"_components": [],
"_prefab": {
"__id__": 5
},
"_lpos": {
"__type__": "cc.Vec3",
"x": 60,
"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.PrefabInfo",
"root": {
"__id__": 1
},
"asset": {
"__id__": 0
},
"fileId": "8ezI4xD7dPB7nmq1CTcPMa",
"instance": null,
"targetOverrides": null,
"nestedPrefabInstanceRoots": null
},
{
"__type__": "cc.Node",
"_objFlags": 0,
"_parent": {
"__id__": 1
},
"_prefab": {
"__id__": 7
},
"__editorExtras__": {}
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 6
},
"asset": {
"__uuid__": "f49ff774-8d49-42fd-81de-aeb7f53d03f5",
"__expectedType__": "cc.Prefab"
},
"fileId": "a0kYAhzm5AAa3h8r/fe/j5",
"instance": {
"__id__": 8
},
"targetOverrides": null
},
{
"__type__": "cc.PrefabInstance",
"fileId": "d5MUuJhTtHPqoYxWAJkdvs",
"prefabRootNode": {
"__id__": 1
},
"mountedChildren": [],
"mountedComponents": [],
"propertyOverrides": [
{
"__id__": 9
},
{
"__id__": 11
},
{
"__id__": 12
},
{
"__id__": 13
}
],
"removedComponents": []
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 10
},
"propertyPath": [
"_name"
],
"value": "Obstacle"
},
{
"__type__": "cc.TargetInfo",
"localID": [
"a0kYAhzm5AAa3h8r/fe/j5"
]
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 10
},
"propertyPath": [
"_lpos"
],
"value": {
"__type__": "cc.Vec3",
"x": -120,
"y": 120,
"z": 0
}
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 10
},
"propertyPath": [
"_lrot"
],
"value": {
"__type__": "cc.Quat",
"x": 0,
"y": 0,
"z": -0.7071067811865475,
"w": 0.7071067811865476
}
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 10
},
"propertyPath": [
"_euler"
],
"value": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": -90
}
},
{
"__type__": "cc.Node",
"_objFlags": 0,
"_parent": {
"__id__": 1
},
"_prefab": {
"__id__": 15
},
"__editorExtras__": {}
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 14
},
"asset": {
"__uuid__": "f49ff774-8d49-42fd-81de-aeb7f53d03f5",
"__expectedType__": "cc.Prefab"
},
"fileId": "a0kYAhzm5AAa3h8r/fe/j5",
"instance": {
"__id__": 16
},
"targetOverrides": null
},
{
"__type__": "cc.PrefabInstance",
"fileId": "e1NT6f+hhFro0n3pDSh9q8",
"prefabRootNode": {
"__id__": 1
},
"mountedChildren": [],
"mountedComponents": [],
"propertyOverrides": [
{
"__id__": 17
},
{
"__id__": 19
},
{
"__id__": 20
},
{
"__id__": 21
}
],
"removedComponents": []
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 18
},
"propertyPath": [
"_name"
],
"value": "Obstacle"
},
{
"__type__": "cc.TargetInfo",
"localID": [
"a0kYAhzm5AAa3h8r/fe/j5"
]
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 18
},
"propertyPath": [
"_lpos"
],
"value": {
"__type__": "cc.Vec3",
"x": -60,
"y": -20,
"z": 0
}
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 18
},
"propertyPath": [
"_lrot"
],
"value": {
"__type__": "cc.Quat",
"x": 0,
"y": 0,
"z": -0.7071067811865475,
"w": 0.7071067811865476
}
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 18
},
"propertyPath": [
"_euler"
],
"value": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": -90
}
},
{
"__type__": "cc.Node",
"_objFlags": 0,
"_parent": {
"__id__": 1
},
"_prefab": {
"__id__": 23
},
"__editorExtras__": {}
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 22
},
"asset": {
"__uuid__": "f49ff774-8d49-42fd-81de-aeb7f53d03f5",
"__expectedType__": "cc.Prefab"
},
"fileId": "a0kYAhzm5AAa3h8r/fe/j5",
"instance": {
"__id__": 24
},
"targetOverrides": null
},
{
"__type__": "cc.PrefabInstance",
"fileId": "80I6iQCNhH2LFLQwLhSOR/",
"prefabRootNode": {
"__id__": 1
},
"mountedChildren": [],
"mountedComponents": [],
"propertyOverrides": [
{
"__id__": 25
},
{
"__id__": 27
},
{
"__id__": 28
},
{
"__id__": 29
}
],
"removedComponents": []
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 26
},
"propertyPath": [
"_name"
],
"value": "Obstacle"
},
{
"__type__": "cc.TargetInfo",
"localID": [
"a0kYAhzm5AAa3h8r/fe/j5"
]
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 26
},
"propertyPath": [
"_lpos"
],
"value": {
"__type__": "cc.Vec3",
"x": -50,
"y": -150,
"z": 0
}
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 26
},
"propertyPath": [
"_lrot"
],
"value": {
"__type__": "cc.Quat",
"x": 0,
"y": 0,
"z": -0.7071067811865475,
"w": 0.7071067811865476
}
},
{
"__type__": "CCPropertyOverrideInfo",
"targetInfo": {
"__id__": 26
},
"propertyPath": [
"_euler"
],
"value": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": -90
}
},
{
"__type__": "cc.UITransform",
"_name": "",
"_objFlags": 0,
"node": {
"__id__": 1
},
"_enabled": true,
"__prefab": {
"__id__": 31
},
"_contentSize": {
"__type__": "cc.Size",
"width": 100,
"height": 100
},
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0.5,
"y": 0.5
},
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "95+Xig555LLYmKXCqZB+hR"
},
{
"__type__": "c8e705yAJlBEKcUg/gyt/xJ",
"_name": "",
"_objFlags": 0,
"node": {
"__id__": 1
},
"_enabled": true,
"__prefab": {
"__id__": 33
},
"targets": [
{
"__id__": 14
}
],
"waypoints": [
{
"__id__": 4
},
{
"__id__": 2
}
],
"speed": 1,
"selectedObstacle": null,
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "9d9KKHmPlB6JUx7ketBzxb"
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 1
},
"asset": {
"__id__": 0
},
"fileId": "8bAB5AG0pEMal3JgTX45pf",
"instance": null,
"targetOverrides": null,
"nestedPrefabInstanceRoots": [
{
"__id__": 22
},
{
"__id__": 14
},
{
"__id__": 6
}
]
}
]

View File

@ -0,0 +1,13 @@
{
"ver": "1.1.43",
"importer": "prefab",
"imported": true,
"uuid": "1f197242-be22-45c5-8050-73114637003e",
"files": [
".json"
],
"subMetas": {},
"userData": {
"syncNodeName": "Easy Obstacle 3"
}
}

View File

@ -0,0 +1,216 @@
[
{
"__type__": "cc.Prefab",
"_name": "Obstacle",
"_objFlags": 0,
"_native": "",
"data": {
"__id__": 1
},
"optimizationPolicy": 0,
"persistent": false
},
{
"__type__": "cc.Node",
"_name": "Obstacle",
"_objFlags": 0,
"__editorExtras__": {},
"_parent": null,
"_children": [],
"_active": true,
"_components": [
{
"__id__": 2
},
{
"__id__": 4
},
{
"__id__": 6
},
{
"__id__": 8
}
],
"_prefab": {
"__id__": 10
},
"_lpos": {
"__type__": "cc.Vec3",
"x": -175,
"y": 380,
"z": 0
},
"_lrot": {
"__type__": "cc.Quat",
"x": 0,
"y": 0,
"z": -0.7071067811865475,
"w": 0.7071067811865476
},
"_lscale": {
"__type__": "cc.Vec3",
"x": 1,
"y": 1,
"z": 1
},
"_mobility": 0,
"_layer": 33554432,
"_euler": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": -90
},
"_id": ""
},
{
"__type__": "cc.UITransform",
"_name": "",
"_objFlags": 0,
"node": {
"__id__": 1
},
"_enabled": true,
"__prefab": {
"__id__": 3
},
"_contentSize": {
"__type__": "cc.Size",
"width": 21,
"height": 31
},
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0.5,
"y": 0.5
},
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "45QTNNbC9OUYDRRzKHu6WV"
},
{
"__type__": "cc.Sprite",
"_name": "",
"_objFlags": 0,
"node": {
"__id__": 1
},
"_enabled": true,
"__prefab": {
"__id__": 5
},
"_customMaterial": null,
"_srcBlendFactor": 2,
"_dstBlendFactor": 4,
"_color": {
"__type__": "cc.Color",
"r": 255,
"g": 255,
"b": 255,
"a": 255
},
"_spriteFrame": {
"__uuid__": "8bc52c2c-7db5-4951-9bf1-a38f1914bf0e@f9941",
"__expectedType__": "cc.SpriteFrame"
},
"_type": 0,
"_fillType": 0,
"_sizeMode": 1,
"_fillCenter": {
"__type__": "cc.Vec2",
"x": 0,
"y": 0
},
"_fillStart": 0,
"_fillRange": 0,
"_isTrimmedMode": true,
"_useGrayscale": false,
"_atlas": null,
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "08nypWEwZI2pSnaYoRCRKW"
},
{
"__type__": "cc.BoxCollider2D",
"_name": "",
"_objFlags": 0,
"node": {
"__id__": 1
},
"_enabled": true,
"__prefab": {
"__id__": 7
},
"tag": 3,
"_group": 1,
"_density": 1,
"_sensor": false,
"_friction": 0.2,
"_restitution": 0,
"_offset": {
"__type__": "cc.Vec2",
"x": 0,
"y": 0
},
"_size": {
"__type__": "cc.Size",
"width": 20,
"height": 32
},
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "7egu3Zm5tHjb52E6fmax1G"
},
{
"__type__": "cc.RigidBody2D",
"_name": "",
"_objFlags": 0,
"node": {
"__id__": 1
},
"_enabled": true,
"__prefab": {
"__id__": 9
},
"enabledContactListener": false,
"bullet": false,
"awakeOnLoad": false,
"_group": 1,
"_type": 0,
"_allowSleep": true,
"_gravityScale": 0,
"_linearDamping": 0,
"_angularDamping": 0,
"_linearVelocity": {
"__type__": "cc.Vec2",
"x": 0,
"y": 0
},
"_angularVelocity": 0,
"_fixedRotation": true,
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "39ENf+Cn1O95ZEF7CNhWT+"
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 1
},
"asset": {
"__id__": 0
},
"fileId": "a0kYAhzm5AAa3h8r/fe/j5",
"instance": null,
"targetOverrides": null
}
]

View File

@ -0,0 +1,13 @@
{
"ver": "1.1.43",
"importer": "prefab",
"imported": true,
"uuid": "f49ff774-8d49-42fd-81de-aeb7f53d03f5",
"files": [
".json"
],
"subMetas": {},
"userData": {
"syncNodeName": "Obstacle"
}
}

12
assets/Scenes.meta Normal file
View File

@ -0,0 +1,12 @@
{
"ver": "1.1.0",
"importer": "directory",
"imported": true,
"uuid": "0eceae98-c740-447e-a39b-70f6d695ceb6",
"files": [],
"subMetas": {},
"userData": {
"compressionType": {},
"isRemoteBundle": {}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,11 @@
{
"ver": "1.1.43",
"importer": "scene",
"imported": true,
"uuid": "3ce41ed6-6584-40b1-94f9-8464439aa57d",
"files": [
".json"
],
"subMetas": {},
"userData": {}
}

12961
assets/Scenes/TestScene.scene Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,11 @@
{
"ver": "1.1.43",
"importer": "scene",
"imported": true,
"uuid": "4c16bf85-f009-4abe-b793-f3a1924392e4",
"files": [
".json"
],
"subMetas": {},
"userData": {}
}

12
assets/Scripts.meta Normal file
View File

@ -0,0 +1,12 @@
{
"ver": "1.1.0",
"importer": "directory",
"imported": true,
"uuid": "8008f10e-fa35-4d25-84e2-e3f6ab2b470f",
"files": [],
"subMetas": {},
"userData": {
"compressionType": {},
"isRemoteBundle": {}
}
}

View File

@ -0,0 +1,190 @@
import { _decorator } from 'cc';
import * as CryptoES from "crypto-es";
import { GameplayController } from './GameplayController';
export let CryptoESDefault = CryptoES.default;
const { ccclass, property } = _decorator;
@ccclass('BEConnector')
export default class BEConnector {
public static _instance: BEConnector = null;
private token: string;
private skinId: string;
private tournamentId: string;
private key: string;
private deviceInfo: string;
// Ticket infors
public numberTicket: number;
public maxScore: number;
private mileStone: string;
private gameURL: string = "";
public static get instance() {
if (null == this._instance) {
this._instance = new BEConnector();
}
return this._instance;
}
constructor() {
this.getGameData();
}
public getGameData() {
let url = new URLSearchParams(window.location.search);
this.token = url.get('token')
this.skinId = url.get('skinId')
this.tournamentId = url.get('tournamentId')
this.deviceInfo = url.get('deviceInfo')
this.numberTicket = parseInt(url.get('numberTicket'));
this.maxScore = parseInt(url.get('maxScore'));
this.mileStone = url.get("mileStone");
this.gameURL = ENV_CONFIG[url.get('env')];
}
public async authenticate() {
await fetch(`${this.gameURL}/promotions/authenticate-tournament?token=${this.token}&tournamentId=${this.tournamentId}&skinId=${this.skinId}&deviceInfo=${this.deviceInfo}`)
.then((response) => {
if (response.ok) {
return response.json();
}
})
.then(data => {
if (data.ResultCode == 1) {
this.key = data.Data.Key;
console.log("authen success", this.key);
}
else {
throw new Error("");
}
})
.catch(err => console.log("authen failed"));
}
public ticketMinus(type: "auth" | "revive") {
let numberTicket = type === "auth" ? 1 : this.getTicketCanBeMinus();
let dataEncrypted: string = this.getDataEncrypted({ type: type, total: numberTicket });
fetch(`${this.gameURL}/promotions/ticket-minus/${this.tournamentId}/${this.skinId}?cocos=1`, {
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'x-access-refactor-token': this.token,
},
method: "POST",
body: JSON.stringify({ data: dataEncrypted })
})
.then(() => {
this.numberTicket -= numberTicket;
})
}
public calculatingTicketToContinue(scoreRange: object, yourScore: number) {
let closestMilestone: number = 0;
for (const milestone in scoreRange) {
if (parseInt(milestone) <= yourScore) {
closestMilestone = scoreRange[milestone];
}
}
if (!closestMilestone) {
const minValue = Math.min(...Object.values(scoreRange));
closestMilestone = minValue;
}
return closestMilestone
}
public async checkGameScoreTicket() {
let totalScore: number = GameplayController.Instance().score;
let dataEncrypted: string = this.getDataEncrypted({ score: totalScore, ticket: this.getTicketCanBeMinus() })
await fetch(`${this.gameURL}/promotions/check-game-score-ticket/${this.tournamentId}/${this.skinId}?cocos=1`, {
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'x-access-refactor-token': this.token,
},
method: "POST",
body: JSON.stringify({ data: dataEncrypted })
})
}
public postMessage() {
let totalScore: number = GameplayController.Instance().score;
// window.parent.postMessage(
// JSON.stringify({
// error: false,
// message: "Hello World",
// score: totalScore,
// type: "paypal_modal",
// }),
// "*"
// );
setTimeout(() => {
BEConnector.instance.numberTicket += 5
GameplayController.Instance().OnRevive();
}, 2000);
}
public postScoreToServer(score: number) {
let dataEncrypted: string = this.getDataEncrypted({ Score: score, TournamentId: this.tournamentId, SkinId: this.skinId });
fetch(`${this.gameURL}/promotions/store-score-tournament?tournamentId=${this.tournamentId}&skinId=${this.skinId}&cocos=1`, {
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'x-access-refactor-token': this.token,
},
method: "POST",
body: JSON.stringify({ data: dataEncrypted })
})
.catch(err => console.log(err));
console.log("send score to server: " + score);
window.parent.postMessage(
JSON.stringify({
error: false,
message: "Hello World",
score: score,
type: "game_tournament",
}),
"*"
);
}
private getDataEncrypted(data: any): string {
return CryptoESDefault.AES.encrypt(JSON.stringify(data), this.key, {
iv: CryptoESDefault.enc.Utf8.parse('16'),
mode: CryptoESDefault.mode.CBC,
padding: CryptoESDefault.pad.Pkcs7
}).toString();
}
public getTicketCanBeMinus() {
let mileStone = JSON.parse(this.mileStone);
let currentScore = GameplayController.Instance().score;
let total = this.calculatingTicketToContinue(mileStone, currentScore);
return total;
}
public canRelive() {
return this.numberTicket > this.getTicketCanBeMinus();
}
}
const ENV_CONFIG = {
"development": "http://192.168.1.144:3009/api",
"staging": "https://api.play4promote.com/api",
"production": "https://api.play4promo.com/api"
}

View File

@ -0,0 +1,9 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "28d9c88b-9c32-4adf-96e3-00872db954da",
"files": [],
"subMetas": {},
"userData": {}
}

66
assets/Scripts/Ball.ts Normal file
View File

@ -0,0 +1,66 @@
import { _decorator, CCFloat, Collider, Collider2D, Component, Contact2DType, director, EventTarget, IPhysics2DContact, ParticleSystem, RigidBody2D, Vec2, } from 'cc';
import { GameplayController } from './GameplayController';
import { SoundManager } from './SoundManager';
const { ccclass, property } = _decorator;
@ccclass('Ball')
export class Ball extends Component {
@property({ visible: true, type: CCFloat })
public maxSpeed: number;
@property({ visible: true, type: RigidBody2D })
public rigidbody: RigidBody2D;
@property(Collider2D)
public collider: Collider2D;
public isActive: boolean;
public eventHitObstacle = new EventTarget();
public eventGoal = new EventTarget();
protected start(): void {
if (this.getComponent(Collider2D)) {
this.collider.on(Contact2DType.BEGIN_CONTACT, this.onBeginContact, this);
this.collider.on(Contact2DType.END_CONTACT, this.onEndContact, this);
}
}
protected update(dt: number): void {
// if (this.rigidbody.linearVelocity.length() > this.maxSpeed) {
// //this.rigidbody.linearVelocity.set(this.rigidbody.linearVelocity.normalize().multiplyScalar(this.maxSpeed));
// this.rigidbody.applyLinearImpulseToCenter(this.rigidbody.linearVelocity.normalize().multiplyScalar(this.maxSpeed), true);
// }
}
private onBeginContact(selfCollider: Collider2D, otherCollider: Collider2D, contact: IPhysics2DContact | null) {
// Hit boundary
if (otherCollider.tag == 1) {
this.node.active = false;
// GameplayController.Instance().SpawnBallInTime(1);
GameplayController.Instance().LoseStreak();
SoundManager.Instance().PlayOneShot(SoundManager.Instance().hitGround);
return;
}
// Hit goal
if (otherCollider.tag == 2) {
this.node.active = false;
GameplayController.Instance().AddScore(1);
// GameplayController.Instance().SpawnBallInTime(1);
SoundManager.Instance().PlayOneShot(SoundManager.Instance().goal);
this.eventGoal.emit("Goal");
return;
}
// Hit obstacle
if (otherCollider.tag == 3) {
this.eventHitObstacle.emit("HitObstacle", otherCollider.node);
return;
}
SoundManager.Instance().PlayOneShot(SoundManager.Instance().hitPlayer);
}
private onEndContact(selfCollider: Collider2D, otherCollider: Collider2D, contact: IPhysics2DContact | null) {
// console.log(otherCollider.tag, otherCollider.node.name);
}
}

View File

@ -0,0 +1,9 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "cad12704-b9b0-485d-bd8d-bef0a89f919e",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@ -0,0 +1,148 @@
import { _decorator, bezier, Button, CCInteger, Component, EventTarget, Label, log, Node, EventTouch } from 'cc';
import { GameplayController } from './GameplayController';
import BEConnector from './BEConnector';
const { ccclass, property } = _decorator;
export enum PanelState {
NotShowing,
CompareScore,
Continue,
ShowResult
}
@ccclass('EndGameUIController')
export class EndGameUIController extends Component {
@property(CCInteger)
private countdownTime: number = 15;
private currentCD: number = 15;
private isContinuable: boolean = true;
private isEndGameByTime: boolean = false;
private currentState: PanelState = PanelState.NotShowing;
// Texts
@property(Label)
private yourScoreTxt: Label = null;
@property(Label)
private topScoreTxt: Label = null;
@property(Label)
private continueTxt: Label = null;
@property(Label)
private countdownToReplayTxt: Label = null;
// Buttons
@property(Button)
private yesBtn: Label = null;
@property(Button)
private noBtn: Label = null;
// Panel
@property(Node)
private compareScorePnl: Node = null;
@property(Node)
private continuePnl: Node = null;
@property(Node)
private finalResultPnl: Node = null;
private eventRevive = new EventTarget();
//#region Cocos methods
protected onEnable(): void {
this.Setup();
this.currentCD = this.countdownTime;
}
protected update(dt: number): void {
if (this.isEndGameByTime == true) return;
this.currentCD -= dt;
this.countdownToReplayTxt.string = Math.round(this.currentCD).toString();
if (this.currentCD <= 0 && !this.isEndGameByTime) {
this.currentCD = 0;
this.ChangeState(PanelState.ShowResult);
this.isEndGameByTime = true;
}
}
//#endregion
private Setup(): void {
if (this.isContinuable)
this.ChangeState(PanelState.CompareScore);
else
this.ChangeState(PanelState.ShowResult);
}
private ChangeState(newState: PanelState): void {
if (this.currentState == newState) return;
this.currentState = newState;
switch (this.currentState) {
case PanelState.CompareScore:
this.TurnOffAllPanels(this.compareScorePnl);
var totalScore = GameplayController.Instance().score + GameplayController.Instance().highestStreak * 2;
this.yourScoreTxt.string = "Your score: " + totalScore;
/// Todo: set top score here
break;
case PanelState.Continue:
this.TurnOffAllPanels(this.continuePnl);
var ticket = BEConnector.instance.numberTicket;
if (ticket >= BEConnector.instance.getTicketCanBeMinus()) {
this.continueTxt.string = "To continue playing, you will be deducted " + ticket +
" Extras. Do you want to proceed?";
}
else {
this.continueTxt.string =
"You don't have enough Extras to continue playing. Would you like to buy more tickets?";
}
break;
case PanelState.ShowResult:
this.yesBtn.node.active = false;
this.noBtn.node.active = false;
this.countdownToReplayTxt.node.active = false;
this.TurnOffAllPanels(this.finalResultPnl);
BEConnector.instance.postScoreToServer(GameplayController.Instance().score);
break;
}
}
private TurnOffAllPanels(activePnl: Node): void {
this.compareScorePnl.active = false;
this.continuePnl.active = false;
this.finalResultPnl.active = false;
if (activePnl != null)
activePnl.active = true;
}
public YesNoClick(e: EventTouch, yesNoString: string): void {
var isYesClick = true;
if (yesNoString == "true")
isYesClick = true;
else isYesClick = false;
switch (this.currentState) {
case PanelState.CompareScore:
if (isYesClick)
this.ChangeState(PanelState.Continue);
else
this.ChangeState(PanelState.ShowResult);
break;
case PanelState.Continue:
if (isYesClick) {
var ticket = BEConnector.instance.getTicketCanBeMinus();
if (BEConnector.instance.numberTicket >= ticket) {
GameplayController.Instance().OnRevive();
BEConnector.instance.ticketMinus("revive");
this.isContinuable = false;
}
else
BEConnector.instance.postMessage();
}
else {
this.ChangeState(PanelState.CompareScore);
}
break;
}
}
}

View File

@ -0,0 +1,9 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "27b91595-c9a1-43da-9109-716b0dd7b6ee",
"files": [],
"subMetas": {},
"userData": {}
}

10
assets/Scripts/Enums.ts Normal file
View File

@ -0,0 +1,10 @@
export enum EventType {
MainMenu = "MainMenu",
StartGame = "StartGame",
PlayGame = "Playgame",
UpdateScore = "SendScore",
UpdateStreak = "UpdateSteak",
UpdateHighestStreak = "UpdateHighestStreak",
UpdateBall = "UpdateBall",
EndGame = "EndGame"
}

View File

@ -0,0 +1,9 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "ed2d5377-8be4-48b3-87bd-af395745c81d",
"files": [],
"subMetas": {},
"userData": {}
}

21
assets/Scripts/Flipper.ts Normal file
View File

@ -0,0 +1,21 @@
import { _decorator, Component, HingeJoint2D, Node, input, Input, EventMouse, CCFloat } from 'cc';
const { ccclass, property } = _decorator;
@ccclass('Flipper')
export class Flipper extends Component {
@property({ visible: true, type: HingeJoint2D })
public _hingeJoint: HingeJoint2D;
@property({ visible: true, type: CCFloat })
public _motorSpeedActive: number;
@property({ visible: true, type: CCFloat })
public _motorSpeedDeActive: number;
public ActiveFlipper(): void {
this._hingeJoint.motorSpeed = this._motorSpeedActive;
}
public DeActiveFlipper(): void {
this._hingeJoint.motorSpeed = this._motorSpeedDeActive;
}
}

View File

@ -0,0 +1,9 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "c3f2b353-5fa6-4517-93b8-9ec8c8ff0006",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@ -0,0 +1,74 @@
import { _decorator, Component, EventKeyboard, EventMouse, EventTouch, Input, input, KeyCode, log, Node, view } from 'cc';
import { Flipper } from './Flipper';
const { ccclass, property } = _decorator;
@ccclass('FlipperController')
export class FlipperController extends Component {
@property(Flipper)
public lFlipper: Flipper;
@property(Flipper)
public rFlipper: Flipper;
protected onLoad(): void {
// Mouse input
// input.on(Input.EventType.MOUSE_DOWN, this.HandleFlipperActive, this);
// input.on(Input.EventType.MOUSE_UP, this.HandleFlipperDeActive, this);
// Keyboard
input.on(Input.EventType.KEY_DOWN, this.OnKeyDown, this);
input.on(Input.EventType.KEY_UP, this.OnKeyUp, this);
// Touch
input.on(Input.EventType.TOUCH_START, this.HandleFlipperActiveTouch, this);
input.on(Input.EventType.TOUCH_END, this.HandleFlipperDeActiveTouch, this);
}
//#region Handle mouse/touch input
private HandleFlipperActive(params: EventMouse): void {
if (params.getLocationX() > screen.width / 2)
this.rFlipper.ActiveFlipper();
else this.lFlipper.ActiveFlipper();
}
private HandleFlipperDeActive(params: EventMouse): void {
this.rFlipper.DeActiveFlipper();
this.lFlipper.DeActiveFlipper();
}
private HandleFlipperActiveTouch(params: EventTouch): void {
if (params.getLocationX() > view.getFrameSize().x) {
console.log("right");
this.rFlipper.ActiveFlipper();
}
else {
console.log("left");
this.lFlipper.ActiveFlipper();
}
}
private HandleFlipperDeActiveTouch(params: EventTouch): void {
this.rFlipper.DeActiveFlipper();
this.lFlipper.DeActiveFlipper();
}
//#endregion
private OnKeyDown(event: EventKeyboard) {
switch (event.keyCode) {
case KeyCode.KEY_A:
this.lFlipper.ActiveFlipper();
break;
case KeyCode.KEY_D:
this.rFlipper.ActiveFlipper();
break;
}
}
private OnKeyUp(event: EventKeyboard) {
switch (event.keyCode) {
case KeyCode.KEY_A:
this.lFlipper.DeActiveFlipper();
break;
case KeyCode.KEY_D:
this.rFlipper.DeActiveFlipper();
break;
}
}
}

View File

@ -0,0 +1,9 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "e458ed52-5d28-471b-aae5-0916cb2cc344",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@ -0,0 +1,226 @@
import { _decorator, CCInteger, Component, Enum, EventTarget, instantiate, Node, ParticleSystem2D, Prefab, randomRange, randomRangeInt, RigidBody2D, Vec2 } from 'cc';
import { Ball } from './Ball';
import { EventType } from './Enums';
import { SoundManager } from './SoundManager';
import BEConnector from './BEConnector';
import { UIController } from './UIController';
import { LevelController } from './LevelController';
const { ccclass, property } = _decorator;
window.addEventListener("message", (data) => {
const { data: res } = data
const objectRes = JSON.parse(res)
const { type, value } = objectRes
if (type === "newTicket") {
BEConnector.instance.numberTicket += value
GameplayController.Instance().OnRevive();
}
})
export enum GameState {
MainMenu,
StartGame,
PlayGame,
EndGame
}
@ccclass('GameplayController')
export class GameplayController extends Component {
//#region Singleton
private static instance: GameplayController;
public static Instance(): GameplayController {
if (!GameplayController.instance) {
GameplayController.instance = new Node().addComponent(GameplayController);
}
return GameplayController.instance;
}
protected onLoad(): void {
GameplayController.instance = this;
}
//#endregion
//#region Properties
@property(Prefab)
private ballPrefab: Prefab;
@property([Vec2])
private startPositions: Vec2[] = [];
@property({ readonly: true, type: Node })
private controllingBall: Node = null;
@property(UIController)
public uiController: UIController = null;
@property(LevelController)
private levelController: LevelController = null;
@property({ readonly: true, type: CCInteger })
public score: number = 0;
@property({ readonly: true, type: CCInteger })
private streak: number = 0;
@property({ readonly: true, type: CCInteger })
public highestStreak: number = 0;
// @property({ readonly: true, type: CCInteger })
@property(CCInteger)
private ball: number = 10;
@property(CCInteger)
private scoreToSpawnObstacle: number = 5;
@property({ type: Enum(GameState) })
public currentGameState: GameState = GameState.MainMenu;
@property(ParticleSystem2D)
public particle: ParticleSystem2D = null;
@property(CCInteger)
public startGameCountDown: number = 3;
//#endregion
public eventMenuGame = new EventTarget();
public eventStartGame = new EventTarget();
public eventPlayGame = new EventTarget();
public eventEndGame = new EventTarget();
public eventSpawnObstacle = new EventTarget();
public eventUpdateScore = new EventTarget();
public eventUpdateStreak = new EventTarget();
public eventUpdateHighestStreak = new EventTarget();
public eventUpdateBall = new EventTarget();
protected start(): void {
BEConnector.instance.authenticate();
this.ChangeGameState(GameState.MainMenu);
}
private SpawnBall(): void {
if (this.currentGameState == GameState.EndGame) return;
if (this.controllingBall == null) {
this.controllingBall = instantiate(this.ballPrefab);
this.controllingBall.parent = this.node;
let randonPos = randomRangeInt(0, this.startPositions.length);
this.controllingBall.setPosition(this.startPositions[randonPos].x, this.startPositions[randonPos].y, 0);
this.controllingBall.active = true;
this.controllingBall.getComponent(Ball).eventHitObstacle.on("HitObstacle", this.ObstacleHitControl, this);
this.controllingBall.getComponent(Ball).eventGoal.on("Goal", this.GoalControl, this);
return;
} else {
this.controllingBall.getComponent(RigidBody2D).linearVelocity = Vec2.ZERO;
let randonPos = randomRangeInt(0, this.startPositions.length);
this.controllingBall.parent = this.node;
this.controllingBall.setPosition(this.startPositions[randonPos].x, this.startPositions[randonPos].y, 0);
this.controllingBall.active = true;
}
SoundManager.Instance().PlayOneShot(SoundManager.Instance().whistle);
}
public SpawnBallInTime(time: number): void {
if (this.ball <= 0) return;
if (this.currentGameState == GameState.EndGame) return;
//this.unscheduleAllCallbacks();
console.log(this.currentGameState.toString());
this.scheduleOnce(() => {
this.SpawnBall();
}, time);
this.SetupObstacle();
}
//#region Events
public AddScore(score: number): void {
this.score += score;
this.streak++;
this.eventUpdateStreak.emit(EventType.UpdateStreak, this.streak);
this.ball--;
if (this.streak > 2) {
let addBall = this.streak - 2;
this.ball += addBall;
}
if (this.highestStreak < this.streak) {
this.highestStreak = this.streak;
this.eventUpdateHighestStreak.emit(EventType.UpdateHighestStreak, this.highestStreak);
}
this.eventUpdateBall.emit(EventType.UpdateBall, this.ball);
this.eventUpdateScore.emit(EventType.UpdateScore, this.score);
SoundManager.Instance().PlayOneShot(SoundManager.Instance().sfxGoal);
if (this.ball <= 0)
this.ChangeGameState(GameState.EndGame);
else this.SpawnBallInTime(1);
}
public LoseStreak(): void {
this.streak = 0;
this.eventUpdateStreak.emit(EventType.UpdateStreak, this.streak);
this.ball--;
this.eventUpdateBall.emit(EventType.UpdateBall, this.ball);
if (this.ball <= 0)
this.ChangeGameState(GameState.EndGame);
else this.SpawnBallInTime(1);
}
public ChangeGameState(newState: GameState): void {
if (this.currentGameState == newState) return;
this.currentGameState = newState;
this.StateChangeHandle();
}
private StateChangeHandle(): void {
switch (this.currentGameState) {
case GameState.MainMenu:
this.eventMenuGame.emit(EventType.MainMenu);
break;
case GameState.StartGame:
this.eventStartGame.emit(EventType.StartGame);
this.SpawnBallInTime(this.startGameCountDown);
this.levelController.LevelUp();
BEConnector.instance.ticketMinus("auth");
break;
case GameState.PlayGame:
this.eventUpdateBall.emit(EventType.UpdateBall, this.ball);
this.eventPlayGame.emit(EventType.PlayGame);
break;
case GameState.EndGame:
this.eventEndGame.emit(EventType.EndGame);
BEConnector.instance.postScoreToServer(this.score);
break;
}
}
public SetBall(ball: number): void {
this.ball = ball;
this.eventUpdateBall.emit(EventType.UpdateBall, this.ball);
}
//#endregion
private SetupObstacle(): void {
if (this.score < this.scoreToSpawnObstacle + 2)
return;
this.eventSpawnObstacle.emit("SpawnObstacle");
// this.harderObstacle.active = true;
}
private ObstacleHitControl(node: Node): void {
node.active = false;
this.scheduleOnce(function () {
node.active = true;
}, 3);
}
private GoalControl(): void {
this.particle.node.setPosition(this.controllingBall.position);
this.particle.resetSystem();
}
public OnRevive(): void {
this.uiController.ShutEndPnl();
this.ball += 5;
this.eventUpdateBall.emit(EventType.UpdateBall, this.ball);
this.SpawnBallInTime(1);
}
}

View File

@ -0,0 +1,9 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "b343e78a-054d-4d1a-89b7-a80ea1ae6ef2",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@ -0,0 +1,96 @@
import { _decorator, CCInteger, Component, Node, randomRangeInt } from 'cc';
import { GameplayController } from './GameplayController';
import { EventType } from './Enums';
const { ccclass, property } = _decorator;
@ccclass('LevelController')
export class LevelController extends Component {
@property(CCInteger)
private maxLevel: number = 5;
@property({ type: CCInteger, readonly: true })
private currentLevel: number = 0;
@property([Node])
private levelObstacles: Node[] = [];
@property([CCInteger])
private levelBalls: number[] = [];
@property([CCInteger])
private scoreToLevelUp: number[] = [];
private isLeveledUp: boolean = false;
protected start(): void {
this.maxLevel=5;
GameplayController.Instance().eventUpdateScore.on(EventType.UpdateScore, this.HandleLevelUp, this);
}
public HandleLevelUp(score: number): void {
for (let i = this.scoreToLevelUp.length - 1; i >= 0; i--) {
if (score == this.scoreToLevelUp[i] && !this.isLeveledUp) {
this.LevelUp();
this.isLeveledUp = true;
}
}
if (this.currentLevel >= this.maxLevel) {
console.log("Current level is: " + this.currentLevel + " while max level is: " + this.maxLevel);
}
this.scoreToLevelUp.forEach(scoreCheck => {
if (score == scoreCheck) return;
this.isLeveledUp = false;
});
}
public LevelUp(): void {
if (this.currentLevel >= this.maxLevel) return;
this.currentLevel++;
GameplayController.Instance().SetBall(this.levelBalls[this.currentLevel - 1]);
this.ObstacleControl();
GameplayController.Instance().uiController.currentLevelTxt.string = "Level: " + this.currentLevel;
}
public GetCurrentLevel(): number {
return this.currentLevel;
}
private ObstacleControl(): void {
switch (this.currentLevel) {
case 1:
this.levelObstacles.forEach(obstacle => {
obstacle.active = false;
});
break;
case 2:
this.levelObstacles.forEach(obstacle => {
obstacle.active = false;
});
this.levelObstacles[0].active = true;
break;
case 3:
this.levelObstacles.forEach(obstacle => {
obstacle.active = false;
});
this.levelObstacles[1].active = true;
break;
case 4:
this.levelObstacles.forEach(obstacle => {
obstacle.active = false;
});
this.levelObstacles[2].active = true;
break;
case 5:
this.RandomSetObstacle();
break;
}
}
private RandomSetObstacle(): void {
setTimeout(() => {
let random = randomRangeInt(0, this.levelObstacles.length);
this.levelObstacles.forEach(element => {
element.active = false;
});
this.levelObstacles[random].active = true;
}, 200);
}
}

View File

@ -0,0 +1,9 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "f88557af-13ae-4526-a423-6e54702ec00e",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@ -0,0 +1,31 @@
import { _decorator, CCFloat, Component, log, Node, randomRange, Tween, tween, Vec2, Vec3 } from 'cc';
const { ccclass, property, float } = _decorator;
@ccclass('ObstacleController')
export class ObstacleController extends Component {
@property(Node)
private target: Node;
@property([Node])
private waypoints: Node[] = [];
@property(CCFloat)
private speed: number = 0;
protected start() {
//if (this.target !== null)
this.target.setPosition(this.waypoints[this.waypoints.length - 1].position);
this.followPath();
}
private followPath() {
const tweenPath = tween(this.target);
for (let i = 0; i < this.waypoints.length; i++) {
let a = tween(this.target).to(this.speed,{position: this.waypoints[i].getPosition()})
tweenPath.then(a)
}
// tweenPath.union().repeat(10)
tweenPath.union().repeatForever()
tweenPath.start();
}
}

View File

@ -0,0 +1,9 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "2fd1fad8-05e9-4615-a7b0-fd8bc8acf50f",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@ -0,0 +1,12 @@
{
"ver": "1.1.0",
"importer": "directory",
"imported": true,
"uuid": "892a9e6d-ef47-4bf6-94bb-c2f393500fdf",
"files": [],
"subMetas": {},
"userData": {
"compressionType": {},
"isRemoteBundle": {}
}
}

View File

@ -0,0 +1,41 @@
import { _decorator, CCFloat, Component, Node, randomRangeInt, tween, Vec3 } from 'cc';
const { ccclass, property } = _decorator;
@ccclass('ObstacleBehaviour')
export class ObstacleBehaviour extends Component {
@property([Node])
private targets: Node[] = [];
@property([Node])
private waypoints: Node[] = [];
@property(CCFloat)
private speed: number = 0;
@property({ type: Node, readonly: true })
private selectedObstacle: Node = null;
protected onEnable() {
if (this.targets == null || this.targets.length <= 0) return;
let randomInt = randomRangeInt(0, this.targets.length);
this.selectedObstacle = this.targets[randomInt];
this.waypoints.forEach(element => {
element.setPosition(element.position.x, this.selectedObstacle.position.y, element.position.z);
});
this.selectedObstacle.setPosition(this.waypoints[this.waypoints.length - 1].position);
this.followPath(this.selectedObstacle);
}
private followPath(target: Node) {
const tweenPath = tween(target);
for (let i = 0; i < this.waypoints.length; i++) {
let a = tween(target).to(this.speed, { position: this.waypoints[i].getPosition() })
tweenPath.then(a)
}
// tweenPath.union().repeat(10)
tweenPath.union().repeatForever()
tweenPath.start();
}
}

View File

@ -0,0 +1,9 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "c8e70e72-0099-4110-a714-83f832b7fc49",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@ -0,0 +1,33 @@
import { _decorator, Component, log, Node, randomRangeInt } from 'cc';
import { ObstacleBehaviour } from './ObstacleBehaviour';
import { GameplayController } from '../GameplayController';
const { ccclass, property } = _decorator;
@ccclass('ObstaclesController')
export class ObstaclesController extends Component {
// @property([ObstacleBehaviour])
// private easyObstacle: ObstacleBehaviour[] = [];
// @property([ObstacleBehaviour])
// private mediumObstacle: ObstacleBehaviour[] = [];
// @property([ObstacleBehaviour])
// private hardObstacle: ObstacleBehaviour[] = [];
@property([Node])
private obstaclesSet: Node[] = [];
protected onEnable(): void {
GameplayController.Instance().eventSpawnObstacle.on("SpawnObstacle", this.RandomSetObstacle, this);
// this.RandomSetObstacle();
}
private RandomSetObstacle(): void {
//let random = randomRangeInt(0, this.obstaclesSet.length);
setTimeout(() => {
let random = randomRangeInt(0, this.obstaclesSet.length);
this.obstaclesSet.forEach(element => {
element.active = false;
});
this.obstaclesSet[random].active = true;
}, 200);
}
}

View File

@ -0,0 +1,9 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "139dc437-8ddb-409c-b0e9-9fc41ddc4ac3",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@ -0,0 +1,38 @@
import { _decorator, AudioClip, AudioSource, Component, Node } from 'cc';
const { ccclass, property } = _decorator;
@ccclass('SoundManager')
export class SoundManager extends Component {
private static instance: SoundManager;
public static Instance(): SoundManager {
if (!SoundManager.instance) {
SoundManager.instance = new Node().addComponent(SoundManager);
}
return SoundManager.instance;
}
protected onLoad(): void {
SoundManager.instance = this;
}
@property(AudioSource)
private audioSource: AudioSource;
@property(AudioClip)
public hitGround: AudioClip;
@property(AudioClip)
public hitPlayer: AudioClip;
@property(AudioClip)
public goal: AudioClip;
@property(AudioClip)
public menuTap: AudioClip;
@property(AudioClip)
public sfxGoal: AudioClip;
@property(AudioClip)
public whistle: AudioClip;
public PlayOneShot(clip: AudioClip): void {
this.audioSource.playOneShot(clip);
}
}

View File

@ -0,0 +1,9 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "f4bdc5e2-afd5-4307-8700-da3026204fe9",
"files": [],
"subMetas": {},
"userData": {}
}

30
assets/Scripts/Test.ts Normal file
View File

@ -0,0 +1,30 @@
import { _decorator, Component, Input, input, instantiate, Node, Prefab } from 'cc';
const { ccclass, property } = _decorator;
@ccclass('Test')
export class Test extends Component {
@property(Prefab)
private someThing: Prefab;
someNode: Node;
protected start(): void {
input.on(Input.EventType.MOUSE_DOWN, this.ActiveNode, this);
input.on(Input.EventType.MOUSE_UP, this.DeActiveNode, this);
}
private ActiveNode(): void {
if (this.someNode == null) {
this.someNode = instantiate(this.someThing);
this.someNode.parent = this.node;
this.someNode.setPosition(0, 0, 0);
}
else this.someNode.active = true;
}
private DeActiveNode(): void {
this.someNode.active = false;
}
}

View File

@ -0,0 +1,9 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "4ae0c49c-cfd9-44b1-91ac-b15cd8280af6",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@ -0,0 +1,127 @@
import { _decorator, Button, Component, director, Label, log, Node, view, View } from 'cc';
import { GameplayController, GameState } from './GameplayController';
import { EventType } from './Enums';
import { SoundManager } from './SoundManager';
const { ccclass, property } = _decorator;
@ccclass('UIController')
export class UIController extends Component {
@property(Node)
private mainMenuPnl: Node;
@property(Button)
private startGameBtn: Button;
@property(Node)
private countdownPnl: Node;
@property(Label)
private countdownTxt: Label;
@property(Node)
private inGamePnl: Node;
@property(Label)
private goalTxt: Label;
@property(Label)
private currentStreakTxt: Label;
@property(Label)
private highestStreakTxt: Label;
@property(Label)
private ballTxt: Label;
@property(Label)
public currentLevelTxt: Label;
@property(Node)
public endGamePnl: Node;
@property(Label)
private yourScoreTxt: Label;
@property(Button)
private replayBtn: Button;
private isGameStarted: boolean;
private countdownTime: number;
private score: number;
private hStreak: number;
protected start(): void {
this.countdownTime = GameplayController.Instance().startGameCountDown;
this.startGameBtn.node.on(Button.EventType.CLICK, this.StartGameClicked, this);
this.replayBtn.node.on(Button.EventType.CLICK, this.RestartClicked, this);
GameplayController.Instance().eventMenuGame.on(EventType.MainMenu, this.ShowGameMenu, this);
GameplayController.Instance().eventStartGame.on(EventType.StartGame, this.StartCountdownEvent, this);
GameplayController.Instance().eventPlayGame.on(EventType.PlayGame, this.StartGameEvent, this);
GameplayController.Instance().eventEndGame.on(EventType.EndGame, this.EndGameEvent, this);
GameplayController.Instance().eventUpdateScore.on(EventType.UpdateScore, this.UpdateScore, this);
GameplayController.Instance().eventUpdateStreak.on(EventType.UpdateStreak, this.UpdateStreak, this);
GameplayController.Instance().eventUpdateHighestStreak.on(EventType.UpdateHighestStreak, this.UpdateHighestStreak, this);
GameplayController.Instance().eventUpdateBall.on(EventType.UpdateBall, this.UpdateBall, this);
}
protected update(dt: number): void {
if (!this.isGameStarted) return;
if (this.countdownTime < 0) {
if (GameplayController.Instance().currentGameState != GameState.PlayGame)
GameplayController.Instance().ChangeGameState(GameState.PlayGame);
return;
}
this.countdownTime -= dt;
this.countdownTxt.string = Math.round(this.countdownTime).toString();
}
//#region Event listeners
private ShowGameMenu(): void {
this.mainMenuPnl.active = true;
}
private StartCountdownEvent(): void {
this.mainMenuPnl.active = false;
this.countdownPnl.active = true;
this.isGameStarted = true;
}
private StartGameEvent(): void {
this.countdownPnl.active = false;
this.inGamePnl.active = true;
}
private UpdateScore(score: number): void {
console.log("Score: " + score);
this.score = score;
this.goalTxt.string = "Goal: " + score.toString();
}
private UpdateStreak(streak: number): void {
console.log("Streak: " + streak);
this.currentStreakTxt.string = "Streak: " + streak.toString();
}
private UpdateHighestStreak(streak: number): void {
console.log("Highest Streak: " + streak);
this.hStreak = streak;
this.highestStreakTxt.string = "Highest Streak: " + streak.toString();
}
private UpdateBall(ball: number): void {
console.log("Ball: " + ball);
this.ballTxt.string = "Ball: " + ball.toString();
}
private EndGameEvent(): void {
this.inGamePnl.active = false;
this.endGamePnl.active = true;
if ((this.score + this.hStreak * 2) > 0)
this.yourScoreTxt.string = (this.score + this.hStreak * 2).toString();
else this.yourScoreTxt.string = "0";
}
public ShutEndPnl(): void {
this.endGamePnl.active = false;
}
//#endregion
private StartGameClicked(): void {
GameplayController.Instance().ChangeGameState(GameState.StartGame);
SoundManager.Instance().PlayOneShot(SoundManager.Instance().menuTap);
}
private RestartClicked(): void {
director.loadScene(director.getScene().name)
}
}

View File

@ -0,0 +1,9 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "575edf24-cdba-4302-91b1-8a89441ce7a4",
"files": [],
"subMetas": {},
"userData": {}
}

12
assets/Sounds.meta Normal file
View File

@ -0,0 +1,12 @@
{
"ver": "1.1.0",
"importer": "directory",
"imported": true,
"uuid": "2f95ff08-f9dc-4a09-8173-d3844886c858",
"files": [],
"subMetas": {},
"userData": {
"compressionType": {},
"isRemoteBundle": {}
}
}

Binary file not shown.

View File

@ -0,0 +1,14 @@
{
"ver": "1.0.0",
"importer": "audio-clip",
"imported": true,
"uuid": "6a432293-3852-4267-be19-c671f36fe9f0",
"files": [
".json",
".mp3"
],
"subMetas": {},
"userData": {
"downloadMode": 0
}
}

Binary file not shown.

View File

@ -0,0 +1,14 @@
{
"ver": "1.0.0",
"importer": "audio-clip",
"imported": true,
"uuid": "97c8a166-c717-41bd-837f-bd1733e2ee1c",
"files": [
".json",
".mp3"
],
"subMetas": {},
"userData": {
"downloadMode": 0
}
}

BIN
assets/Sounds/Goal-02.mp3 Normal file

Binary file not shown.

View File

@ -0,0 +1,14 @@
{
"ver": "1.0.0",
"importer": "audio-clip",
"imported": true,
"uuid": "b8e26fea-3d75-4254-8fe6-4a57c40d6121",
"files": [
".json",
".mp3"
],
"subMetas": {},
"userData": {
"downloadMode": 0
}
}

BIN
assets/Sounds/MenuTap.mp3 Normal file

Binary file not shown.

View File

@ -0,0 +1,14 @@
{
"ver": "1.0.0",
"importer": "audio-clip",
"imported": true,
"uuid": "5318386a-c072-4982-b604-d79513736912",
"files": [
".json",
".mp3"
],
"subMetas": {},
"userData": {
"downloadMode": 0
}
}

BIN
assets/Sounds/sfx_goal.mp3 Normal file

Binary file not shown.

View File

@ -0,0 +1,14 @@
{
"ver": "1.0.0",
"importer": "audio-clip",
"imported": true,
"uuid": "d93b45ca-fea1-4d38-b460-170b6b65ae08",
"files": [
".json",
".mp3"
],
"subMetas": {},
"userData": {
"downloadMode": 0
}
}

Binary file not shown.

View File

@ -0,0 +1,14 @@
{
"ver": "1.0.0",
"importer": "audio-clip",
"imported": true,
"uuid": "6452248b-259c-4844-b0e1-70f47d69955e",
"files": [
".json",
".mp3"
],
"subMetas": {},
"userData": {
"downloadMode": 0
}
}

12
assets/_Game.meta Normal file
View File

@ -0,0 +1,12 @@
{
"ver": "1.1.0",
"importer": "directory",
"imported": true,
"uuid": "7beb751f-720d-4d3f-b404-7130c61a1dea",
"files": [],
"subMetas": {},
"userData": {
"compressionType": {},
"isRemoteBundle": {}
}
}

12
assets/_Game/Scripts.meta Normal file
View File

@ -0,0 +1,12 @@
{
"ver": "1.1.0",
"importer": "directory",
"imported": true,
"uuid": "907fcdde-1d95-4780-8f0d-1d5756cab63e",
"files": [],
"subMetas": {},
"userData": {
"compressionType": {},
"isRemoteBundle": {}
}
}

View File

@ -0,0 +1,12 @@
{
"ver": "1.1.0",
"importer": "directory",
"imported": true,
"uuid": "7e65366b-dce8-4c7a-9e6f-52fd3e9cad8d",
"files": [],
"subMetas": {},
"userData": {
"compressionType": {},
"isRemoteBundle": {}
}
}

View File

@ -0,0 +1,35 @@
import { _decorator, Component, Game, Label, Node } from 'cc';
import BEConnector from '../../../Scripts/BEConnector';
import { GameplayController, GameState } from '../../../Scripts/GameplayController';
const { ccclass, property } = _decorator;
@ccclass('ConfirmPanel')
export class ConfirmPanel extends Component {
@property(Label) ticketWaringText : Label = null;
protected onEnable(): void {
this.ticketWaringText.string = `To continue playing, you will be deducted ${BEConnector.instance.getTicketCanBeMinus()} ticket`;
}
onClickYesButton()
{
if(BEConnector.instance.canRelive()){
BEConnector.instance.checkGameScoreTicket()
.then(()=>{
GameplayController.Instance().OnRevive();
})
.catch(()=>{
GameplayController.Instance().ChangeGameState(GameState.EndGame);
})
}else{
BEConnector.instance.postMessage();
}
}
onClickNoButton(){
this.node.active = false;
}
}

View File

@ -0,0 +1 @@
{"ver":"4.0.23","importer":"typescript","imported":true,"uuid":"09897cf3-e99a-4576-b79d-4bd1ef15db44","files":[],"subMetas":{},"userData":{}}

View File

@ -0,0 +1,37 @@
import { _decorator, Component, Label, Node } from 'cc';
import BEConnector from '../../../Scripts/BEConnector';
import { GameplayController, GameState } from '../../../Scripts/GameplayController';
const { ccclass, property } = _decorator;
@ccclass('GameOverPanel')
export class GameOverPanel extends Component {
@property(Label) private topScore: Label = null;
@property(Label) private yourScore: Label = null;
protected onEnable(): void {
let currentScore = GameplayController.Instance().score;
this.topScore.string = BEConnector.instance.maxScore.toString();
this.yourScore.string = currentScore.toString();
this.scheduleOnce(this.endGame,60);
}
onClickYesButton(){
let confirmPanel = this.node.getChildByName("ConfirmPanel");
confirmPanel.active = true;
}
onClickNoButton(){
GameplayController.Instance().ChangeGameState(GameState.EndGame);
}
protected onDisable(): void {
this.unschedule(this.endGame);
}
private endGame(){
GameplayController.Instance().ChangeGameState(GameState.EndGame);
}
}

View File

@ -0,0 +1,9 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "d43dbb30-5ec5-42fe-8230-f9c39b8b852f",
"files": [],
"subMetas": {},
"userData": {}
}

18
package-lock.json generated Normal file
View File

@ -0,0 +1,18 @@
{
"name": "PinBallTCC",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "PinBallTCC",
"dependencies": {
"crypto-es": "^2.1.0"
}
},
"node_modules/crypto-es": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/crypto-es/-/crypto-es-2.1.0.tgz",
"integrity": "sha512-C5Dbuv4QTPGuloy5c5Vv/FZHtmK+lobLAypFfuRaBbwCsk3qbCWWESCH3MUcBsrgXloRNMrzwUAiPg4U6+IaKA=="
}
}
}

10
package.json Normal file
View File

@ -0,0 +1,10 @@
{
"name": "PinBallTCC",
"uuid": "1dc6dfe4-8871-44d8-881e-f7fee9494679",
"creator": {
"version": "3.7.2"
},
"dependencies": {
"crypto-es": "^2.1.0"
}
}

View File

@ -0,0 +1,3 @@
{
"__version__": "1.3.4"
}

View File

@ -0,0 +1,23 @@
{
"__version__": "3.0.7",
"game": {
"name": "UNKNOW GAME",
"app_id": "UNKNOW",
"c_id": "0"
},
"appConfigMaps": [
{
"app_id": "UNKNOW",
"config_id": "098859"
}
],
"configs": [
{
"app_id": "UNKNOW",
"config_id": "098859",
"config_name": "Default",
"config_remarks": "",
"services": []
}
]
}

Some files were not shown because too many files have changed in this diff Show More