diff --git a/README.md b/README.md index 9284c26..4835725 100644 --- a/README.md +++ b/README.md @@ -1,5 +1 @@ -# 实时对战 -# IO -# 帧同步 -# Cocos Creator -# Node.js \ No newline at end of file +# Cocos Creator、Node.js、实时对战、IO、帧同步 diff --git a/client/.creator/asset-template/typescript/Custom Script Template Help Documentation.url b/apps/client/.creator/asset-template/typescript/Custom Script Template Help Documentation.url similarity index 100% rename from client/.creator/asset-template/typescript/Custom Script Template Help Documentation.url rename to apps/client/.creator/asset-template/typescript/Custom Script Template Help Documentation.url diff --git a/client/.creator/default-meta.json b/apps/client/.creator/default-meta.json similarity index 100% rename from client/.creator/default-meta.json rename to apps/client/.creator/default-meta.json diff --git a/client/.eslintrc b/apps/client/.eslintrc similarity index 100% rename from client/.eslintrc rename to apps/client/.eslintrc diff --git a/client/.gitignore b/apps/client/.gitignore similarity index 100% rename from client/.gitignore rename to apps/client/.gitignore diff --git a/client/assets/Scenes.meta b/apps/client/assets/Scenes.meta similarity index 100% rename from client/assets/Scenes.meta rename to apps/client/assets/Scenes.meta diff --git a/client/assets/Scenes/Batle.scene b/apps/client/assets/Scenes/Battle.scene similarity index 99% rename from client/assets/Scenes/Batle.scene rename to apps/client/assets/Scenes/Battle.scene index 206316b..740f8ca 100644 --- a/client/assets/Scenes/Batle.scene +++ b/apps/client/assets/Scenes/Battle.scene @@ -10,7 +10,7 @@ }, { "__type__": "cc.Scene", - "_name": "Batle", + "_name": "Battle", "_objFlags": 0, "_parent": null, "_children": [ diff --git a/client/assets/Scenes/Batle.scene.meta b/apps/client/assets/Scenes/Battle.scene.meta similarity index 100% rename from client/assets/Scenes/Batle.scene.meta rename to apps/client/assets/Scenes/Battle.scene.meta diff --git a/apps/client/assets/Scenes/Hall.scene b/apps/client/assets/Scenes/Hall.scene new file mode 100644 index 0000000..712de6f --- /dev/null +++ b/apps/client/assets/Scenes/Hall.scene @@ -0,0 +1,2157 @@ +[ + { + "__type__": "cc.SceneAsset", + "_name": "", + "_objFlags": 0, + "_native": "", + "scene": { + "__id__": 1 + } + }, + { + "__type__": "cc.Scene", + "_name": "Hall", + "_objFlags": 0, + "_parent": null, + "_children": [ + { + "__id__": 2 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 60 + }, + "autoReleaseAssets": false, + "_globals": { + "__id__": 61 + }, + "_id": "43b185e1-294e-4f6e-a660-e27f4cc5e45c" + }, + { + "__type__": "cc.Node", + "_name": "Canvas", + "_objFlags": 0, + "_parent": { + "__id__": 1 + }, + "_children": [ + { + "__id__": 3 + }, + { + "__id__": 5 + }, + { + "__id__": 9 + }, + { + "__id__": 13 + }, + { + "__id__": 17 + }, + { + "__id__": 21 + }, + { + "__id__": 34 + }, + { + "__id__": 47 + } + ], + "_active": true, + "_components": [ + { + "__id__": 56 + }, + { + "__id__": 57 + }, + { + "__id__": 58 + }, + { + "__id__": 59 + } + ], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": 480, + "y": 320.00000000000006, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 33554432, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "beI88Z2HpFELqR4T5EMHpg" + }, + { + "__type__": "cc.Node", + "_name": "Camera", + "_objFlags": 0, + "_parent": { + "__id__": 2 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 4 + } + ], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 1000 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 1073741824, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "ebFwiq8gBFaYpqYbdoDODe" + }, + { + "__type__": "cc.Camera", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 3 + }, + "_enabled": true, + "__prefab": null, + "_projection": 0, + "_priority": 1073741824, + "_fov": 45, + "_fovAxis": 0, + "_orthoHeight": 320, + "_near": 0, + "_far": 2000, + "_color": { + "__type__": "cc.Color", + "r": 0, + "g": 0, + "b": 0, + "a": 255 + }, + "_depth": 1, + "_stencil": 0, + "_clearFlags": 7, + "_rect": { + "__type__": "cc.Rect", + "x": 0, + "y": 0, + "width": 1, + "height": 1 + }, + "_aperture": 19, + "_shutter": 7, + "_iso": 0, + "_screenScale": 1, + "_visibility": 41943040, + "_targetTexture": null, + "_id": "63WIch3o5BEYRlXzTT0oWc" + }, + { + "__type__": "cc.Node", + "_name": "Map1", + "_objFlags": 0, + "__editorExtras__": {}, + "_parent": { + "__id__": 2 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 6 + }, + { + "__id__": 7 + }, + { + "__id__": 8 + } + ], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 33554432, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "bb21TCgx9FPYfZbSzweGIh" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 5 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 960, + "height": 640 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "08CL+M0hVGdLJb6gWdXfjb" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 5 + }, + "_enabled": true, + "__prefab": null, + "_customMaterial": null, + "_srcBlendFactor": 2, + "_dstBlendFactor": 4, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_spriteFrame": { + "__uuid__": "155ebd7e-9357-4155-acfc-fb5438af3d48@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + "_type": 2, + "_fillType": 0, + "_sizeMode": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_useGrayscale": false, + "_atlas": null, + "_id": "9bXFiNivJMFZYTgy5xjO9g" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 5 + }, + "_enabled": true, + "__prefab": null, + "_alignFlags": 45, + "_target": null, + "_left": 0, + "_right": 0, + "_top": 0, + "_bottom": 0, + "_horizontalCenter": 0, + "_verticalCenter": 0, + "_isAbsLeft": true, + "_isAbsRight": true, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 1000, + "_originalHeight": 1000, + "_alignMode": 2, + "_lockFlags": 0, + "_id": "39VAJzKd9Nv7a/4JypbuhV" + }, + { + "__type__": "cc.Node", + "_name": "Label-002", + "_objFlags": 0, + "_parent": { + "__id__": 2 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 10 + }, + { + "__id__": 11 + }, + { + "__id__": 12 + } + ], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": 0, + "y": 255.9, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 33554432, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "9e8gLsLnZHk7HcK7CDLgFg" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 9 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 280, + "height": 88.2 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "60WJHwfkJJRLQoyik7vyeG" + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 9 + }, + "_enabled": true, + "__prefab": null, + "_customMaterial": null, + "_srcBlendFactor": 2, + "_dstBlendFactor": 4, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_string": "游戏大厅", + "_horizontalAlign": 1, + "_verticalAlign": 1, + "_actualFontSize": 70, + "_fontSize": 70, + "_fontFamily": "Arial", + "_lineHeight": 70, + "_overflow": 0, + "_enableWrapText": true, + "_font": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_isItalic": false, + "_isBold": false, + "_isUnderline": false, + "_underlineHeight": 2, + "_cacheMode": 0, + "_id": "48G3wdGFJHsIIkEKr5HTAK" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 9 + }, + "_enabled": true, + "__prefab": null, + "_alignFlags": 17, + "_target": null, + "_left": 0, + "_right": 0, + "_top": 20, + "_bottom": 0, + "_horizontalCenter": 0, + "_verticalCenter": 0, + "_isAbsLeft": true, + "_isAbsRight": true, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 0, + "_originalHeight": 0, + "_alignMode": 2, + "_lockFlags": 0, + "_id": "3fN7Xy1eBM1KQYHGQO8JU6" + }, + { + "__type__": "cc.Node", + "_name": "Label", + "_objFlags": 0, + "_parent": { + "__id__": 2 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 14 + }, + { + "__id__": 15 + }, + { + "__id__": 16 + } + ], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": -380, + "y": 168.5, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 33554432, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "e4UG+YnOtOJZFHIt2Yx5xl" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 13 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 100, + "height": 63 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "86h/JlcvVI7IVm6NirasGP" + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 13 + }, + "_enabled": true, + "__prefab": null, + "_customMaterial": null, + "_srcBlendFactor": 2, + "_dstBlendFactor": 4, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_string": "玩家", + "_horizontalAlign": 1, + "_verticalAlign": 1, + "_actualFontSize": 50, + "_fontSize": 50, + "_fontFamily": "Arial", + "_lineHeight": 50, + "_overflow": 0, + "_enableWrapText": true, + "_font": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_isItalic": false, + "_isBold": false, + "_isUnderline": false, + "_underlineHeight": 2, + "_cacheMode": 0, + "_id": "94aS4hjYpDGJAGxgQOuk5c" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 13 + }, + "_enabled": true, + "__prefab": null, + "_alignFlags": 9, + "_target": null, + "_left": 50, + "_right": 0, + "_top": 120, + "_bottom": 0, + "_horizontalCenter": 0, + "_verticalCenter": 0, + "_isAbsLeft": true, + "_isAbsRight": true, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 0, + "_originalHeight": 0, + "_alignMode": 2, + "_lockFlags": 0, + "_id": "5fj9+IXJVFn5aotRyFXHYM" + }, + { + "__type__": "cc.Node", + "_name": "Label-001", + "_objFlags": 0, + "_parent": { + "__id__": 2 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 18 + }, + { + "__id__": 19 + }, + { + "__id__": 20 + } + ], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": -75.60699999999997, + "y": 168.5, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 33554432, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "43ZHG15YdKkaMhdUfskeRu" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 17 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 100, + "height": 63 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "019lC1bD5An4fp4ub2aaVu" + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 17 + }, + "_enabled": true, + "__prefab": null, + "_customMaterial": null, + "_srcBlendFactor": 2, + "_dstBlendFactor": 4, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_string": "房间", + "_horizontalAlign": 1, + "_verticalAlign": 1, + "_actualFontSize": 50, + "_fontSize": 50, + "_fontFamily": "Arial", + "_lineHeight": 50, + "_overflow": 0, + "_enableWrapText": true, + "_font": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_isItalic": false, + "_isBold": false, + "_isUnderline": false, + "_underlineHeight": 2, + "_cacheMode": 0, + "_id": "feJFWLnNlDkYvSD7u5+xhG" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 17 + }, + "_enabled": true, + "__prefab": null, + "_alignFlags": 9, + "_target": null, + "_left": 354.39300000000003, + "_right": 0, + "_top": 120, + "_bottom": 0, + "_horizontalCenter": 0, + "_verticalCenter": 0, + "_isAbsLeft": true, + "_isAbsRight": true, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 0, + "_originalHeight": 0, + "_alignMode": 2, + "_lockFlags": 0, + "_id": "abotQEvGVNA7yhgRE1N7Rf" + }, + { + "__type__": "cc.Node", + "_name": "Players", + "_objFlags": 0, + "_parent": { + "__id__": 2 + }, + "_children": [ + { + "__id__": 22 + } + ], + "_active": true, + "_components": [ + { + "__id__": 30 + }, + { + "__id__": 31 + }, + { + "__id__": 32 + }, + { + "__id__": 33 + } + ], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": -280, + "y": -20, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 33554432, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "4cZSnR3hhJEKESAdfjTK6W" + }, + { + "__type__": "cc.Node", + "_name": "view", + "_objFlags": 0, + "_parent": { + "__id__": 21 + }, + "_children": [ + { + "__id__": 23 + } + ], + "_active": true, + "_components": [ + { + "__id__": 27 + }, + { + "__id__": 28 + }, + { + "__id__": 29 + } + ], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 33554432, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "eeknyEtQRAGpAwAGAqfKjV" + }, + { + "__type__": "cc.Node", + "_name": "content", + "_objFlags": 0, + "_parent": { + "__id__": 22 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 24 + }, + { + "__id__": 25 + }, + { + "__id__": 26 + } + ], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": 0, + "y": 150, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 33554432, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "9ftGANullFv5HLkx8miEVV" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 23 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 300, + "height": 300 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 1 + }, + "_id": "3alA3A+ypHwpBjKBT+prV5" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 23 + }, + "_enabled": true, + "__prefab": null, + "_alignFlags": 17, + "_target": null, + "_left": 0, + "_right": 0, + "_top": 0, + "_bottom": 0, + "_horizontalCenter": 0, + "_verticalCenter": 0, + "_isAbsLeft": true, + "_isAbsRight": true, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 0, + "_originalHeight": 0, + "_alignMode": 2, + "_lockFlags": 0, + "_id": "10TPmvehJNgLEcMgD2t2X+" + }, + { + "__type__": "cc.Layout", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 23 + }, + "_enabled": true, + "__prefab": null, + "_resizeMode": 0, + "_layoutType": 2, + "_cellSize": { + "__type__": "cc.Size", + "width": 40, + "height": 40 + }, + "_startAxis": 0, + "_paddingLeft": 0, + "_paddingRight": 0, + "_paddingTop": 20, + "_paddingBottom": 0, + "_spacingX": 0, + "_spacingY": 10, + "_verticalDirection": 1, + "_horizontalDirection": 0, + "_constraint": 0, + "_constraintNum": 2, + "_affectedByScale": false, + "_isAlign": false, + "_id": "39BG4mejdOa4lK5V1e4kT9" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 22 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 300, + "height": 300 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "fexb/3on5KCZqgPEGiflus" + }, + { + "__type__": "cc.Mask", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 22 + }, + "_enabled": true, + "__prefab": null, + "_customMaterial": null, + "_srcBlendFactor": 2, + "_dstBlendFactor": 4, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_type": 0, + "_inverted": false, + "_segments": 64, + "_spriteFrame": null, + "_alphaThreshold": 0.1, + "_id": "f7VuhjdZBEzIrW2ssA48vT" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 22 + }, + "_enabled": true, + "__prefab": null, + "_alignFlags": 45, + "_target": null, + "_left": 0, + "_right": 0, + "_top": 0, + "_bottom": 0, + "_horizontalCenter": 0, + "_verticalCenter": 0, + "_isAbsLeft": true, + "_isAbsRight": true, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 400, + "_originalHeight": 400, + "_alignMode": 2, + "_lockFlags": 0, + "_id": "2fiymexaRLu5bAE7VRidR/" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 21 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 300, + "height": 300 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "0b3JcojjlNL5zRY+KurHk1" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 21 + }, + "_enabled": false, + "__prefab": null, + "_customMaterial": null, + "_srcBlendFactor": 2, + "_dstBlendFactor": 4, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_spriteFrame": { + "__uuid__": "b730527c-3233-41c2-aaf7-7cdab58f9749@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + "_type": 1, + "_fillType": 0, + "_sizeMode": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_useGrayscale": false, + "_atlas": null, + "_id": "1d18SNRXJL/o3yP9WMAYjM" + }, + { + "__type__": "cc.ScrollView", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 21 + }, + "_enabled": true, + "__prefab": null, + "bounceDuration": 0.23, + "brake": 0.75, + "elastic": true, + "inertia": true, + "horizontal": false, + "vertical": true, + "cancelInnerEvents": true, + "scrollEvents": [], + "_content": { + "__id__": 23 + }, + "_horizontalScrollBar": null, + "_verticalScrollBar": null, + "_id": "d6885J+m1DvKmuKqKCrLao" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 21 + }, + "_enabled": true, + "__prefab": null, + "_alignFlags": 10, + "_target": null, + "_left": 50, + "_right": 0, + "_top": 0, + "_bottom": 0, + "_horizontalCenter": -315.081, + "_verticalCenter": -20, + "_isAbsLeft": true, + "_isAbsRight": true, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 0, + "_originalHeight": 0, + "_alignMode": 2, + "_lockFlags": 0, + "_id": "0bfN8OZSBAtZ7JxknvLq+s" + }, + { + "__type__": "cc.Node", + "_name": "Rooms", + "_objFlags": 0, + "_parent": { + "__id__": 2 + }, + "_children": [ + { + "__id__": 35 + } + ], + "_active": true, + "_components": [ + { + "__id__": 43 + }, + { + "__id__": 44 + }, + { + "__id__": 45 + }, + { + "__id__": 46 + } + ], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": 131.011, + "y": -20, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 33554432, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "1eNbwWWApDs7/O4QDxooao" + }, + { + "__type__": "cc.Node", + "_name": "view", + "_objFlags": 0, + "_parent": { + "__id__": 34 + }, + "_children": [ + { + "__id__": 36 + } + ], + "_active": true, + "_components": [ + { + "__id__": 40 + }, + { + "__id__": 41 + }, + { + "__id__": 42 + } + ], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 33554432, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "66wlas5PJOGJGeGwuLkGze" + }, + { + "__type__": "cc.Node", + "_name": "content", + "_objFlags": 0, + "_parent": { + "__id__": 35 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 37 + }, + { + "__id__": 38 + }, + { + "__id__": 39 + } + ], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": 0, + "y": 150, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 33554432, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "4du9ZpOyxH6ZUEI+UwiFIL" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 36 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 500, + "height": 300 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 1 + }, + "_id": "5cI58nv/NPLLbSd89g/TP+" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 36 + }, + "_enabled": true, + "__prefab": null, + "_alignFlags": 17, + "_target": null, + "_left": 0, + "_right": 0, + "_top": 0, + "_bottom": 0, + "_horizontalCenter": 0, + "_verticalCenter": 0, + "_isAbsLeft": true, + "_isAbsRight": true, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 0, + "_originalHeight": 0, + "_alignMode": 2, + "_lockFlags": 0, + "_id": "08xCXjzhVDn5BFdgZxXOhx" + }, + { + "__type__": "cc.Layout", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 36 + }, + "_enabled": true, + "__prefab": null, + "_resizeMode": 0, + "_layoutType": 2, + "_cellSize": { + "__type__": "cc.Size", + "width": 40, + "height": 40 + }, + "_startAxis": 0, + "_paddingLeft": 0, + "_paddingRight": 0, + "_paddingTop": 20, + "_paddingBottom": 0, + "_spacingX": 0, + "_spacingY": 10, + "_verticalDirection": 1, + "_horizontalDirection": 0, + "_constraint": 0, + "_constraintNum": 2, + "_affectedByScale": false, + "_isAlign": false, + "_id": "32MKyk6NdHzKg33b5gq3Tf" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 35 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 500, + "height": 300 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "9fI9SXFyBJlpPDZ7QpZbgp" + }, + { + "__type__": "cc.Mask", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 35 + }, + "_enabled": true, + "__prefab": null, + "_customMaterial": null, + "_srcBlendFactor": 2, + "_dstBlendFactor": 4, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_type": 0, + "_inverted": false, + "_segments": 64, + "_spriteFrame": null, + "_alphaThreshold": 0.1, + "_id": "72HbJRLH5JD6dWoBzi7QXt" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 35 + }, + "_enabled": true, + "__prefab": null, + "_alignFlags": 21, + "_target": null, + "_left": 0, + "_right": 50, + "_top": 0, + "_bottom": 0, + "_horizontalCenter": 0, + "_verticalCenter": 0, + "_isAbsLeft": true, + "_isAbsRight": true, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 400, + "_originalHeight": 400, + "_alignMode": 2, + "_lockFlags": 0, + "_id": "f0Ln3jWvpEMKM6vps388LD" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 34 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 500, + "height": 300 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "c36pToFfxNv4cY1w5ipNCL" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 34 + }, + "_enabled": false, + "__prefab": null, + "_customMaterial": null, + "_srcBlendFactor": 2, + "_dstBlendFactor": 4, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_spriteFrame": { + "__uuid__": "b730527c-3233-41c2-aaf7-7cdab58f9749@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + "_type": 1, + "_fillType": 0, + "_sizeMode": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_useGrayscale": false, + "_atlas": null, + "_id": "82pgocleJDO4DYZLNjn+dK" + }, + { + "__type__": "cc.ScrollView", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 34 + }, + "_enabled": true, + "__prefab": null, + "bounceDuration": 0.23, + "brake": 0.75, + "elastic": true, + "inertia": true, + "horizontal": false, + "vertical": true, + "cancelInnerEvents": true, + "scrollEvents": [], + "_content": { + "__id__": 36 + }, + "_horizontalScrollBar": null, + "_verticalScrollBar": null, + "_id": "8a91jnpA5J1IokKETaTGJf" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 34 + }, + "_enabled": true, + "__prefab": null, + "_alignFlags": 18, + "_target": null, + "_left": 0, + "_right": 0, + "_top": 0, + "_bottom": 0, + "_horizontalCenter": 131.011, + "_verticalCenter": -20, + "_isAbsLeft": true, + "_isAbsRight": true, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 0, + "_originalHeight": 0, + "_alignMode": 2, + "_lockFlags": 0, + "_id": "05YkkJyudI4KSSmhqhAATg" + }, + { + "__type__": "cc.Node", + "_name": "Button", + "_objFlags": 0, + "_parent": { + "__id__": 2 + }, + "_children": [ + { + "__id__": 48 + } + ], + "_active": true, + "_components": [ + { + "__id__": 51 + }, + { + "__id__": 52 + }, + { + "__id__": 53 + }, + { + "__id__": 55 + } + ], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": 330, + "y": -270, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 33554432, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "75OFyTFTdLtKP3dv+7Mba7" + }, + { + "__type__": "cc.Node", + "_name": "Label", + "_objFlags": 512, + "_parent": { + "__id__": 47 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 49 + }, + { + "__id__": 50 + } + ], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 33554432, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "9fhNT/h0hNxacs/G4ycKHc" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 48 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 300, + "height": 100 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "86ATWSPeRPl5GJ8v2UWGdP" + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 48 + }, + "_enabled": true, + "__prefab": null, + "_customMaterial": null, + "_srcBlendFactor": 2, + "_dstBlendFactor": 4, + "_color": { + "__type__": "cc.Color", + "r": 0, + "g": 0, + "b": 0, + "a": 255 + }, + "_string": "创建房间", + "_horizontalAlign": 1, + "_verticalAlign": 1, + "_actualFontSize": 50, + "_fontSize": 50, + "_fontFamily": "Arial", + "_lineHeight": 50, + "_overflow": 1, + "_enableWrapText": false, + "_font": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_isItalic": false, + "_isBold": false, + "_isUnderline": false, + "_underlineHeight": 2, + "_cacheMode": 0, + "_id": "6eYbXQWM5AyJQzfvuIjLUU" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 47 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 300, + "height": 100 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "1ca57lEoRKfp4npq7Lx/Do" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 47 + }, + "_enabled": true, + "__prefab": null, + "_customMaterial": null, + "_srcBlendFactor": 2, + "_dstBlendFactor": 4, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_spriteFrame": { + "__uuid__": "20835ba4-6145-4fbc-a58a-051ce700aa3e@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + "_type": 1, + "_fillType": 0, + "_sizeMode": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_useGrayscale": false, + "_atlas": null, + "_id": "169DDSzDFEkpOwBaSEKSmE" + }, + { + "__type__": "cc.Button", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 47 + }, + "_enabled": true, + "__prefab": null, + "clickEvents": [ + { + "__id__": 54 + } + ], + "_interactable": true, + "_transition": 2, + "_normalColor": { + "__type__": "cc.Color", + "r": 214, + "g": 214, + "b": 214, + "a": 255 + }, + "_hoverColor": { + "__type__": "cc.Color", + "r": 211, + "g": 211, + "b": 211, + "a": 255 + }, + "_pressedColor": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_disabledColor": { + "__type__": "cc.Color", + "r": 124, + "g": 124, + "b": 124, + "a": 255 + }, + "_normalSprite": { + "__uuid__": "20835ba4-6145-4fbc-a58a-051ce700aa3e@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + "_hoverSprite": { + "__uuid__": "20835ba4-6145-4fbc-a58a-051ce700aa3e@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + "_pressedSprite": { + "__uuid__": "544e49d6-3f05-4fa8-9a9e-091f98fc2ce8@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + "_disabledSprite": { + "__uuid__": "951249e0-9f16-456d-8b85-a6ca954da16b@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + "_duration": 0.1, + "_zoomScale": 1.2, + "_target": { + "__id__": 47 + }, + "_id": "eahyvLMlFDUqN+gcE1TkCM" + }, + { + "__type__": "cc.ClickEvent", + "target": { + "__id__": 2 + }, + "component": "", + "_componentId": "a14b40zxfhFXKk12/1/OrYr", + "handler": "createRoom", + "customEventData": "" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 47 + }, + "_enabled": true, + "__prefab": null, + "_alignFlags": 36, + "_target": null, + "_left": 0, + "_right": 0, + "_top": 0, + "_bottom": 0, + "_horizontalCenter": 0, + "_verticalCenter": 0, + "_isAbsLeft": true, + "_isAbsRight": true, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 0, + "_originalHeight": 0, + "_alignMode": 2, + "_lockFlags": 0, + "_id": "61BcldmitPdY937FlzFch9" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 2 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 960, + "height": 640 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "d6rUX5yfhMlKoWX2bSbawx" + }, + { + "__type__": "cc.Canvas", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 2 + }, + "_enabled": true, + "__prefab": null, + "_cameraComponent": { + "__id__": 4 + }, + "_alignCanvasWithScreen": true, + "_id": "12O/ljcVlEqLmVm3U2gEOQ" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 2 + }, + "_enabled": true, + "__prefab": null, + "_alignFlags": 45, + "_target": null, + "_left": 0, + "_right": 0, + "_top": 5.684341886080802e-14, + "_bottom": 5.684341886080802e-14, + "_horizontalCenter": 0, + "_verticalCenter": 0, + "_isAbsLeft": true, + "_isAbsRight": true, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 0, + "_originalHeight": 0, + "_alignMode": 2, + "_lockFlags": 0, + "_id": "c5V1EV8IpMtrIvY1OE9t2u" + }, + { + "__type__": "a14b40zxfhFXKk12/1/OrYr", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 2 + }, + "_enabled": true, + "__prefab": null, + "playerContainer": { + "__id__": 23 + }, + "playerItem": { + "__uuid__": "7b0c739f-cf46-48f7-8c15-c97ab34268fe", + "__expectedType__": "cc.Prefab" + }, + "roomContainer": { + "__id__": 36 + }, + "roomItem": { + "__uuid__": "b91571d9-7804-4e62-b9d4-eef2f8f0cadd", + "__expectedType__": "cc.Prefab" + }, + "_id": "733asVq5ZPgqPusxBSAcw2" + }, + { + "__type__": "cc.PrefabInfo", + "fileId": "43b185e1-294e-4f6e-a660-e27f4cc5e45c" + }, + { + "__type__": "cc.SceneGlobals", + "ambient": { + "__id__": 62 + }, + "shadows": { + "__id__": 63 + }, + "_skybox": { + "__id__": 64 + }, + "fog": { + "__id__": 65 + }, + "octree": { + "__id__": 66 + } + }, + { + "__type__": "cc.AmbientInfo", + "_skyColorHDR": { + "__type__": "cc.Vec4", + "x": 0, + "y": 0, + "z": 0, + "w": 0.520833125 + }, + "_skyColor": { + "__type__": "cc.Vec4", + "x": 0, + "y": 0, + "z": 0, + "w": 0.520833125 + }, + "_skyIllumHDR": 20000, + "_skyIllum": 20000, + "_groundAlbedoHDR": { + "__type__": "cc.Vec4", + "x": 0, + "y": 0, + "z": 0, + "w": 0 + }, + "_groundAlbedo": { + "__type__": "cc.Vec4", + "x": 0, + "y": 0, + "z": 0, + "w": 0 + }, + "_skyColorLDR": { + "__type__": "cc.Vec4", + "x": 0.2, + "y": 0.5, + "z": 0.8, + "w": 1 + }, + "_skyIllumLDR": 20000, + "_groundAlbedoLDR": { + "__type__": "cc.Vec4", + "x": 0.2, + "y": 0.2, + "z": 0.2, + "w": 1 + } + }, + { + "__type__": "cc.ShadowsInfo", + "_enabled": false, + "_type": 0, + "_normal": { + "__type__": "cc.Vec3", + "x": 0, + "y": 1, + "z": 0 + }, + "_distance": 0, + "_shadowColor": { + "__type__": "cc.Color", + "r": 76, + "g": 76, + "b": 76, + "a": 255 + }, + "_maxReceived": 4, + "_size": { + "__type__": "cc.Vec2", + "x": 512, + "y": 512 + } + }, + { + "__type__": "cc.SkyboxInfo", + "_envLightingType": 0, + "_envmapHDR": null, + "_envmap": null, + "_envmapLDR": null, + "_diffuseMapHDR": null, + "_diffuseMapLDR": null, + "_enabled": false, + "_useHDR": true, + "_editableMaterial": null, + "_reflectionHDR": null, + "_reflectionLDR": null + }, + { + "__type__": "cc.FogInfo", + "_type": 0, + "_fogColor": { + "__type__": "cc.Color", + "r": 200, + "g": 200, + "b": 200, + "a": 255 + }, + "_enabled": false, + "_fogDensity": 0.3, + "_fogStart": 0.5, + "_fogEnd": 300, + "_fogAtten": 5, + "_fogTop": 1.5, + "_fogRange": 1.2, + "_accurate": false + }, + { + "__type__": "cc.OctreeInfo", + "_enabled": false, + "_minPos": { + "__type__": "cc.Vec3", + "x": -1024, + "y": -1024, + "z": -1024 + }, + "_maxPos": { + "__type__": "cc.Vec3", + "x": 1024, + "y": 1024, + "z": 1024 + }, + "_depth": 8 + } +] \ No newline at end of file diff --git a/apps/client/assets/Scenes/Hall.scene.meta b/apps/client/assets/Scenes/Hall.scene.meta new file mode 100644 index 0000000..1ed45e5 --- /dev/null +++ b/apps/client/assets/Scenes/Hall.scene.meta @@ -0,0 +1,11 @@ +{ + "ver": "1.1.39", + "importer": "scene", + "imported": true, + "uuid": "43b185e1-294e-4f6e-a660-e27f4cc5e45c", + "files": [ + ".json" + ], + "subMetas": {}, + "userData": {} +} diff --git a/apps/client/assets/Scenes/Login.scene b/apps/client/assets/Scenes/Login.scene new file mode 100644 index 0000000..b65d4e0 --- /dev/null +++ b/apps/client/assets/Scenes/Login.scene @@ -0,0 +1,1254 @@ +[ + { + "__type__": "cc.SceneAsset", + "_name": "", + "_objFlags": 0, + "_native": "", + "scene": { + "__id__": 1 + } + }, + { + "__type__": "cc.Scene", + "_name": "Login", + "_objFlags": 0, + "_parent": null, + "_children": [ + { + "__id__": 2 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 33 + }, + "autoReleaseAssets": false, + "_globals": { + "__id__": 34 + }, + "_id": "6088b18f-3a16-4317-92e4-e7c904905e21" + }, + { + "__type__": "cc.Node", + "_name": "Canvas", + "_objFlags": 0, + "_parent": { + "__id__": 1 + }, + "_children": [ + { + "__id__": 3 + }, + { + "__id__": 5 + }, + { + "__id__": 9 + }, + { + "__id__": 20 + } + ], + "_active": true, + "_components": [ + { + "__id__": 29 + }, + { + "__id__": 30 + }, + { + "__id__": 31 + }, + { + "__id__": 32 + } + ], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": 480, + "y": 320.00000000000006, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 33554432, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "beI88Z2HpFELqR4T5EMHpg" + }, + { + "__type__": "cc.Node", + "_name": "Camera", + "_objFlags": 0, + "_parent": { + "__id__": 2 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 4 + } + ], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 1000 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 1073741824, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "ebFwiq8gBFaYpqYbdoDODe" + }, + { + "__type__": "cc.Camera", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 3 + }, + "_enabled": true, + "__prefab": null, + "_projection": 0, + "_priority": 1073741824, + "_fov": 45, + "_fovAxis": 0, + "_orthoHeight": 320, + "_near": 0, + "_far": 2000, + "_color": { + "__type__": "cc.Color", + "r": 0, + "g": 0, + "b": 0, + "a": 255 + }, + "_depth": 1, + "_stencil": 0, + "_clearFlags": 7, + "_rect": { + "__type__": "cc.Rect", + "x": 0, + "y": 0, + "width": 1, + "height": 1 + }, + "_aperture": 19, + "_shutter": 7, + "_iso": 0, + "_screenScale": 1, + "_visibility": 41943040, + "_targetTexture": null, + "_id": "63WIch3o5BEYRlXzTT0oWc" + }, + { + "__type__": "cc.Node", + "_name": "Map1", + "_objFlags": 0, + "__editorExtras__": {}, + "_parent": { + "__id__": 2 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 6 + }, + { + "__id__": 7 + }, + { + "__id__": 8 + } + ], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 1000 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 33554432, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "9e+qbGDmZCfr5wrANlbP7Q" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 5 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 960, + "height": 640 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "ddMThOH/BLYozYH9AMiUvu" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 5 + }, + "_enabled": true, + "__prefab": null, + "_customMaterial": null, + "_srcBlendFactor": 2, + "_dstBlendFactor": 4, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_spriteFrame": { + "__uuid__": "155ebd7e-9357-4155-acfc-fb5438af3d48@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + "_type": 2, + "_fillType": 0, + "_sizeMode": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_useGrayscale": false, + "_atlas": null, + "_id": "61YEhC/gNMZLk6crlqfO+V" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 5 + }, + "_enabled": true, + "__prefab": null, + "_alignFlags": 45, + "_target": null, + "_left": 0, + "_right": 0, + "_top": 0, + "_bottom": 0, + "_horizontalCenter": 0, + "_verticalCenter": 0, + "_isAbsLeft": true, + "_isAbsRight": true, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 1000, + "_originalHeight": 1000, + "_alignMode": 2, + "_lockFlags": 0, + "_id": "0cI8R2wsVD2ogRVGZQSb9n" + }, + { + "__type__": "cc.Node", + "_name": "Input", + "_objFlags": 0, + "_parent": { + "__id__": 2 + }, + "_children": [ + { + "__id__": 10 + }, + { + "__id__": 13 + } + ], + "_active": true, + "_components": [ + { + "__id__": 16 + }, + { + "__id__": 17 + }, + { + "__id__": 18 + }, + { + "__id__": 19 + } + ], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 33554432, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "6ehI3NOfdNgptuP22ruvKm" + }, + { + "__type__": "cc.Node", + "_name": "TEXT_LABEL", + "_objFlags": 0, + "_parent": { + "__id__": 9 + }, + "_children": [], + "_active": false, + "_components": [ + { + "__id__": 11 + }, + { + "__id__": 12 + } + ], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": -148, + "y": 30, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 33554432, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "0enzjTdTZM1rauhu46N78G" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 10 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 298, + "height": 60 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0, + "y": 1 + }, + "_id": "7bBlJ5rqxKZIKLnTkla8G3" + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 10 + }, + "_enabled": true, + "__prefab": null, + "_customMaterial": null, + "_srcBlendFactor": 2, + "_dstBlendFactor": 4, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_string": "", + "_horizontalAlign": 0, + "_verticalAlign": 1, + "_actualFontSize": 40, + "_fontSize": 20, + "_fontFamily": "Arial", + "_lineHeight": 40, + "_overflow": 1, + "_enableWrapText": false, + "_font": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_isItalic": false, + "_isBold": false, + "_isUnderline": false, + "_underlineHeight": 2, + "_cacheMode": 0, + "_id": "bcQvDfx0hE2q3/vc5LsOTw" + }, + { + "__type__": "cc.Node", + "_name": "PLACEHOLDER_LABEL", + "_objFlags": 0, + "_parent": { + "__id__": 9 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 14 + }, + { + "__id__": 15 + } + ], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": -148, + "y": 30, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 33554432, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "96gvnX9sRNga+m+D8/eLBi" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 13 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 298, + "height": 60 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0, + "y": 1 + }, + "_id": "eclVQMysFMZ7IKTEAerpdI" + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 13 + }, + "_enabled": true, + "__prefab": null, + "_customMaterial": null, + "_srcBlendFactor": 2, + "_dstBlendFactor": 4, + "_color": { + "__type__": "cc.Color", + "r": 187, + "g": 187, + "b": 187, + "a": 255 + }, + "_string": "请输入昵称", + "_horizontalAlign": 0, + "_verticalAlign": 1, + "_actualFontSize": 20, + "_fontSize": 20, + "_fontFamily": "Arial", + "_lineHeight": 60, + "_overflow": 1, + "_enableWrapText": false, + "_font": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_isItalic": false, + "_isBold": false, + "_isUnderline": false, + "_underlineHeight": 2, + "_cacheMode": 0, + "_id": "d2rOWJFMpPAI/EiRjDZJjO" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 9 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 300, + "height": 60 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "e8Ho/RB09PTIg6DxXb22xl" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 9 + }, + "_enabled": true, + "__prefab": null, + "_customMaterial": null, + "_srcBlendFactor": 2, + "_dstBlendFactor": 4, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_spriteFrame": { + "__uuid__": "bd1bcaba-bd7d-4a71-b143-997c882383e4@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + "_type": 1, + "_fillType": 0, + "_sizeMode": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_useGrayscale": false, + "_atlas": null, + "_id": "d8HsmjZEBDjKWg7ZJJllo4" + }, + { + "__type__": "cc.EditBox", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 9 + }, + "_enabled": true, + "__prefab": null, + "editingDidBegan": [], + "textChanged": [], + "editingDidEnded": [], + "editingReturn": [], + "_textLabel": { + "__id__": 12 + }, + "_placeholderLabel": { + "__id__": 15 + }, + "_returnType": 0, + "_string": "", + "_tabIndex": 0, + "_backgroundImage": { + "__uuid__": "bd1bcaba-bd7d-4a71-b143-997c882383e4@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + "_inputFlag": 5, + "_inputMode": 6, + "_maxLength": 8, + "_id": "dcC3iW7clLUrOEMlO6F86J" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 9 + }, + "_enabled": true, + "__prefab": null, + "_alignFlags": 18, + "_target": null, + "_left": 0, + "_right": 0, + "_top": 200, + "_bottom": 0, + "_horizontalCenter": 0, + "_verticalCenter": 0, + "_isAbsLeft": true, + "_isAbsRight": true, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 0, + "_originalHeight": 0, + "_alignMode": 2, + "_lockFlags": 0, + "_id": "b4dLNndXxBBKgGOwEzHaEo" + }, + { + "__type__": "cc.Node", + "_name": "Button", + "_objFlags": 0, + "_parent": { + "__id__": 2 + }, + "_children": [ + { + "__id__": 21 + } + ], + "_active": true, + "_components": [ + { + "__id__": 24 + }, + { + "__id__": 25 + }, + { + "__id__": 26 + }, + { + "__id__": 28 + } + ], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": 0, + "y": -100, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 33554432, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "c8RJ709a9DWIFoy2vKzcIf" + }, + { + "__type__": "cc.Node", + "_name": "Label", + "_objFlags": 512, + "_parent": { + "__id__": 20 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 22 + }, + { + "__id__": 23 + } + ], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 33554432, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "03lspXt3JClaLZzvmzDOig" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 21 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 100, + "height": 40 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "baYmnr83xBX4k/DZswg9lP" + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 21 + }, + "_enabled": true, + "__prefab": null, + "_customMaterial": null, + "_srcBlendFactor": 2, + "_dstBlendFactor": 4, + "_color": { + "__type__": "cc.Color", + "r": 0, + "g": 0, + "b": 0, + "a": 255 + }, + "_string": "登录", + "_horizontalAlign": 1, + "_verticalAlign": 1, + "_actualFontSize": 20, + "_fontSize": 20, + "_fontFamily": "Arial", + "_lineHeight": 40, + "_overflow": 1, + "_enableWrapText": false, + "_font": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_isItalic": false, + "_isBold": false, + "_isUnderline": false, + "_underlineHeight": 2, + "_cacheMode": 0, + "_id": "29ZAiiZftFK6+ugn92CgTC" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 20 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 300, + "height": 60 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "38yNttjutBZaKeLe14AOpJ" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 20 + }, + "_enabled": true, + "__prefab": null, + "_customMaterial": null, + "_srcBlendFactor": 2, + "_dstBlendFactor": 4, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_spriteFrame": { + "__uuid__": "20835ba4-6145-4fbc-a58a-051ce700aa3e@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + "_type": 1, + "_fillType": 0, + "_sizeMode": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_useGrayscale": false, + "_atlas": null, + "_id": "d22747Od5Eb6eUpp8tH1I8" + }, + { + "__type__": "cc.Button", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 20 + }, + "_enabled": true, + "__prefab": null, + "clickEvents": [ + { + "__id__": 27 + } + ], + "_interactable": true, + "_transition": 3, + "_normalColor": { + "__type__": "cc.Color", + "r": 214, + "g": 214, + "b": 214, + "a": 255 + }, + "_hoverColor": { + "__type__": "cc.Color", + "r": 211, + "g": 211, + "b": 211, + "a": 255 + }, + "_pressedColor": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_disabledColor": { + "__type__": "cc.Color", + "r": 124, + "g": 124, + "b": 124, + "a": 255 + }, + "_normalSprite": { + "__uuid__": "20835ba4-6145-4fbc-a58a-051ce700aa3e@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + "_hoverSprite": { + "__uuid__": "20835ba4-6145-4fbc-a58a-051ce700aa3e@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + "_pressedSprite": { + "__uuid__": "544e49d6-3f05-4fa8-9a9e-091f98fc2ce8@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + "_disabledSprite": { + "__uuid__": "951249e0-9f16-456d-8b85-a6ca954da16b@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + "_duration": 0.1, + "_zoomScale": 0.9, + "_target": { + "__id__": 20 + }, + "_id": "faHxqUqfdHcrkCelicT+hw" + }, + { + "__type__": "cc.ClickEvent", + "target": { + "__id__": 2 + }, + "component": "", + "_componentId": "3be66gGxzZBnLbMDaseE8va", + "handler": "handleClick", + "customEventData": "" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 20 + }, + "_enabled": true, + "__prefab": null, + "_alignFlags": 18, + "_target": null, + "_left": 0, + "_right": 0, + "_top": 0, + "_bottom": 0, + "_horizontalCenter": 0, + "_verticalCenter": -100, + "_isAbsLeft": true, + "_isAbsRight": true, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 0, + "_originalHeight": 0, + "_alignMode": 2, + "_lockFlags": 0, + "_id": "c0PoDM3JJCM59OZGWGzO/n" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 2 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 960, + "height": 640 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "d6rUX5yfhMlKoWX2bSbawx" + }, + { + "__type__": "cc.Canvas", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 2 + }, + "_enabled": true, + "__prefab": null, + "_cameraComponent": { + "__id__": 4 + }, + "_alignCanvasWithScreen": true, + "_id": "12O/ljcVlEqLmVm3U2gEOQ" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 2 + }, + "_enabled": true, + "__prefab": null, + "_alignFlags": 45, + "_target": null, + "_left": 0, + "_right": 0, + "_top": 5.684341886080802e-14, + "_bottom": 5.684341886080802e-14, + "_horizontalCenter": 0, + "_verticalCenter": 0, + "_isAbsLeft": true, + "_isAbsRight": true, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 0, + "_originalHeight": 0, + "_alignMode": 2, + "_lockFlags": 0, + "_id": "c5V1EV8IpMtrIvY1OE9t2u" + }, + { + "__type__": "3be66gGxzZBnLbMDaseE8va", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 2 + }, + "_enabled": true, + "__prefab": null, + "_id": "67IB/TeGZBTK7ZWyKCTxCl" + }, + { + "__type__": "cc.PrefabInfo", + "fileId": "6088b18f-3a16-4317-92e4-e7c904905e21" + }, + { + "__type__": "cc.SceneGlobals", + "ambient": { + "__id__": 35 + }, + "shadows": { + "__id__": 36 + }, + "_skybox": { + "__id__": 37 + }, + "fog": { + "__id__": 38 + }, + "octree": { + "__id__": 39 + } + }, + { + "__type__": "cc.AmbientInfo", + "_skyColorHDR": { + "__type__": "cc.Vec4", + "x": 0, + "y": 0, + "z": 0, + "w": 0.520833125 + }, + "_skyColor": { + "__type__": "cc.Vec4", + "x": 0, + "y": 0, + "z": 0, + "w": 0.520833125 + }, + "_skyIllumHDR": 20000, + "_skyIllum": 20000, + "_groundAlbedoHDR": { + "__type__": "cc.Vec4", + "x": 0, + "y": 0, + "z": 0, + "w": 0 + }, + "_groundAlbedo": { + "__type__": "cc.Vec4", + "x": 0, + "y": 0, + "z": 0, + "w": 0 + }, + "_skyColorLDR": { + "__type__": "cc.Vec4", + "x": 0.2, + "y": 0.5, + "z": 0.8, + "w": 1 + }, + "_skyIllumLDR": 20000, + "_groundAlbedoLDR": { + "__type__": "cc.Vec4", + "x": 0.2, + "y": 0.2, + "z": 0.2, + "w": 1 + } + }, + { + "__type__": "cc.ShadowsInfo", + "_enabled": false, + "_type": 0, + "_normal": { + "__type__": "cc.Vec3", + "x": 0, + "y": 1, + "z": 0 + }, + "_distance": 0, + "_shadowColor": { + "__type__": "cc.Color", + "r": 76, + "g": 76, + "b": 76, + "a": 255 + }, + "_maxReceived": 4, + "_size": { + "__type__": "cc.Vec2", + "x": 512, + "y": 512 + } + }, + { + "__type__": "cc.SkyboxInfo", + "_envLightingType": 0, + "_envmapHDR": null, + "_envmap": null, + "_envmapLDR": null, + "_diffuseMapHDR": null, + "_diffuseMapLDR": null, + "_enabled": false, + "_useHDR": true, + "_editableMaterial": null, + "_reflectionHDR": null, + "_reflectionLDR": null + }, + { + "__type__": "cc.FogInfo", + "_type": 0, + "_fogColor": { + "__type__": "cc.Color", + "r": 200, + "g": 200, + "b": 200, + "a": 255 + }, + "_enabled": false, + "_fogDensity": 0.3, + "_fogStart": 0.5, + "_fogEnd": 300, + "_fogAtten": 5, + "_fogTop": 1.5, + "_fogRange": 1.2, + "_accurate": false + }, + { + "__type__": "cc.OctreeInfo", + "_enabled": false, + "_minPos": { + "__type__": "cc.Vec3", + "x": -1024, + "y": -1024, + "z": -1024 + }, + "_maxPos": { + "__type__": "cc.Vec3", + "x": 1024, + "y": 1024, + "z": 1024 + }, + "_depth": 8 + } +] \ No newline at end of file diff --git a/apps/client/assets/Scenes/Login.scene.meta b/apps/client/assets/Scenes/Login.scene.meta new file mode 100644 index 0000000..ccc252d --- /dev/null +++ b/apps/client/assets/Scenes/Login.scene.meta @@ -0,0 +1,11 @@ +{ + "ver": "1.1.39", + "importer": "scene", + "imported": true, + "uuid": "6088b18f-3a16-4317-92e4-e7c904905e21", + "files": [ + ".json" + ], + "subMetas": {}, + "userData": {} +} diff --git a/apps/client/assets/Scenes/Room.scene b/apps/client/assets/Scenes/Room.scene new file mode 100644 index 0000000..cd03035 --- /dev/null +++ b/apps/client/assets/Scenes/Room.scene @@ -0,0 +1,1842 @@ +[ + { + "__type__": "cc.SceneAsset", + "_name": "", + "_objFlags": 0, + "_native": "", + "scene": { + "__id__": 1 + } + }, + { + "__type__": "cc.Scene", + "_name": "Room", + "_objFlags": 0, + "_parent": null, + "_children": [ + { + "__id__": 2 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 50 + }, + "autoReleaseAssets": false, + "_globals": { + "__id__": 51 + }, + "_id": "af1ea920-28ec-466e-9318-0fc537171240" + }, + { + "__type__": "cc.Node", + "_name": "Canvas", + "_objFlags": 0, + "_parent": { + "__id__": 1 + }, + "_children": [ + { + "__id__": 3 + }, + { + "__id__": 5 + }, + { + "__id__": 9 + }, + { + "__id__": 13 + }, + { + "__id__": 17 + }, + { + "__id__": 30 + }, + { + "__id__": 38 + } + ], + "_active": true, + "_components": [ + { + "__id__": 46 + }, + { + "__id__": 47 + }, + { + "__id__": 48 + }, + { + "__id__": 49 + } + ], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": 480, + "y": 320.00000000000006, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 33554432, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "beI88Z2HpFELqR4T5EMHpg" + }, + { + "__type__": "cc.Node", + "_name": "Camera", + "_objFlags": 0, + "_parent": { + "__id__": 2 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 4 + } + ], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 1000 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 1073741824, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "ebFwiq8gBFaYpqYbdoDODe" + }, + { + "__type__": "cc.Camera", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 3 + }, + "_enabled": true, + "__prefab": null, + "_projection": 0, + "_priority": 1073741824, + "_fov": 45, + "_fovAxis": 0, + "_orthoHeight": 320, + "_near": 0, + "_far": 2000, + "_color": { + "__type__": "cc.Color", + "r": 0, + "g": 0, + "b": 0, + "a": 255 + }, + "_depth": 1, + "_stencil": 0, + "_clearFlags": 7, + "_rect": { + "__type__": "cc.Rect", + "x": 0, + "y": 0, + "width": 1, + "height": 1 + }, + "_aperture": 19, + "_shutter": 7, + "_iso": 0, + "_screenScale": 1, + "_visibility": 41943040, + "_targetTexture": null, + "_id": "63WIch3o5BEYRlXzTT0oWc" + }, + { + "__type__": "cc.Node", + "_name": "Map1", + "_objFlags": 0, + "__editorExtras__": {}, + "_parent": { + "__id__": 2 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 6 + }, + { + "__id__": 7 + }, + { + "__id__": 8 + } + ], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 33554432, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "e62ArZSltGvbqbQFGDLqKa" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 5 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 960, + "height": 640 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "84k0UfMTlGOpHtW4/p1rAO" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 5 + }, + "_enabled": true, + "__prefab": null, + "_customMaterial": null, + "_srcBlendFactor": 2, + "_dstBlendFactor": 4, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_spriteFrame": { + "__uuid__": "155ebd7e-9357-4155-acfc-fb5438af3d48@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + "_type": 2, + "_fillType": 0, + "_sizeMode": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_useGrayscale": false, + "_atlas": null, + "_id": "fbmDx7FHFEzrqZZq4AVBjA" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 5 + }, + "_enabled": true, + "__prefab": null, + "_alignFlags": 45, + "_target": null, + "_left": 0, + "_right": 0, + "_top": 0, + "_bottom": 0, + "_horizontalCenter": 0, + "_verticalCenter": 0, + "_isAbsLeft": true, + "_isAbsRight": true, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 1000, + "_originalHeight": 1000, + "_alignMode": 2, + "_lockFlags": 0, + "_id": "54i6TkOtFOlIdQcCf3TlrB" + }, + { + "__type__": "cc.Node", + "_name": "Label", + "_objFlags": 0, + "_parent": { + "__id__": 2 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 10 + }, + { + "__id__": 11 + }, + { + "__id__": 12 + } + ], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": 0, + "y": 249.6, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 33554432, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "c5TQEdZetN4ZAGUebpc4+M" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 9 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 160, + "height": 100.8 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "c8U/Yc9L9AWaXjYgpPvrDq" + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 9 + }, + "_enabled": true, + "__prefab": null, + "_customMaterial": null, + "_srcBlendFactor": 2, + "_dstBlendFactor": 4, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_string": "房间", + "_horizontalAlign": 1, + "_verticalAlign": 1, + "_actualFontSize": 80, + "_fontSize": 80, + "_fontFamily": "Arial", + "_lineHeight": 80, + "_overflow": 0, + "_enableWrapText": true, + "_font": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_isItalic": false, + "_isBold": false, + "_isUnderline": false, + "_underlineHeight": 2, + "_cacheMode": 0, + "_id": "dfaMZkQLFL2rNd1nJNynIU" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 9 + }, + "_enabled": true, + "__prefab": null, + "_alignFlags": 1, + "_target": null, + "_left": 0, + "_right": 0, + "_top": 20, + "_bottom": 0, + "_horizontalCenter": 0, + "_verticalCenter": 0, + "_isAbsLeft": true, + "_isAbsRight": true, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 0, + "_originalHeight": 0, + "_alignMode": 2, + "_lockFlags": 0, + "_id": "d4ofRUhrRIPIwVxu50p/P8" + }, + { + "__type__": "cc.Node", + "_name": "Label-001", + "_objFlags": 0, + "_parent": { + "__id__": 2 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 14 + }, + { + "__id__": 15 + }, + { + "__id__": 16 + } + ], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": -370, + "y": 162.2, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 33554432, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "05D/N+QGNIxYL+hAppoxrk" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 13 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 120, + "height": 75.6 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "48AqZc3AFMZrH8JrD3eYU1" + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 13 + }, + "_enabled": true, + "__prefab": null, + "_customMaterial": null, + "_srcBlendFactor": 2, + "_dstBlendFactor": 4, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_string": "玩家", + "_horizontalAlign": 1, + "_verticalAlign": 1, + "_actualFontSize": 60, + "_fontSize": 60, + "_fontFamily": "Arial", + "_lineHeight": 60, + "_overflow": 0, + "_enableWrapText": true, + "_font": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_isItalic": false, + "_isBold": false, + "_isUnderline": false, + "_underlineHeight": 2, + "_cacheMode": 0, + "_id": "6dLRE782xGmoOk1wraAOOy" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 13 + }, + "_enabled": true, + "__prefab": null, + "_alignFlags": 9, + "_target": null, + "_left": 50, + "_right": 0, + "_top": 120, + "_bottom": 0, + "_horizontalCenter": 0, + "_verticalCenter": 0, + "_isAbsLeft": true, + "_isAbsRight": true, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 0, + "_originalHeight": 0, + "_alignMode": 2, + "_lockFlags": 0, + "_id": "f5y2qrNWxBpL3hRrvZIUSc" + }, + { + "__type__": "cc.Node", + "_name": "ScrollView", + "_objFlags": 0, + "_parent": { + "__id__": 2 + }, + "_children": [ + { + "__id__": 18 + } + ], + "_active": true, + "_components": [ + { + "__id__": 26 + }, + { + "__id__": 27 + }, + { + "__id__": 28 + }, + { + "__id__": 29 + } + ], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": -180, + "y": -84.394, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 33554432, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "5coecZ9jdGDKQnLDCRfmQ9" + }, + { + "__type__": "cc.Node", + "_name": "view", + "_objFlags": 0, + "_parent": { + "__id__": 17 + }, + "_children": [ + { + "__id__": 19 + } + ], + "_active": true, + "_components": [ + { + "__id__": 23 + }, + { + "__id__": 24 + }, + { + "__id__": 25 + } + ], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 33554432, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "e0f4p49i5AlJiY8P337KgB" + }, + { + "__type__": "cc.Node", + "_name": "content", + "_objFlags": 0, + "_parent": { + "__id__": 18 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 20 + }, + { + "__id__": 21 + }, + { + "__id__": 22 + } + ], + "_prefab": null, + "_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 + }, + "_layer": 33554432, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "d393pp6aBNRYCJLl23OnK5" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 19 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 500, + "height": 400 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 1 + }, + "_id": "83hz+uC7VJJbtcxTz2e82Y" + }, + { + "__type__": "cc.Layout", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 19 + }, + "_enabled": true, + "__prefab": null, + "_resizeMode": 0, + "_layoutType": 2, + "_cellSize": { + "__type__": "cc.Size", + "width": 40, + "height": 40 + }, + "_startAxis": 0, + "_paddingLeft": 0, + "_paddingRight": 0, + "_paddingTop": 10, + "_paddingBottom": 0, + "_spacingX": 0, + "_spacingY": 0, + "_verticalDirection": 1, + "_horizontalDirection": 0, + "_constraint": 0, + "_constraintNum": 2, + "_affectedByScale": false, + "_isAlign": false, + "_id": "87TYdlHR9JKpJikpE/AcUH" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 19 + }, + "_enabled": true, + "__prefab": null, + "_alignFlags": 17, + "_target": null, + "_left": 0, + "_right": 0, + "_top": 0, + "_bottom": 0, + "_horizontalCenter": 0, + "_verticalCenter": 0, + "_isAbsLeft": true, + "_isAbsRight": true, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 0, + "_originalHeight": 0, + "_alignMode": 2, + "_lockFlags": 0, + "_id": "97r99ABD9JmJqRVn+8fBJV" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 18 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 500, + "height": 400 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "33SmowOXVH7Z5ly1eS+7Dp" + }, + { + "__type__": "cc.Mask", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 18 + }, + "_enabled": true, + "__prefab": null, + "_customMaterial": null, + "_srcBlendFactor": 2, + "_dstBlendFactor": 4, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_type": 0, + "_inverted": false, + "_segments": 64, + "_spriteFrame": null, + "_alphaThreshold": 0.1, + "_id": "2fBJuJumFFboXhTz+Tb7pC" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 18 + }, + "_enabled": true, + "__prefab": null, + "_alignFlags": 45, + "_target": null, + "_left": 0, + "_right": 0, + "_top": 0, + "_bottom": 0, + "_horizontalCenter": 0, + "_verticalCenter": 0, + "_isAbsLeft": true, + "_isAbsRight": true, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 240, + "_originalHeight": 250, + "_alignMode": 2, + "_lockFlags": 0, + "_id": "ceJeHEv85DFLItn6AN0uPu" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 17 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 500, + "height": 400 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "42QKfHnThLNaJSbfy5k/0S" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 17 + }, + "_enabled": true, + "__prefab": null, + "_customMaterial": null, + "_srcBlendFactor": 2, + "_dstBlendFactor": 4, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_spriteFrame": null, + "_type": 1, + "_fillType": 0, + "_sizeMode": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_useGrayscale": false, + "_atlas": null, + "_id": "3eEjXuAVJKwYVTtdUSDmtK" + }, + { + "__type__": "cc.ScrollView", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 17 + }, + "_enabled": true, + "__prefab": null, + "bounceDuration": 0.23, + "brake": 0.75, + "elastic": true, + "inertia": true, + "horizontal": false, + "vertical": true, + "cancelInnerEvents": true, + "scrollEvents": [], + "_content": { + "__id__": 19 + }, + "_horizontalScrollBar": null, + "_verticalScrollBar": null, + "_id": "e0yQ106oVH+LfviQRoyoJs" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 17 + }, + "_enabled": true, + "__prefab": null, + "_alignFlags": 8, + "_target": null, + "_left": 50, + "_right": 0, + "_top": 0, + "_bottom": 0, + "_horizontalCenter": 0, + "_verticalCenter": 0, + "_isAbsLeft": true, + "_isAbsRight": true, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 0, + "_originalHeight": 0, + "_alignMode": 2, + "_lockFlags": 0, + "_id": "0ahd12krdKnahmDx+ve2MR" + }, + { + "__type__": "cc.Node", + "_name": "Button", + "_objFlags": 0, + "_parent": { + "__id__": 2 + }, + "_children": [ + { + "__id__": 31 + } + ], + "_active": true, + "_components": [ + { + "__id__": 34 + }, + { + "__id__": 35 + }, + { + "__id__": 36 + } + ], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": 302.088, + "y": -140.568, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 33554432, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "06r+XFOiJE444aUZWsK4yH" + }, + { + "__type__": "cc.Node", + "_name": "Label", + "_objFlags": 512, + "_parent": { + "__id__": 30 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 32 + }, + { + "__id__": 33 + } + ], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 33554432, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "ecE2afLlFDWoFwA99o5OBt" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 31 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 100, + "height": 40 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "b0iP4jigxOFaMnsIxCEHav" + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 31 + }, + "_enabled": true, + "__prefab": null, + "_customMaterial": null, + "_srcBlendFactor": 2, + "_dstBlendFactor": 4, + "_color": { + "__type__": "cc.Color", + "r": 0, + "g": 0, + "b": 0, + "a": 255 + }, + "_string": "开始游戏", + "_horizontalAlign": 1, + "_verticalAlign": 1, + "_actualFontSize": 20, + "_fontSize": 20, + "_fontFamily": "Arial", + "_lineHeight": 40, + "_overflow": 1, + "_enableWrapText": false, + "_font": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_isItalic": false, + "_isBold": false, + "_isUnderline": false, + "_underlineHeight": 2, + "_cacheMode": 0, + "_id": "31qjYpiqpApqQ4qCgGOwQ7" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 30 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 300, + "height": 80 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "86BO75Yx1Fc7IO7AJi2S3f" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 30 + }, + "_enabled": true, + "__prefab": null, + "_customMaterial": null, + "_srcBlendFactor": 2, + "_dstBlendFactor": 4, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_spriteFrame": { + "__uuid__": "20835ba4-6145-4fbc-a58a-051ce700aa3e@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + "_type": 1, + "_fillType": 0, + "_sizeMode": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_useGrayscale": false, + "_atlas": null, + "_id": "7fbFsJBclEPZWz8RhNdFse" + }, + { + "__type__": "cc.Button", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 30 + }, + "_enabled": true, + "__prefab": null, + "clickEvents": [ + { + "__id__": 37 + } + ], + "_interactable": true, + "_transition": 0, + "_normalColor": { + "__type__": "cc.Color", + "r": 214, + "g": 214, + "b": 214, + "a": 255 + }, + "_hoverColor": { + "__type__": "cc.Color", + "r": 211, + "g": 211, + "b": 211, + "a": 255 + }, + "_pressedColor": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_disabledColor": { + "__type__": "cc.Color", + "r": 124, + "g": 124, + "b": 124, + "a": 255 + }, + "_normalSprite": { + "__uuid__": "20835ba4-6145-4fbc-a58a-051ce700aa3e@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + "_hoverSprite": { + "__uuid__": "20835ba4-6145-4fbc-a58a-051ce700aa3e@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + "_pressedSprite": { + "__uuid__": "544e49d6-3f05-4fa8-9a9e-091f98fc2ce8@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + "_disabledSprite": { + "__uuid__": "951249e0-9f16-456d-8b85-a6ca954da16b@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + "_duration": 0.1, + "_zoomScale": 1.2, + "_target": { + "__id__": 30 + }, + "_id": "f4bhldZ7FD5aRiU7e4eQB+" + }, + { + "__type__": "cc.ClickEvent", + "target": { + "__id__": 2 + }, + "component": "", + "_componentId": "8ee1b1zWztIraCgWh1qCNp9", + "handler": "handleGameStart", + "customEventData": "" + }, + { + "__type__": "cc.Node", + "_name": "Button-001", + "_objFlags": 0, + "_parent": { + "__id__": 2 + }, + "_children": [ + { + "__id__": 39 + } + ], + "_active": true, + "_components": [ + { + "__id__": 42 + }, + { + "__id__": 43 + }, + { + "__id__": 44 + } + ], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": 302.088, + "y": -248.863, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 33554432, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "eaJhvn65dGYps7l9QgBBDB" + }, + { + "__type__": "cc.Node", + "_name": "Label", + "_objFlags": 512, + "_parent": { + "__id__": 38 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 40 + }, + { + "__id__": 41 + } + ], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 33554432, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "2967akVRpKI50lnhmulD22" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 39 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 100, + "height": 40 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "292IPK6zhEQpQRMN//GlKY" + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 39 + }, + "_enabled": true, + "__prefab": null, + "_customMaterial": null, + "_srcBlendFactor": 2, + "_dstBlendFactor": 4, + "_color": { + "__type__": "cc.Color", + "r": 0, + "g": 0, + "b": 0, + "a": 255 + }, + "_string": "退出房间", + "_horizontalAlign": 1, + "_verticalAlign": 1, + "_actualFontSize": 20, + "_fontSize": 20, + "_fontFamily": "Arial", + "_lineHeight": 40, + "_overflow": 1, + "_enableWrapText": false, + "_font": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_isItalic": false, + "_isBold": false, + "_isUnderline": false, + "_underlineHeight": 2, + "_cacheMode": 0, + "_id": "455cJksTJEnLZvbNrX1fSJ" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 38 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 300, + "height": 80 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "e4e6niJwVMDqy1rYg9RGoV" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 38 + }, + "_enabled": true, + "__prefab": null, + "_customMaterial": null, + "_srcBlendFactor": 2, + "_dstBlendFactor": 4, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_spriteFrame": { + "__uuid__": "20835ba4-6145-4fbc-a58a-051ce700aa3e@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + "_type": 1, + "_fillType": 0, + "_sizeMode": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_useGrayscale": false, + "_atlas": null, + "_id": "bbSCWZ7jVPWKH1TNqT/YMO" + }, + { + "__type__": "cc.Button", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 38 + }, + "_enabled": true, + "__prefab": null, + "clickEvents": [ + { + "__id__": 45 + } + ], + "_interactable": true, + "_transition": 0, + "_normalColor": { + "__type__": "cc.Color", + "r": 214, + "g": 214, + "b": 214, + "a": 255 + }, + "_hoverColor": { + "__type__": "cc.Color", + "r": 211, + "g": 211, + "b": 211, + "a": 255 + }, + "_pressedColor": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_disabledColor": { + "__type__": "cc.Color", + "r": 124, + "g": 124, + "b": 124, + "a": 255 + }, + "_normalSprite": { + "__uuid__": "20835ba4-6145-4fbc-a58a-051ce700aa3e@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + "_hoverSprite": { + "__uuid__": "20835ba4-6145-4fbc-a58a-051ce700aa3e@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + "_pressedSprite": { + "__uuid__": "544e49d6-3f05-4fa8-9a9e-091f98fc2ce8@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + "_disabledSprite": { + "__uuid__": "951249e0-9f16-456d-8b85-a6ca954da16b@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + "_duration": 0.1, + "_zoomScale": 1.2, + "_target": { + "__id__": 38 + }, + "_id": "79NdqAVSdO85Wvv0F7cYVb" + }, + { + "__type__": "cc.ClickEvent", + "target": { + "__id__": 2 + }, + "component": "", + "_componentId": "8ee1b1zWztIraCgWh1qCNp9", + "handler": "handleLeave", + "customEventData": "" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 2 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 960, + "height": 640 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "d6rUX5yfhMlKoWX2bSbawx" + }, + { + "__type__": "cc.Canvas", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 2 + }, + "_enabled": true, + "__prefab": null, + "_cameraComponent": { + "__id__": 4 + }, + "_alignCanvasWithScreen": true, + "_id": "12O/ljcVlEqLmVm3U2gEOQ" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 2 + }, + "_enabled": true, + "__prefab": null, + "_alignFlags": 45, + "_target": null, + "_left": 0, + "_right": 0, + "_top": 5.684341886080802e-14, + "_bottom": 5.684341886080802e-14, + "_horizontalCenter": 0, + "_verticalCenter": 0, + "_isAbsLeft": true, + "_isAbsRight": true, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 0, + "_originalHeight": 0, + "_alignMode": 2, + "_lockFlags": 0, + "_id": "c5V1EV8IpMtrIvY1OE9t2u" + }, + { + "__type__": "8ee1b1zWztIraCgWh1qCNp9", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 2 + }, + "_enabled": true, + "__prefab": null, + "playerContainer": { + "__id__": 19 + }, + "playerItem": { + "__uuid__": "7b0c739f-cf46-48f7-8c15-c97ab34268fe", + "__expectedType__": "cc.Prefab" + }, + "_id": "06/JemyDxGwoVa1/Ph4yHa" + }, + { + "__type__": "cc.PrefabInfo", + "fileId": "af1ea920-28ec-466e-9318-0fc537171240" + }, + { + "__type__": "cc.SceneGlobals", + "ambient": { + "__id__": 52 + }, + "shadows": { + "__id__": 53 + }, + "_skybox": { + "__id__": 54 + }, + "fog": { + "__id__": 55 + }, + "octree": { + "__id__": 56 + } + }, + { + "__type__": "cc.AmbientInfo", + "_skyColorHDR": { + "__type__": "cc.Vec4", + "x": 0, + "y": 0, + "z": 0, + "w": 0.520833125 + }, + "_skyColor": { + "__type__": "cc.Vec4", + "x": 0, + "y": 0, + "z": 0, + "w": 0.520833125 + }, + "_skyIllumHDR": 20000, + "_skyIllum": 20000, + "_groundAlbedoHDR": { + "__type__": "cc.Vec4", + "x": 0, + "y": 0, + "z": 0, + "w": 0 + }, + "_groundAlbedo": { + "__type__": "cc.Vec4", + "x": 0, + "y": 0, + "z": 0, + "w": 0 + }, + "_skyColorLDR": { + "__type__": "cc.Vec4", + "x": 0.2, + "y": 0.5, + "z": 0.8, + "w": 1 + }, + "_skyIllumLDR": 20000, + "_groundAlbedoLDR": { + "__type__": "cc.Vec4", + "x": 0.2, + "y": 0.2, + "z": 0.2, + "w": 1 + } + }, + { + "__type__": "cc.ShadowsInfo", + "_enabled": false, + "_type": 0, + "_normal": { + "__type__": "cc.Vec3", + "x": 0, + "y": 1, + "z": 0 + }, + "_distance": 0, + "_shadowColor": { + "__type__": "cc.Color", + "r": 76, + "g": 76, + "b": 76, + "a": 255 + }, + "_maxReceived": 4, + "_size": { + "__type__": "cc.Vec2", + "x": 512, + "y": 512 + } + }, + { + "__type__": "cc.SkyboxInfo", + "_envLightingType": 0, + "_envmapHDR": null, + "_envmap": null, + "_envmapLDR": null, + "_diffuseMapHDR": null, + "_diffuseMapLDR": null, + "_enabled": false, + "_useHDR": true, + "_editableMaterial": null, + "_reflectionHDR": null, + "_reflectionLDR": null + }, + { + "__type__": "cc.FogInfo", + "_type": 0, + "_fogColor": { + "__type__": "cc.Color", + "r": 200, + "g": 200, + "b": 200, + "a": 255 + }, + "_enabled": false, + "_fogDensity": 0.3, + "_fogStart": 0.5, + "_fogEnd": 300, + "_fogAtten": 5, + "_fogTop": 1.5, + "_fogRange": 1.2, + "_accurate": false + }, + { + "__type__": "cc.OctreeInfo", + "_enabled": false, + "_minPos": { + "__type__": "cc.Vec3", + "x": -1024, + "y": -1024, + "z": -1024 + }, + "_maxPos": { + "__type__": "cc.Vec3", + "x": 1024, + "y": 1024, + "z": 1024 + }, + "_depth": 8 + } +] \ No newline at end of file diff --git a/apps/client/assets/Scenes/Room.scene.meta b/apps/client/assets/Scenes/Room.scene.meta new file mode 100644 index 0000000..630a865 --- /dev/null +++ b/apps/client/assets/Scenes/Room.scene.meta @@ -0,0 +1,11 @@ +{ + "ver": "1.1.39", + "importer": "scene", + "imported": true, + "uuid": "af1ea920-28ec-466e-9318-0fc537171240", + "files": [ + ".json" + ], + "subMetas": {}, + "userData": {} +} diff --git a/client/assets/Scripts.meta b/apps/client/assets/Scripts.meta similarity index 100% rename from client/assets/Scripts.meta rename to apps/client/assets/Scripts.meta diff --git a/client/assets/Scripts/Base.meta b/apps/client/assets/Scripts/Base.meta similarity index 100% rename from client/assets/Scripts/Base.meta rename to apps/client/assets/Scripts/Base.meta diff --git a/client/assets/Scripts/Base/EntityManager.ts b/apps/client/assets/Scripts/Base/EntityManager.ts similarity index 66% rename from client/assets/Scripts/Base/EntityManager.ts rename to apps/client/assets/Scripts/Base/EntityManager.ts index 1e58033..371641c 100644 --- a/client/assets/Scripts/Base/EntityManager.ts +++ b/apps/client/assets/Scripts/Base/EntityManager.ts @@ -1,5 +1,5 @@ -import { _decorator, Component, Node, Layers, UITransform, Sprite, KeyCode, Vec2, RigidBody2D, BoxCollider2D, Size, ERigidBody2DType } from 'cc'; -import { EntityEnum, EntityStateEnum } from '../Enum'; +import { _decorator, Component } from 'cc'; +import { EntityStateEnum } from '../Enum'; import StateMachine from './StateMachine'; const { ccclass, property } = _decorator; @@ -7,7 +7,7 @@ const { ccclass, property } = _decorator; export abstract class EntityManager extends Component { fsm: StateMachine private _state: EntityStateEnum - + get state() { return this._state diff --git a/client/assets/Scripts/Base/EntityManager.ts.meta b/apps/client/assets/Scripts/Base/EntityManager.ts.meta similarity index 100% rename from client/assets/Scripts/Base/EntityManager.ts.meta rename to apps/client/assets/Scripts/Base/EntityManager.ts.meta diff --git a/client/assets/Scripts/Base/Singleton.ts b/apps/client/assets/Scripts/Base/Singleton.ts similarity index 85% rename from client/assets/Scripts/Base/Singleton.ts rename to apps/client/assets/Scripts/Base/Singleton.ts index afad114..b755b94 100644 --- a/client/assets/Scripts/Base/Singleton.ts +++ b/apps/client/assets/Scripts/Base/Singleton.ts @@ -1,7 +1,3 @@ -/*** - * 泛型单例模式接口 - */ - export default class Singleton { private static _instance: any = null @@ -14,4 +10,4 @@ export default class Singleton { protected constructor() { } -} +} \ No newline at end of file diff --git a/client/assets/Scripts/Base/Singleton.ts.meta b/apps/client/assets/Scripts/Base/Singleton.ts.meta similarity index 100% rename from client/assets/Scripts/Base/Singleton.ts.meta rename to apps/client/assets/Scripts/Base/Singleton.ts.meta diff --git a/client/assets/Scripts/Base/State.ts b/apps/client/assets/Scripts/Base/State.ts similarity index 100% rename from client/assets/Scripts/Base/State.ts rename to apps/client/assets/Scripts/Base/State.ts diff --git a/client/assets/Scripts/Base/State.ts.meta b/apps/client/assets/Scripts/Base/State.ts.meta similarity index 100% rename from client/assets/Scripts/Base/State.ts.meta rename to apps/client/assets/Scripts/Base/State.ts.meta diff --git a/client/assets/Scripts/Base/StateMachine.ts b/apps/client/assets/Scripts/Base/StateMachine.ts similarity index 93% rename from client/assets/Scripts/Base/StateMachine.ts rename to apps/client/assets/Scripts/Base/StateMachine.ts index d6e16ac..82f875e 100644 --- a/client/assets/Scripts/Base/StateMachine.ts +++ b/apps/client/assets/Scripts/Base/StateMachine.ts @@ -1,5 +1,5 @@ -import { _decorator, Animation, Component, SpriteFrame } from 'cc' -import { FsmParamTypeEnum } from '../Enum' +import { _decorator, Animation, Component } from 'cc' +import { EntityTypeEnum, FsmParamTypeEnum } from '../Enum' const { ccclass } = _decorator import State from './State' import SubStateMachine from './SubStateMachine' @@ -44,6 +44,7 @@ export default abstract class StateMachine extends Component { params: Map = new Map() stateMachines: Map = new Map() animationComponent: Animation + type: EntityTypeEnum getParams(paramName: string) { if (this.params.has(paramName)) { diff --git a/client/assets/Scripts/Base/StateMachine.ts.meta b/apps/client/assets/Scripts/Base/StateMachine.ts.meta similarity index 100% rename from client/assets/Scripts/Base/StateMachine.ts.meta rename to apps/client/assets/Scripts/Base/StateMachine.ts.meta diff --git a/client/assets/Scripts/Base/SubStateMachine.ts b/apps/client/assets/Scripts/Base/SubStateMachine.ts similarity index 100% rename from client/assets/Scripts/Base/SubStateMachine.ts rename to apps/client/assets/Scripts/Base/SubStateMachine.ts diff --git a/client/assets/Scripts/Base/SubStateMachine.ts.meta b/apps/client/assets/Scripts/Base/SubStateMachine.ts.meta similarity index 100% rename from client/assets/Scripts/Base/SubStateMachine.ts.meta rename to apps/client/assets/Scripts/Base/SubStateMachine.ts.meta diff --git a/client/assets/Scripts/Entity.meta b/apps/client/assets/Scripts/Entity.meta similarity index 100% rename from client/assets/Scripts/Entity.meta rename to apps/client/assets/Scripts/Entity.meta diff --git a/client/assets/Scripts/Entity/Bullet.meta b/apps/client/assets/Scripts/Entity/Bullet.meta similarity index 100% rename from client/assets/Scripts/Entity/Bullet.meta rename to apps/client/assets/Scripts/Entity/Bullet.meta diff --git a/client/assets/Scripts/Entity/Bullet/BulletManager.ts b/apps/client/assets/Scripts/Entity/Bullet/BulletManager.ts similarity index 76% rename from client/assets/Scripts/Entity/Bullet/BulletManager.ts rename to apps/client/assets/Scripts/Entity/Bullet/BulletManager.ts index 4fe2b85..6f1759c 100644 --- a/client/assets/Scripts/Entity/Bullet/BulletManager.ts +++ b/apps/client/assets/Scripts/Entity/Bullet/BulletManager.ts @@ -1,20 +1,20 @@ -import { _decorator, Animation, AnimationClip, Node, Sprite, Vec3, Vec2, RigidBody2D, instantiate } from 'cc' +import { _decorator } from 'cc' import { EntityManager } from '../../Base/EntityManager' -import { EntityTypeEnum, EntityStateEnum, EventEnum, PrefabPathEnum } from '../../Enum' +import { EntityTypeEnum, EntityStateEnum, EventEnum } from '../../Enum' import DataManager, { IBullet, IVec2 } from '../../Global/DataManager' import EventManager from '../../Global/EventManager' import ObjectPoolManager from '../../Global/ObjectPoolManager' import { rad2Angle } from '../../Utils' import { ExplosionManager } from '../Explosion/ExplosionManager' import { BulletStateMachine } from './BulletStateMachine' -const { ccclass, property } = _decorator +const { ccclass } = _decorator @ccclass('BulletManager') export class BulletManager extends EntityManager { //静态数据 - id = 1 - owner = 1 - type = EntityTypeEnum.Bullet1 + id: number + owner: number + type: EntityTypeEnum //动态数据 position: IVec2 @@ -32,11 +32,7 @@ export class BulletManager extends EntityManager { this.state = EntityStateEnum.Idle this.node.active = false - EventManager.Instance.on(EventEnum.Explosion, this.handleExplosion, this) - } - - onDisable() { - EventManager.Instance.off(EventEnum.Explosion, this.handleExplosion, this) + EventManager.Instance.on(EventEnum.ExplosionBorn, this.handleExplosion, this) } handleExplosion(id: number, { x, y }: IVec2) { @@ -44,13 +40,16 @@ export class BulletManager extends EntityManager { return } - const explosion = ObjectPoolManager.Instance.getPoolObject(EntityTypeEnum.Explosion) + const explosion = ObjectPoolManager.Instance.get(EntityTypeEnum.Explosion) const explosionManager = explosion.getComponent(ExplosionManager) || explosion.addComponent(ExplosionManager) explosionManager.init(EntityTypeEnum.Explosion, { x, y, }) - ObjectPoolManager.Instance.returnPoolObject(this.node) + EventManager.Instance.off(EventEnum.ExplosionBorn, this.handleExplosion, this) + ObjectPoolManager.Instance.ret(this.node) + DataManager.Instance.bulletMap.delete(this.id) + this.angle = undefined } render(data: IBullet) { diff --git a/client/assets/Scripts/Entity/Bullet/BulletManager.ts.meta b/apps/client/assets/Scripts/Entity/Bullet/BulletManager.ts.meta similarity index 100% rename from client/assets/Scripts/Entity/Bullet/BulletManager.ts.meta rename to apps/client/assets/Scripts/Entity/Bullet/BulletManager.ts.meta diff --git a/client/assets/Scripts/Entity/Bullet/BulletStateMachine.ts b/apps/client/assets/Scripts/Entity/Bullet/BulletStateMachine.ts similarity index 76% rename from client/assets/Scripts/Entity/Bullet/BulletStateMachine.ts rename to apps/client/assets/Scripts/Entity/Bullet/BulletStateMachine.ts index 3f85759..33bd08c 100644 --- a/client/assets/Scripts/Entity/Bullet/BulletStateMachine.ts +++ b/apps/client/assets/Scripts/Entity/Bullet/BulletStateMachine.ts @@ -1,12 +1,11 @@ -import { _decorator, Animation, AnimationClip } from 'cc' +import { _decorator, Animation } from 'cc' import State from '../../Base/State' -import StateMachine, { getInitParamsNumber, getInitParamsTrigger } from '../../Base/StateMachine' -import { EntityTypeEnum, TexturePathEnum, EntityStateEnum, ParamsNameEnum } from '../../Enum' -const { ccclass, property } = _decorator +import StateMachine, { getInitParamsTrigger } from '../../Base/StateMachine' +import { EntityTypeEnum, EntityStateEnum, ParamsNameEnum } from '../../Enum' +const { ccclass } = _decorator @ccclass('BulletStateMachine') export class BulletStateMachine extends StateMachine { - type: EntityTypeEnum init(type: EntityTypeEnum) { this.type = type this.animationComponent = this.node.addComponent(Animation) diff --git a/client/assets/Scripts/Entity/Bullet/BulletStateMachine.ts.meta b/apps/client/assets/Scripts/Entity/Bullet/BulletStateMachine.ts.meta similarity index 100% rename from client/assets/Scripts/Entity/Bullet/BulletStateMachine.ts.meta rename to apps/client/assets/Scripts/Entity/Bullet/BulletStateMachine.ts.meta diff --git a/client/assets/Scripts/Entity/Explosion.meta b/apps/client/assets/Scripts/Entity/Explosion.meta similarity index 100% rename from client/assets/Scripts/Entity/Explosion.meta rename to apps/client/assets/Scripts/Entity/Explosion.meta diff --git a/client/assets/Scripts/Entity/Explosion/ExplosionManager.ts b/apps/client/assets/Scripts/Entity/Explosion/ExplosionManager.ts similarity index 66% rename from client/assets/Scripts/Entity/Explosion/ExplosionManager.ts rename to apps/client/assets/Scripts/Entity/Explosion/ExplosionManager.ts index 16718e4..8ecf726 100644 --- a/client/assets/Scripts/Entity/Explosion/ExplosionManager.ts +++ b/apps/client/assets/Scripts/Entity/Explosion/ExplosionManager.ts @@ -1,7 +1,7 @@ -import { _decorator, Animation, AnimationClip, Node, Sprite, Vec3, Vec2, RigidBody2D } from 'cc' +import { _decorator } from 'cc' import { EntityManager } from '../../Base/EntityManager' -import { EntityTypeEnum, EntityStateEnum, EventEnum } from '../../Enum' -import { IBullet, IVec2 } from '../../Global/DataManager' +import { EntityTypeEnum, EntityStateEnum } from '../../Enum' +import { IVec2 } from '../../Global/DataManager' import { ExplosionStateMachine } from './ExplosionStateMachine' const { ccclass, property } = _decorator diff --git a/client/assets/Scripts/Entity/Explosion/ExplosionManager.ts.meta b/apps/client/assets/Scripts/Entity/Explosion/ExplosionManager.ts.meta similarity index 100% rename from client/assets/Scripts/Entity/Explosion/ExplosionManager.ts.meta rename to apps/client/assets/Scripts/Entity/Explosion/ExplosionManager.ts.meta diff --git a/client/assets/Scripts/Entity/Explosion/ExplosionStateMachine.ts b/apps/client/assets/Scripts/Entity/Explosion/ExplosionStateMachine.ts similarity index 80% rename from client/assets/Scripts/Entity/Explosion/ExplosionStateMachine.ts rename to apps/client/assets/Scripts/Entity/Explosion/ExplosionStateMachine.ts index 60738e2..71edb61 100644 --- a/client/assets/Scripts/Entity/Explosion/ExplosionStateMachine.ts +++ b/apps/client/assets/Scripts/Entity/Explosion/ExplosionStateMachine.ts @@ -1,13 +1,12 @@ -import { _decorator, Animation, AnimationClip } from 'cc' +import { _decorator, Animation } from 'cc' import State from '../../Base/State' -import StateMachine, { getInitParamsNumber, getInitParamsTrigger } from '../../Base/StateMachine' -import { EntityTypeEnum, TexturePathEnum, EntityStateEnum, ParamsNameEnum } from '../../Enum' +import StateMachine, { getInitParamsTrigger } from '../../Base/StateMachine' +import { EntityTypeEnum, EntityStateEnum, ParamsNameEnum } from '../../Enum' import ObjectPoolManager from '../../Global/ObjectPoolManager' const { ccclass, property } = _decorator @ccclass('ExplosionStateMachine') export class ExplosionStateMachine extends StateMachine { - type: EntityTypeEnum init(type: EntityTypeEnum) { this.type = type this.animationComponent = this.node.addComponent(Animation) @@ -30,7 +29,7 @@ export class ExplosionStateMachine extends StateMachine { const whiteList = [EntityStateEnum.Idle] const name = this.animationComponent.defaultClip.name if (whiteList.some(v => name.includes(v))) { - ObjectPoolManager.Instance.returnPoolObject(this.node) + ObjectPoolManager.Instance.ret(this.node) } }) } diff --git a/client/assets/Scripts/Entity/Explosion/ExplosionStateMachine.ts.meta b/apps/client/assets/Scripts/Entity/Explosion/ExplosionStateMachine.ts.meta similarity index 100% rename from client/assets/Scripts/Entity/Explosion/ExplosionStateMachine.ts.meta rename to apps/client/assets/Scripts/Entity/Explosion/ExplosionStateMachine.ts.meta diff --git a/client/assets/Scripts/Entity/Player.meta b/apps/client/assets/Scripts/Entity/Player.meta similarity index 100% rename from client/assets/Scripts/Entity/Player.meta rename to apps/client/assets/Scripts/Entity/Player.meta diff --git a/client/assets/Scripts/Entity/Player/PlayerManager.ts b/apps/client/assets/Scripts/Entity/Player/PlayerManager.ts similarity index 77% rename from client/assets/Scripts/Entity/Player/PlayerManager.ts rename to apps/client/assets/Scripts/Entity/Player/PlayerManager.ts index 70dad68..0852c80 100644 --- a/client/assets/Scripts/Entity/Player/PlayerManager.ts +++ b/apps/client/assets/Scripts/Entity/Player/PlayerManager.ts @@ -1,22 +1,20 @@ -import { _decorator, Vec2, RigidBody2D, BoxCollider2D, Size, ERigidBody2DType, Prefab, instantiate, Input, ProgressBar, Label } from 'cc'; +import { _decorator, instantiate, ProgressBar, Label } from 'cc'; import { EntityManager } from '../../Base/EntityManager'; -import { EntityTypeEnum, EntityStateEnum, EventEnum, InputType, PrefabPathEnum } from '../../Enum'; +import { EntityTypeEnum, EntityStateEnum, InputType } from '../../Enum'; import DataManager, { IPlayer, IVec2 } from '../../Global/DataManager'; -import EventManager from '../../Global/EventManager'; -import { ResourceManager } from '../../Global/ResourceManager'; import { rad2Angle } from '../../Utils'; import { WeaponManager } from '../Weapon/WeaponManager'; import { PlayerStateMachine } from './PlayerStateMachine'; -const { ccclass, property } = _decorator; +const { ccclass } = _decorator; @ccclass('PlayerManager') export class PlayerManager extends EntityManager { //静态数据 - id = 1 - nickname = '' - type = EntityTypeEnum.Player1 - weaponType = EntityTypeEnum.Weapon1 - bulletType = EntityTypeEnum.Bullet1 + id: number + nickname: string + type: EntityTypeEnum + weaponType: EntityTypeEnum + bulletType: EntityTypeEnum //动态数据 hp: number @@ -24,7 +22,7 @@ export class PlayerManager extends EntityManager { direction: IVec2 private hpBar: ProgressBar - private nicknameLabel: Label + private label: Label private weapon: WeaponManager get isSelf() { @@ -40,11 +38,12 @@ export class PlayerManager extends EntityManager { this.bulletType = bulletType this.hpBar = this.node.getComponentInChildren(ProgressBar) - this.nicknameLabel = this.node.getComponentInChildren(Label) - this.nicknameLabel.string = data.nickname + this.label = this.node.getComponentInChildren(Label) + this.label.string = nickname this.fsm = this.addComponent(PlayerStateMachine) this.fsm.init(type) + this.state = EntityStateEnum.Idle const weaponPrefab = DataManager.Instance.prefabMap.get(this.weaponType) const weapon = instantiate(weaponPrefab) @@ -58,10 +57,6 @@ export class PlayerManager extends EntityManager { return } - // if (!DataManager.Instance.jm.input.length()) { - // return - // } - const { x, y } = DataManager.Instance.jm.input DataManager.Instance.applyInput({ type: InputType.PlayerMove, @@ -97,7 +92,7 @@ export class PlayerManager extends EntityManager { const { x, y } = data.direction if (x !== 0) { this.node.setScale(x > 0 ? 1 : -1, 1) - this.nicknameLabel.node.setScale(x > 0 ? 1 : -1, 1) + this.label.node.setScale(x > 0 ? 1 : -1, 1) } const side = Math.sqrt(x * x + y * y) const angle = rad2Angle(Math.asin(y / side)) diff --git a/client/assets/Scripts/Entity/Player/PlayerManager.ts.meta b/apps/client/assets/Scripts/Entity/Player/PlayerManager.ts.meta similarity index 100% rename from client/assets/Scripts/Entity/Player/PlayerManager.ts.meta rename to apps/client/assets/Scripts/Entity/Player/PlayerManager.ts.meta diff --git a/client/assets/Scripts/Entity/Player/PlayerStateMachine.ts b/apps/client/assets/Scripts/Entity/Player/PlayerStateMachine.ts similarity index 90% rename from client/assets/Scripts/Entity/Player/PlayerStateMachine.ts rename to apps/client/assets/Scripts/Entity/Player/PlayerStateMachine.ts index c014448..f8b950f 100644 --- a/client/assets/Scripts/Entity/Player/PlayerStateMachine.ts +++ b/apps/client/assets/Scripts/Entity/Player/PlayerStateMachine.ts @@ -1,13 +1,11 @@ import { _decorator, Animation, AnimationClip } from 'cc' import State from '../../Base/State' -import StateMachine, { getInitParamsNumber, getInitParamsTrigger } from '../../Base/StateMachine' +import StateMachine, { getInitParamsTrigger } from '../../Base/StateMachine' import { EntityTypeEnum, EntityStateEnum, ParamsNameEnum } from '../../Enum' -const { ccclass, property } = _decorator +const { ccclass } = _decorator @ccclass('PlayerStateMachine') export class PlayerStateMachine extends StateMachine { - type: EntityTypeEnum - init(type: EntityTypeEnum) { this.type = type this.animationComponent = this.node.addComponent(Animation) diff --git a/client/assets/Scripts/Entity/Player/PlayerStateMachine.ts.meta b/apps/client/assets/Scripts/Entity/Player/PlayerStateMachine.ts.meta similarity index 100% rename from client/assets/Scripts/Entity/Player/PlayerStateMachine.ts.meta rename to apps/client/assets/Scripts/Entity/Player/PlayerStateMachine.ts.meta diff --git a/client/assets/Scripts/Entity/Weapon.meta b/apps/client/assets/Scripts/Entity/Weapon.meta similarity index 100% rename from client/assets/Scripts/Entity/Weapon.meta rename to apps/client/assets/Scripts/Entity/Weapon.meta diff --git a/client/assets/Scripts/Entity/Weapon/WeaponManager.ts b/apps/client/assets/Scripts/Entity/Weapon/WeaponManager.ts similarity index 74% rename from client/assets/Scripts/Entity/Weapon/WeaponManager.ts rename to apps/client/assets/Scripts/Entity/Weapon/WeaponManager.ts index cc43014..b6151a6 100644 --- a/client/assets/Scripts/Entity/Weapon/WeaponManager.ts +++ b/apps/client/assets/Scripts/Entity/Weapon/WeaponManager.ts @@ -1,15 +1,15 @@ -import { _decorator, Animation, AnimationClip, Node, Sprite, Vec3, Vec2, UITransform } from 'cc' +import { _decorator, Node, Vec2, UITransform } from 'cc' import { EntityManager } from '../../Base/EntityManager' import { EntityTypeEnum, EntityStateEnum, EventEnum, InputType } from '../../Enum' import DataManager, { IPlayer } from '../../Global/DataManager' import EventManager from '../../Global/EventManager' import { WeaponStateMachine } from './WeaponStateMachine' -const { ccclass, property } = _decorator +const { ccclass } = _decorator @ccclass('WeaponManager') export class WeaponManager extends EntityManager { - owner = 1 - type = EntityTypeEnum.Weapon1 + owner: number + type: EntityTypeEnum private body: Node private anchor: Node @@ -21,7 +21,6 @@ export class WeaponManager extends EntityManager { init({ id, weaponType }: IPlayer) { this.owner = id - this.type = weaponType this.node.setSiblingIndex(0) @@ -33,27 +32,29 @@ export class WeaponManager extends EntityManager { this.fsm.init(weaponType) this.state = EntityStateEnum.Idle - EventManager.Instance.on(EventEnum.WeaponShoot, this.handleWeaponShoot, this) - this.isSelf && EventManager.Instance.on(EventEnum.ShootBtnClick, this.handleShootBtnClick, this) + EventManager.Instance.on(EventEnum.BulletBorn, this.handleBulletBorn, this) } onDestroy() { - this.isSelf && EventManager.Instance.off(EventEnum.ShootBtnClick, this.handleShootBtnClick, this) EventManager.Instance.off(EventEnum.WeaponShoot, this.handleWeaponShoot, this) + EventManager.Instance.off(EventEnum.BulletBorn, this.handleBulletBorn, this) } - handleWeaponShoot(id: number) { - if (this.owner !== id) { + handleBulletBorn(owner: number) { + if (this.owner !== owner) { return } this.state = EntityStateEnum.Attack } - handleShootBtnClick() { + handleWeaponShoot() { + if (!this.isSelf) { + return + } const pointWorldPos = this.point.getWorldPosition() - const pointStagePos = DataManager.Instance.gm.stage.getComponent(UITransform).convertToNodeSpaceAR(pointWorldPos); + const pointStagePos = DataManager.Instance.stage.getComponent(UITransform).convertToNodeSpaceAR(pointWorldPos); const anchorWorldPos = this.anchor.getWorldPosition() const directionVec2 = new Vec2(pointWorldPos.x - anchorWorldPos.x, pointWorldPos.y - anchorWorldPos.y).normalize() diff --git a/client/assets/Scripts/Entity/Weapon/WeaponManager.ts.meta b/apps/client/assets/Scripts/Entity/Weapon/WeaponManager.ts.meta similarity index 100% rename from client/assets/Scripts/Entity/Weapon/WeaponManager.ts.meta rename to apps/client/assets/Scripts/Entity/Weapon/WeaponManager.ts.meta diff --git a/client/assets/Scripts/Entity/Weapon/WeaponStateMachine.ts b/apps/client/assets/Scripts/Entity/Weapon/WeaponStateMachine.ts similarity index 84% rename from client/assets/Scripts/Entity/Weapon/WeaponStateMachine.ts rename to apps/client/assets/Scripts/Entity/Weapon/WeaponStateMachine.ts index 4ee64eb..be897cc 100644 --- a/client/assets/Scripts/Entity/Weapon/WeaponStateMachine.ts +++ b/apps/client/assets/Scripts/Entity/Weapon/WeaponStateMachine.ts @@ -1,14 +1,12 @@ import { _decorator, Animation, AnimationClip } from 'cc' import State from '../../Base/State' -import StateMachine, { getInitParamsNumber, getInitParamsTrigger } from '../../Base/StateMachine' +import StateMachine, { getInitParamsTrigger } from '../../Base/StateMachine' import { EntityStateEnum, EntityTypeEnum, ParamsNameEnum } from '../../Enum' import { WeaponManager } from './WeaponManager' -const { ccclass, property } = _decorator +const { ccclass } = _decorator @ccclass('WeaponStateMachine') export class WeaponStateMachine extends StateMachine { - type: EntityTypeEnum - init(type: EntityTypeEnum) { this.type = type this.animationComponent = this.node.addComponent(Animation) @@ -30,9 +28,7 @@ export class WeaponStateMachine extends StateMachine { initAnimationEvent() { this.animationComponent.on(Animation.EventType.FINISHED, () => { - const whiteList = [EntityStateEnum.Attack] - const name = this.animationComponent.defaultClip.name - if (whiteList.some(v => name.includes(v))) { + if (this.animationComponent.defaultClip.name.includes(EntityStateEnum.Attack)) { this.node.parent.getComponent(WeaponManager).state = EntityStateEnum.Idle } }) diff --git a/client/assets/Scripts/Entity/Weapon/WeaponStateMachine.ts.meta b/apps/client/assets/Scripts/Entity/Weapon/WeaponStateMachine.ts.meta similarity index 100% rename from client/assets/Scripts/Entity/Weapon/WeaponStateMachine.ts.meta rename to apps/client/assets/Scripts/Entity/Weapon/WeaponStateMachine.ts.meta diff --git a/client/assets/Scripts/Enum.meta b/apps/client/assets/Scripts/Enum.meta similarity index 100% rename from client/assets/Scripts/Enum.meta rename to apps/client/assets/Scripts/Enum.meta diff --git a/client/assets/Scripts/Enum/index.ts b/apps/client/assets/Scripts/Enum/index.ts similarity index 87% rename from client/assets/Scripts/Enum/index.ts rename to apps/client/assets/Scripts/Enum/index.ts index e7f54ed..c052bad 100644 --- a/client/assets/Scripts/Enum/index.ts +++ b/apps/client/assets/Scripts/Enum/index.ts @@ -16,9 +16,11 @@ export enum ParamsNameEnum { } export enum EventEnum { - ShootBtnClick = 'ShootBtnClick', WeaponShoot = 'WeaponShoot', - Explosion = 'Explosion' + BulletBorn = 'BulletBorn', + ExplosionBorn = 'ExplosionBorn', + RoomJoin = 'RoomJoin', + GameStart = 'GameStart', } export enum EntityTypeEnum { @@ -65,4 +67,11 @@ export enum InputType { PlayerMove = 'PlayerMove', WeaponShoot = 'WeaponShoot', TimePast = 'TimePast', +} + +export enum SceneEnum { + Login = 'Login', + Hall = 'Hall', + Room = 'Room', + Battle = 'Battle', } \ No newline at end of file diff --git a/client/assets/Scripts/Enum/index.ts.meta b/apps/client/assets/Scripts/Enum/index.ts.meta similarity index 100% rename from client/assets/Scripts/Enum/index.ts.meta rename to apps/client/assets/Scripts/Enum/index.ts.meta diff --git a/client/assets/Scripts/Global.meta b/apps/client/assets/Scripts/Global.meta similarity index 100% rename from client/assets/Scripts/Global.meta rename to apps/client/assets/Scripts/Global.meta diff --git a/client/assets/Scripts/Global/DataManager.ts b/apps/client/assets/Scripts/Global/DataManager.ts similarity index 84% rename from client/assets/Scripts/Global/DataManager.ts rename to apps/client/assets/Scripts/Global/DataManager.ts index 5ccc704..3e6f32e 100644 --- a/client/assets/Scripts/Global/DataManager.ts +++ b/apps/client/assets/Scripts/Global/DataManager.ts @@ -1,13 +1,11 @@ -import { Input, Prefab, SpriteFrame } from 'cc' +import { Node, Prefab, SpriteFrame } from 'cc' import Singleton from '../Base/Singleton' import { BulletManager } from '../Entity/Bullet/BulletManager' import { PlayerManager } from '../Entity/Player/PlayerManager' -import { WeaponManager } from '../Entity/Weapon/WeaponManager' -import { EntityStateEnum, EntityTypeEnum, EventEnum, InputType } from '../Enum' -import { BattleManager } from '../Scene/BattleManager' +import { EntityTypeEnum, EventEnum, InputType } from '../Enum' import { JoyStickManager } from '../UI/JoyStickManager' import EventManager from './EventManager' -import ObjectPoolManager from './ObjectPoolManager' +import { IData } from './NetworkManager' export type IPlayer = Pick export type IBullet = Pick @@ -35,8 +33,7 @@ interface IPlayerMove { type: InputType.PlayerMove id: number; direction: IVec2; - dt: number - + dt: number; } interface IWeaponShoot { @@ -56,9 +53,8 @@ export default class DataManager extends Singleton { return super.GetInstance() } - gm: BattleManager + stage: Node jm: JoyStickManager - myPlayerId = 1 prefabMap: Map = new Map() textureMap: Map = new Map() @@ -66,6 +62,13 @@ export default class DataManager extends Singleton { playerMap: Map = new Map() bulletMap: Map = new Map() + myPlayerId = 1 + roomInfo: IData + mapSize = { + x: 960, + y: 640, + } + state: IState = { players: [{ id: 2, @@ -113,9 +116,7 @@ export default class DataManager extends Singleton { player.position.x += x * PLAYER_SPEED * dt player.position.y += y * PLAYER_SPEED * dt - player.direction = { x, y } - break } @@ -130,7 +131,7 @@ export default class DataManager extends Singleton { } this.state.bullets.push(bullet) - EventManager.Instance.emit(EventEnum.WeaponShoot, owner) + EventManager.Instance.emit(EventEnum.BulletBorn, owner) break } case InputType.TimePast: { @@ -142,7 +143,7 @@ export default class DataManager extends Singleton { for (let j = players.length - 1; j >= 0; j--) { const player = players[j]; if (((player.position.x - bullet.position.x) ** 2 + (player.position.y - bullet.position.y) ** 2) < (PLAYER_RADIUS + BULLET_RADIUS) ** 2) { - EventManager.Instance.emit(EventEnum.Explosion, bullet.id, { + EventManager.Instance.emit(EventEnum.ExplosionBorn, bullet.id, { x: (player.position.x + bullet.position.x) / 2, y: (player.position.y + bullet.position.y) / 2, }) @@ -152,6 +153,14 @@ export default class DataManager extends Singleton { break } } + if (Math.abs(bullet.position.x) > this.mapSize.x / 2 || Math.abs(bullet.position.y) > this.mapSize.y / 2) { + EventManager.Instance.emit(EventEnum.ExplosionBorn, bullet.id, { + x: bullet.position.x, + y: bullet.position.y, + }) + bullets.splice(i, 1) + } + } for (const bullet of this.state.bullets) { diff --git a/client/assets/Scripts/Global/DataManager.ts.meta b/apps/client/assets/Scripts/Global/DataManager.ts.meta similarity index 100% rename from client/assets/Scripts/Global/DataManager.ts.meta rename to apps/client/assets/Scripts/Global/DataManager.ts.meta diff --git a/apps/client/assets/Scripts/Global/EventManager.ts b/apps/client/assets/Scripts/Global/EventManager.ts new file mode 100644 index 0000000..aaf9311 --- /dev/null +++ b/apps/client/assets/Scripts/Global/EventManager.ts @@ -0,0 +1,42 @@ +import Singleton from '../Base/Singleton' +import { EventEnum } from '../Enum'; + +interface IItem { + func: Function; + ctx: unknown; +} + +export default class EventManager extends Singleton { + static get Instance() { + return super.GetInstance(); + } + + private map: Map> = new Map(); + + on(event: EventEnum, func: Function, ctx?: unknown) { + if (this.map.has(event)) { + this.map.get(event).push({ func, ctx }); + } else { + this.map.set(event, [{ func, ctx }]); + } + } + + off(event: EventEnum, func: Function, ctx?: unknown) { + if (this.map.has(event)) { + const index = this.map.get(event).findIndex(i => func === i.func && i.ctx === ctx); + index > -1 && this.map.get(event).splice(index, 1); + } + } + + emit(event: EventEnum, ...params: unknown[]) { + if (this.map.has(event)) { + this.map.get(event).forEach(({ func, ctx }) => { + ctx ? func.apply(ctx, params) : func(...params); + }); + } + } + + clear() { + this.map.clear(); + } +} diff --git a/client/assets/Scripts/Global/EventManager.ts.meta b/apps/client/assets/Scripts/Global/EventManager.ts.meta similarity index 100% rename from client/assets/Scripts/Global/EventManager.ts.meta rename to apps/client/assets/Scripts/Global/EventManager.ts.meta diff --git a/apps/client/assets/Scripts/Global/NetworkManager.ts b/apps/client/assets/Scripts/Global/NetworkManager.ts new file mode 100644 index 0000000..9c758e9 --- /dev/null +++ b/apps/client/assets/Scripts/Global/NetworkManager.ts @@ -0,0 +1,117 @@ +import Singleton from '../Base/Singleton' + +const TIMEOUT = 5000 + +export type IData = Record + +export interface ICallApiRet { + success: boolean; + error?: Error; + res?: IData +} + +export enum ApiMsgEnum { + ApiPlayerList = 'ApiPlayerList', + ApiPlayerJoin = 'ApiPlayerJoin', + ApiRoomList = 'ApiRoomList', + ApiRoomCreate = 'ApiRoomCreate', + ApiRoomJoin = 'ApiRoomJoin', + ApiRoomLeave = 'ApiRoomLeave', + MsgPlayerList = 'MsgPlayerList', + MsgRoomList = 'MsgRoomList', + MsgRoom = 'MsgRoom', +} + +export default class NetworkManager extends Singleton { + static get Instance() { + return super.GetInstance() + } + + ws: WebSocket + port = 8888 + cbs: Map = new Map() + isConnected = false + + connect() { + return new Promise((resolve, reject) => { + this.ws = new WebSocket(`ws://localhost:${this.port}`) + this.ws.onopen = () => { + console.log("ws onopen") + this.isConnected = true + resolve(true) + } + + this.ws.onerror = () => { + this.isConnected = false + reject("ws onerror") + } + + this.ws.onclose = () => { + this.isConnected = false + reject("ws onclose") + } + + this.ws.onmessage = (e) => { + try { + const json = JSON.parse(e.data) + const { name, data } = json + try { + if (this.cbs.has(name) && this.cbs.get(name).length) { + console.log(json); + this.cbs.get(name).forEach(cb => cb(data)) + } + } catch (error) { + console.log("this.cbs.get(name).forEach(cb => cb(restData))", error) + } + + } catch (error) { + console.log('解析失败,不是合法的JSON格式', error) + } + } + }) + } + + sendMsg(name: string, data: IData) { + this.ws.send(JSON.stringify({ name, data })) + } + + listenMsg(name: string, cb: Function) { + if (this.cbs.has(name)) { + this.cbs.get(name).push(cb) + } else { + this.cbs.set(name, [cb]) + } + } + + unlistenMsg(name: string, cb: Function) { + if (this.cbs.has(name)) { + const index = this.cbs.get(name).indexOf(cb) + index > -1 && this.cbs.get(name).splice(index, 1) + } + } + + callApi(name: string, data: IData) { + return new Promise((resolve) => { + try { + // 超时处理 + const timer = setTimeout(() => { + resolve({ success: false, error: new Error('timeout') }) + this.unlistenMsg(name, cb) + }, TIMEOUT) + + // 回调处理 + const cb = (res: ICallApiRet) => { + resolve(res) + clearTimeout(timer) + this.unlistenMsg(name, cb) + } + this.listenMsg(name, cb) + + this.ws.send(JSON.stringify({ name, data })) + } catch (error) { + console.log(error) + resolve({ success: false, error: error as Error }) + } + }) + } +} diff --git a/client/assets/Scripts/Global/NetworkManager.ts.meta b/apps/client/assets/Scripts/Global/NetworkManager.ts.meta similarity index 100% rename from client/assets/Scripts/Global/NetworkManager.ts.meta rename to apps/client/assets/Scripts/Global/NetworkManager.ts.meta diff --git a/apps/client/assets/Scripts/Global/ObjectPoolManager.ts b/apps/client/assets/Scripts/Global/ObjectPoolManager.ts new file mode 100644 index 0000000..4e35294 --- /dev/null +++ b/apps/client/assets/Scripts/Global/ObjectPoolManager.ts @@ -0,0 +1,50 @@ +import Singleton from '../Base/Singleton' +import { instantiate, Node } from 'cc' +import { EntityTypeEnum } from '../Enum' +import DataManager from './DataManager' + +export default class ObjectPoolManager extends Singleton { + static get Instance() { + return super.GetInstance() + } + + private objectPool: Node = null + private map: Map = new Map() + + private getContainerName(objectName: EntityTypeEnum) { + return objectName + 'Pool' + } + + get(objectName: EntityTypeEnum) { + if (this.objectPool === null) { + this.objectPool = new Node("ObjectPool") + this.objectPool.setParent(DataManager.Instance.stage) + } + + if (!this.map.has(objectName)) { + this.map.set(objectName, []) + const container = new Node(this.getContainerName(objectName)) + container.setParent(this.objectPool) + } + + let node: Node + const nodes = this.map.get(objectName) + + if (!nodes.length) { + const prefab = DataManager.Instance.prefabMap.get(objectName) + node = instantiate(prefab) + node.name = objectName + node.setParent(this.objectPool.getChildByName(this.getContainerName(objectName))) + } else { + node = nodes.pop() + } + node.active = true + return node + } + + ret(object: Node) { + object.active = false + const objectName = object.name as EntityTypeEnum + this.map.get(objectName).push(object) + } +} diff --git a/client/assets/Scripts/Global/ObjectPoolManager.ts.meta b/apps/client/assets/Scripts/Global/ObjectPoolManager.ts.meta similarity index 100% rename from client/assets/Scripts/Global/ObjectPoolManager.ts.meta rename to apps/client/assets/Scripts/Global/ObjectPoolManager.ts.meta diff --git a/client/assets/Scripts/Global/ResourceManager.ts b/apps/client/assets/Scripts/Global/ResourceManager.ts similarity index 92% rename from client/assets/Scripts/Global/ResourceManager.ts rename to apps/client/assets/Scripts/Global/ResourceManager.ts index af1b731..4ebc672 100644 --- a/client/assets/Scripts/Global/ResourceManager.ts +++ b/apps/client/assets/Scripts/Global/ResourceManager.ts @@ -1,4 +1,4 @@ -import { _decorator, resources, SpriteFrame, Asset } from 'cc' +import { _decorator, resources, Asset } from 'cc' import Singleton from '../Base/Singleton' export class ResourceManager extends Singleton { diff --git a/client/assets/Scripts/Global/ResourceManager.ts.meta b/apps/client/assets/Scripts/Global/ResourceManager.ts.meta similarity index 100% rename from client/assets/Scripts/Global/ResourceManager.ts.meta rename to apps/client/assets/Scripts/Global/ResourceManager.ts.meta diff --git a/client/assets/Scripts/Scene.meta b/apps/client/assets/Scripts/Scene.meta similarity index 100% rename from client/assets/Scripts/Scene.meta rename to apps/client/assets/Scripts/Scene.meta diff --git a/client/assets/Scripts/Scene/BattleManager.ts b/apps/client/assets/Scripts/Scene/BattleManager.ts similarity index 67% rename from client/assets/Scripts/Scene/BattleManager.ts rename to apps/client/assets/Scripts/Scene/BattleManager.ts index b26aa6c..819f5bc 100644 --- a/client/assets/Scripts/Scene/BattleManager.ts +++ b/apps/client/assets/Scripts/Scene/BattleManager.ts @@ -1,4 +1,4 @@ -import { _decorator, Component, Node, resources, Prefab, instantiate, Vec2, SpriteFrame } from 'cc'; +import { _decorator, Component, Node, Prefab, instantiate, SpriteFrame } from 'cc'; import { PlayerManager } from '../Entity/Player/PlayerManager'; import DataManager from '../Global/DataManager'; import { JoyStickManager } from '../UI/JoyStickManager'; @@ -8,26 +8,23 @@ import NetworkManager from '../Global/NetworkManager'; import ObjectPoolManager from '../Global/ObjectPoolManager'; import { BulletManager } from '../Entity/Bullet/BulletManager'; -const { ccclass, property, requireComponent } = _decorator; +const { ccclass } = _decorator; @ccclass('BattleManager') export class BattleManager extends Component { stage: Node ui: Node - isInited = false - - onLoad() { - DataManager.Instance.gm = this - this.stage = this.node.getChildByName("Stage") + this.stage = DataManager.Instance.stage = this.node.getChildByName("Stage") this.ui = this.node.getChildByName("UI") } async start() { this.clearGame() await this.loadRes() - await this.initScene() + this.initScene() + await this.connectServer() this.isInited = true } @@ -36,19 +33,6 @@ export class BattleManager extends Component { this.ui.destroyAllChildren() } - async initScene() { - // await NetworkManager.Instance.connect() - // NetworkManager.Instance.sendMsg("我是客户端!!") - // const data = await NetworkManager.Instance.callApi("/join") - // console.log("data", data); - await Promise.all([ - this.initJoyStick(), - this.initFire(), - this.initMap(), - ]) - - } - async loadRes() { const list = [] for (const type in PrefabPathEnum) { @@ -66,24 +50,36 @@ export class BattleManager extends Component { await Promise.all(list) } + async initScene() { + this.initJoyStick() + this.initShoot() + this.initMap() + } - async initJoyStick() { - const joySitckPrefab = await ResourceManager.Instance.loadRes(PrefabPathEnum[EntityTypeEnum.JoyStick], Prefab) - const joySitck = instantiate(joySitckPrefab) + async connectServer() { + if (!await NetworkManager.Instance.connect().catch(() => false)) { + await new Promise((resolve) => setTimeout(resolve, 1000)) + await this.connectServer() + } + } + + initJoyStick() { + const prefab = DataManager.Instance.prefabMap.get(EntityTypeEnum.JoyStick) + const joySitck = instantiate(prefab) joySitck.setParent(this.ui) const jm = DataManager.Instance.jm = joySitck.getComponent(JoyStickManager) - await jm.init() + jm.init() } - async initFire() { - const firePrefab = await ResourceManager.Instance.loadRes(PrefabPathEnum[EntityTypeEnum.Shoot], Prefab) - const fire = instantiate(firePrefab) - fire.setParent(this.ui) + initShoot() { + const prefab = DataManager.Instance.prefabMap.get(EntityTypeEnum.Shoot) + const shoot = instantiate(prefab) + shoot.setParent(this.ui) } - async initMap() { - const mapPrefab = await ResourceManager.Instance.loadRes(PrefabPathEnum[EntityTypeEnum.Map1], Prefab) - const map = instantiate(mapPrefab) + initMap() { + const prefab = DataManager.Instance.prefabMap.get(EntityTypeEnum.Map1) + const map = instantiate(prefab) map.setParent(this.stage) } @@ -97,17 +93,11 @@ export class BattleManager extends Component { tick(dt: number) { this.tickPlayer(dt) - - DataManager.Instance.applyInput({ - type: InputType.TimePast, - dt - }) + this.tickGlobal(dt) } tickPlayer(dt: number) { - const players = DataManager.Instance.state.players - - for (const p of players) { + for (const p of DataManager.Instance.state.players) { const playerManager = DataManager.Instance.playerMap.get(p.id) if (!playerManager) { return @@ -116,14 +106,20 @@ export class BattleManager extends Component { } } + tickGlobal(dt: number) { + DataManager.Instance.applyInput({ + type: InputType.TimePast, + dt + }) + } + render() { this.renderPlayer() this.renderBullet() } renderPlayer() { - const players = DataManager.Instance.state.players - for (const p of players) { + for (const p of DataManager.Instance.state.players) { let playerManager = DataManager.Instance.playerMap.get(p.id) if (!playerManager) { const playerPrefab = DataManager.Instance.prefabMap.get(p.type) @@ -139,11 +135,10 @@ export class BattleManager extends Component { } renderBullet() { - const bullets = DataManager.Instance.state.bullets - for (const b of bullets) { + for (const b of DataManager.Instance.state.bullets) { let bulletManager = DataManager.Instance.bulletMap.get(b.id) if (!bulletManager) { - const bullet = ObjectPoolManager.Instance.getPoolObject(b.type) + const bullet = ObjectPoolManager.Instance.get(b.type) bulletManager = bullet.getComponent(BulletManager) || bullet.addComponent(BulletManager) DataManager.Instance.bulletMap.set(b.id, bulletManager) bulletManager.init(b) diff --git a/client/assets/Scripts/Scene/BattleManager.ts.meta b/apps/client/assets/Scripts/Scene/BattleManager.ts.meta similarity index 100% rename from client/assets/Scripts/Scene/BattleManager.ts.meta rename to apps/client/assets/Scripts/Scene/BattleManager.ts.meta diff --git a/apps/client/assets/Scripts/Scene/HallManager.ts b/apps/client/assets/Scripts/Scene/HallManager.ts new file mode 100644 index 0000000..bb5bc53 --- /dev/null +++ b/apps/client/assets/Scripts/Scene/HallManager.ts @@ -0,0 +1,122 @@ +import { _decorator, Component, Node, Prefab, director, instantiate } from 'cc'; +import { EventEnum, SceneEnum } from '../Enum'; +import DataManager from '../Global/DataManager'; +import EventManager from '../Global/EventManager'; +import NetworkManager, { ApiMsgEnum, IData } from '../Global/NetworkManager'; +import { PlayerItemManager } from '../UI/PlayerItemManager'; +import { RoomItemManager } from '../UI/RoomItemManager'; +const { ccclass, property } = _decorator; + +@ccclass('HallManager') +export class HallManager extends Component { + @property(Node) + playerContainer: Node = null; + + @property(Prefab) + playerItem: Prefab = null; + + @property(Node) + roomContainer: Node = null; + + @property(Prefab) + roomItem: Prefab = null; + + onLoad() { + director.preloadScene(SceneEnum.Room); + EventManager.Instance.on(EventEnum.RoomJoin, this.joinRoom, this) + NetworkManager.Instance.listenMsg(ApiMsgEnum.MsgPlayerList, this.renderPlayer); + NetworkManager.Instance.listenMsg(ApiMsgEnum.MsgRoomList, this.renderRooms); + } + + onDestroy() { + EventManager.Instance.off(EventEnum.RoomJoin, this.joinRoom, this) + NetworkManager.Instance.unlistenMsg(ApiMsgEnum.MsgPlayerList, this.renderPlayer); + NetworkManager.Instance.unlistenMsg(ApiMsgEnum.MsgRoomList, this.renderRooms); + } + + start() { + this.getPlayers() + this.getRooms() + } + + async getPlayers() { + const { success, res, error } = await NetworkManager.Instance.callApi(ApiMsgEnum.ApiPlayerList, {}); + if (!success) { + console.log(error) + return; + } + + this.renderPlayer(res) + } + + renderPlayer = ({ list }: IData) => { + for (const item of this.playerContainer.children) { + item.active = false + } + while (this.playerContainer.children.length < list.length) { + const playerItem = instantiate(this.playerItem); + playerItem.active = false + playerItem.setParent(this.playerContainer) + } + + for (let i = 0; i < list.length; i++) { + const data = list[i]; + const node = this.playerContainer.children[i] + const playerItemManager = node.getComponent(PlayerItemManager) + playerItemManager.init(data) + } + } + + async getRooms() { + const { success, res, error } = await NetworkManager.Instance.callApi(ApiMsgEnum.ApiRoomList, {}); + if (!success) { + console.log(error) + return; + } + + this.renderRooms(res) + } + + renderRooms = ({ list }: IData) => { + for (const item of this.roomContainer.children) { + item.active = false + } + while (this.roomContainer.children.length < list.length) { + const roomItem = instantiate(this.roomItem); + roomItem.active = false + roomItem.setParent(this.roomContainer) + } + + for (let i = 0; i < list.length; i++) { + const data = list[i]; + const node = this.roomContainer.children[i] + const roomItemManager = node.getComponent(RoomItemManager) + roomItemManager.init(data) + } + } + + async createRoom() { + const { success, res, error } = await NetworkManager.Instance.callApi(ApiMsgEnum.ApiRoomCreate, {}); + if (!success) { + console.log(error) + return; + } + + DataManager.Instance.roomInfo = { ...res } + + director.loadScene(SceneEnum.Room); + } + + async joinRoom(rid: number) { + const { success, res, error } = await NetworkManager.Instance.callApi(ApiMsgEnum.ApiRoomJoin, { rid }); + if (!success) { + console.log(error) + return; + } + + DataManager.Instance.roomInfo = { ...res } + + director.loadScene(SceneEnum.Room); + } +} + diff --git a/apps/client/assets/Scripts/Scene/HallManager.ts.meta b/apps/client/assets/Scripts/Scene/HallManager.ts.meta new file mode 100644 index 0000000..028694b --- /dev/null +++ b/apps/client/assets/Scripts/Scene/HallManager.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "a14b4d33-c5f8-455c-a935-dbfd7f3ab62b", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/apps/client/assets/Scripts/Scene/LoginManager.ts b/apps/client/assets/Scripts/Scene/LoginManager.ts new file mode 100644 index 0000000..ae90435 --- /dev/null +++ b/apps/client/assets/Scripts/Scene/LoginManager.ts @@ -0,0 +1,45 @@ +import { _decorator, Component, Node, EditBox, Button, director } from 'cc'; +import { SceneEnum } from '../Enum'; +import DataManager from '../Global/DataManager'; +import NetworkManager, { ApiMsgEnum } from '../Global/NetworkManager'; +const { ccclass, property } = _decorator; + +@ccclass('LoginManager') +export class LoginManager extends Component { + input: EditBox + + onLoad() { + this.input = this.node.getChildByName('Input').getComponent(EditBox) + director.preloadScene(SceneEnum.Hall); + } + + async start() { + await NetworkManager.Instance.connect(); + console.log("服务连接成功!"); + + } + + async handleClick() { + if (!NetworkManager.Instance.isConnected) { + console.log("未连接!"); + await NetworkManager.Instance.connect(); + } + const nickname = this.input.string; + if (!nickname) { + console.log("请输入昵称!") + return; + } + let { success, res, error } = await NetworkManager.Instance.callApi(ApiMsgEnum.ApiPlayerJoin, { + nickname, + }); + + if (!success) { + console.log(error); + return; + } + + DataManager.Instance.myPlayerId = res.id; + director.loadScene(SceneEnum.Hall); + } +} + diff --git a/apps/client/assets/Scripts/Scene/LoginManager.ts.meta b/apps/client/assets/Scripts/Scene/LoginManager.ts.meta new file mode 100644 index 0000000..2011d2c --- /dev/null +++ b/apps/client/assets/Scripts/Scene/LoginManager.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "3be66806-c736-419c-b6cc-0dab1e13cbda", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/apps/client/assets/Scripts/Scene/RoomManager.ts b/apps/client/assets/Scripts/Scene/RoomManager.ts new file mode 100644 index 0000000..adbc5cf --- /dev/null +++ b/apps/client/assets/Scripts/Scene/RoomManager.ts @@ -0,0 +1,64 @@ +import { _decorator, Component, Node, Prefab, director, instantiate } from 'cc'; +import { EventEnum, SceneEnum } from '../Enum'; +import DataManager from '../Global/DataManager'; +import EventManager from '../Global/EventManager'; +import NetworkManager, { ApiMsgEnum, IData } from '../Global/NetworkManager'; +import { PlayerItemManager } from '../UI/PlayerItemManager'; +const { ccclass, property } = _decorator; + +@ccclass('RoomManager') +export class RoomManager extends Component { + @property(Node) + playerContainer: Node = null; + + @property(Prefab) + playerItem: Prefab = null; + + onLoad() { + director.preloadScene(SceneEnum.Battle); + NetworkManager.Instance.listenMsg(ApiMsgEnum.MsgRoom, this.renderPlayer); + } + + onDestroy() { + NetworkManager.Instance.unlistenMsg(ApiMsgEnum.MsgRoom, this.renderPlayer); + } + + async start() { + this.renderPlayer(DataManager.Instance.roomInfo) + } + + renderPlayer = ({ players: list }: any) => { + for (const item of this.playerContainer.children) { + item.active = false + } + while (this.playerContainer.children.length < list.length) { + const playerItem = instantiate(this.playerItem); + playerItem.active = false + playerItem.setParent(this.playerContainer) + } + + for (let i = 0; i < list.length; i++) { + const data = list[i]; + const node = this.playerContainer.children[i] + const playerItemManager = node.getComponent(PlayerItemManager) + playerItemManager.init(data) + } + } + + async handleLeave() { + const { success, res, error } = await NetworkManager.Instance.callApi(ApiMsgEnum.ApiRoomLeave, {}); + if (!success) { + console.log(error) + return; + } + + DataManager.Instance.roomInfo = null + director.loadScene(SceneEnum.Hall); + } + + handleGameStart() { + console.log("handleGameStart"); + + } +} + diff --git a/apps/client/assets/Scripts/Scene/RoomManager.ts.meta b/apps/client/assets/Scripts/Scene/RoomManager.ts.meta new file mode 100644 index 0000000..9d5c1ed --- /dev/null +++ b/apps/client/assets/Scripts/Scene/RoomManager.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "8ee1bd73-5b3b-48ad-a0a0-5a1d6a08da7d", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/client/assets/Scripts/UI.meta b/apps/client/assets/Scripts/UI.meta similarity index 100% rename from client/assets/Scripts/UI.meta rename to apps/client/assets/Scripts/UI.meta diff --git a/client/assets/Scripts/UI/JoyStickManager.ts b/apps/client/assets/Scripts/UI/JoyStickManager.ts similarity index 91% rename from client/assets/Scripts/UI/JoyStickManager.ts rename to apps/client/assets/Scripts/UI/JoyStickManager.ts index 20c75ae..ba56d6e 100644 --- a/client/assets/Scripts/UI/JoyStickManager.ts +++ b/apps/client/assets/Scripts/UI/JoyStickManager.ts @@ -3,7 +3,7 @@ const { ccclass, property } = _decorator; @ccclass('JoyStickManager') export class JoyStickManager extends Component { - input: Vec2 = new Vec2(0, 0) + input: Vec2 = Vec2.ZERO private body: Node private stick: Node @@ -11,7 +11,7 @@ export class JoyStickManager extends Component { private defaultPos: Vec2 private radius: number = 0 - async init() { + init() { this.body = this.node.getChildByName("Body") this.stick = this.body.getChildByName("Stick") const { x, y } = this.body.position @@ -38,7 +38,6 @@ export class JoyStickManager extends Component { } const stickPos = new Vec2(touchPos.x - this.touchStartPos.x, touchPos.y - this.touchStartPos.y) - // const stickPos = new Vec2(0, touchPos.y - this.touchStartPos.y) const len = stickPos.length() if (len > this.radius) { stickPos.multiplyScalar(this.radius / len) @@ -52,7 +51,7 @@ export class JoyStickManager extends Component { this.body.setPosition(this.defaultPos.x, this.defaultPos.y) this.stick.setPosition(0, 0) this.touchStartPos = undefined - this.input = new Vec2(0, 0) + this.input = Vec2.ZERO } } diff --git a/client/assets/Scripts/UI/JoyStickManager.ts.meta b/apps/client/assets/Scripts/UI/JoyStickManager.ts.meta similarity index 100% rename from client/assets/Scripts/UI/JoyStickManager.ts.meta rename to apps/client/assets/Scripts/UI/JoyStickManager.ts.meta diff --git a/apps/client/assets/Scripts/UI/PlayerItemManager.ts b/apps/client/assets/Scripts/UI/PlayerItemManager.ts new file mode 100644 index 0000000..e48dfb8 --- /dev/null +++ b/apps/client/assets/Scripts/UI/PlayerItemManager.ts @@ -0,0 +1,22 @@ +import { _decorator, Component, Node, Label } from 'cc'; +import { EventEnum } from '../Enum'; +import DataManager from '../Global/DataManager'; +import EventManager from '../Global/EventManager'; +const { ccclass, property } = _decorator; + +@ccclass('PlayerItemManager') +export class PlayerItemManager extends Component { + init({ id, nickname, rid }: { id: number, nickname: string, rid: number }) { + const label = this.getComponent(Label) + let str = nickname + if (DataManager.Instance.myPlayerId === id) { + str += `(我)` + } + if (rid !== -1) { + str += `(房间${rid})` + } + label.string = str + this.node.active = true + } +} + diff --git a/apps/client/assets/Scripts/UI/PlayerItemManager.ts.meta b/apps/client/assets/Scripts/UI/PlayerItemManager.ts.meta new file mode 100644 index 0000000..4547002 --- /dev/null +++ b/apps/client/assets/Scripts/UI/PlayerItemManager.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "0b36580d-5fc7-40c1-9ac0-0fb78a685fd1", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/apps/client/assets/Scripts/UI/RoomItemManager.ts b/apps/client/assets/Scripts/UI/RoomItemManager.ts new file mode 100644 index 0000000..e33d5a0 --- /dev/null +++ b/apps/client/assets/Scripts/UI/RoomItemManager.ts @@ -0,0 +1,20 @@ +import { _decorator, Component, Node, Label } from 'cc'; +import { EventEnum } from '../Enum'; +import EventManager from '../Global/EventManager'; +const { ccclass, property } = _decorator; + +@ccclass('RoomItemManager') +export class RoomItemManager extends Component { + id: number + init({ id, players }: { id: number, players: Array<{ id: number, nickname: string }> }) { + this.id = id + const label = this.getComponent(Label) + label.string = `房间id:${id},当前人数:${players.length}` + this.node.active = true + } + + handleClick() { + EventManager.Instance.emit(EventEnum.RoomJoin, this.id) + } +} + diff --git a/apps/client/assets/Scripts/UI/RoomItemManager.ts.meta b/apps/client/assets/Scripts/UI/RoomItemManager.ts.meta new file mode 100644 index 0000000..b1bb727 --- /dev/null +++ b/apps/client/assets/Scripts/UI/RoomItemManager.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "26da1a71-eb0d-463d-b2d6-fbc64bf0ab89", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/client/assets/Scripts/UI/ShootManager.ts b/apps/client/assets/Scripts/UI/ShootManager.ts similarity index 78% rename from client/assets/Scripts/UI/ShootManager.ts rename to apps/client/assets/Scripts/UI/ShootManager.ts index 8d21fd9..b16eb1d 100644 --- a/client/assets/Scripts/UI/ShootManager.ts +++ b/apps/client/assets/Scripts/UI/ShootManager.ts @@ -5,8 +5,8 @@ const { ccclass, property } = _decorator; @ccclass('ShootManager') export class ShootManager extends Component { - fire() { - EventManager.Instance.emit(EventEnum.ShootBtnClick) + shoot() { + EventManager.Instance.emit(EventEnum.WeaponShoot) } } diff --git a/client/assets/Scripts/UI/ShootManager.ts.meta b/apps/client/assets/Scripts/UI/ShootManager.ts.meta similarity index 100% rename from client/assets/Scripts/UI/ShootManager.ts.meta rename to apps/client/assets/Scripts/UI/ShootManager.ts.meta diff --git a/client/assets/Scripts/Utils.meta b/apps/client/assets/Scripts/Utils.meta similarity index 100% rename from client/assets/Scripts/Utils.meta rename to apps/client/assets/Scripts/Utils.meta diff --git a/client/assets/Scripts/Utils/index.ts b/apps/client/assets/Scripts/Utils/index.ts similarity index 52% rename from client/assets/Scripts/Utils/index.ts rename to apps/client/assets/Scripts/Utils/index.ts index 4fb3b2c..2f525f3 100644 --- a/client/assets/Scripts/Utils/index.ts +++ b/apps/client/assets/Scripts/Utils/index.ts @@ -1,4 +1,4 @@ -import { Layers, SpriteFrame, Node, UITransform } from "cc" +import { SpriteFrame } from "cc" const INDEX_REG = /\((\d+)\)/ @@ -7,14 +7,5 @@ const getNumberWithinString = (str: string) => parseInt(str.match(INDEX_REG)?.[1 export const sortSpriteFrame = (spriteFrame: Array) => spriteFrame.sort((a, b) => getNumberWithinString(a.name) - getNumberWithinString(b.name)) -const getUIMaskNumber = () => 1 << Layers.nameToLayer('UI_2D') - -export const createUINode = (name: string = '') => { - const node = new Node(name) - node.layer = getUIMaskNumber() - const transform = node.addComponent(UITransform) - return node -} - export const rad2Angle = (rad: number) => rad / Math.PI * 180 diff --git a/client/assets/Scripts/Utils/index.ts.meta b/apps/client/assets/Scripts/Utils/index.ts.meta similarity index 100% rename from client/assets/Scripts/Utils/index.ts.meta rename to apps/client/assets/Scripts/Utils/index.ts.meta diff --git a/client/assets/resources.meta b/apps/client/assets/resources.meta similarity index 100% rename from client/assets/resources.meta rename to apps/client/assets/resources.meta diff --git a/client/assets/resources/prefab.meta b/apps/client/assets/resources/prefab.meta similarity index 100% rename from client/assets/resources/prefab.meta rename to apps/client/assets/resources/prefab.meta diff --git a/client/assets/resources/prefab/Bullet.prefab b/apps/client/assets/resources/prefab/Bullet.prefab similarity index 100% rename from client/assets/resources/prefab/Bullet.prefab rename to apps/client/assets/resources/prefab/Bullet.prefab diff --git a/client/assets/resources/prefab/Bullet.prefab.meta b/apps/client/assets/resources/prefab/Bullet.prefab.meta similarity index 100% rename from client/assets/resources/prefab/Bullet.prefab.meta rename to apps/client/assets/resources/prefab/Bullet.prefab.meta diff --git a/client/assets/resources/prefab/Explosion.prefab b/apps/client/assets/resources/prefab/Explosion.prefab similarity index 100% rename from client/assets/resources/prefab/Explosion.prefab rename to apps/client/assets/resources/prefab/Explosion.prefab diff --git a/client/assets/resources/prefab/Explosion.prefab.meta b/apps/client/assets/resources/prefab/Explosion.prefab.meta similarity index 100% rename from client/assets/resources/prefab/Explosion.prefab.meta rename to apps/client/assets/resources/prefab/Explosion.prefab.meta diff --git a/client/assets/Animations.meta b/apps/client/assets/resources/prefab/Hall.meta similarity index 77% rename from client/assets/Animations.meta rename to apps/client/assets/resources/prefab/Hall.meta index f523938..91b8c57 100644 --- a/client/assets/Animations.meta +++ b/apps/client/assets/resources/prefab/Hall.meta @@ -2,7 +2,7 @@ "ver": "1.1.0", "importer": "directory", "imported": true, - "uuid": "2d541e68-a3ab-45a5-a30d-ffc21e6aa37f", + "uuid": "9348a0ae-1f83-44fe-ae79-892e1db86d1a", "files": [], "subMetas": {}, "userData": { diff --git a/apps/client/assets/resources/prefab/Hall/PlayerItem.prefab b/apps/client/assets/resources/prefab/Hall/PlayerItem.prefab new file mode 100644 index 0000000..af47a71 --- /dev/null +++ b/apps/client/assets/resources/prefab/Hall/PlayerItem.prefab @@ -0,0 +1,200 @@ +[ + { + "__type__": "cc.Prefab", + "_name": "PlayerItem", + "_objFlags": 0, + "_native": "", + "data": { + "__id__": 1 + }, + "optimizationPolicy": 0, + "persistent": false, + "asyncLoadAssets": false + }, + { + "__type__": "cc.Node", + "_name": "PlayerItem", + "_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": -460, + "y": -20, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 33554432, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 1 + }, + "_enabled": true, + "__prefab": { + "__id__": 3 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 240, + "height": 50.4 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0, + "y": 1 + }, + "_id": "" + }, + { + "__type__": "cc.CompPrefabInfo", + "fileId": "69g2Ps4UpEQIdkibaU0mB+" + }, + { + "__type__": "cc.Label", + "_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 + }, + "_string": "这是一个昵称", + "_horizontalAlign": 0, + "_verticalAlign": 0, + "_actualFontSize": 40, + "_fontSize": 40, + "_fontFamily": "Arial", + "_lineHeight": 40, + "_overflow": 0, + "_enableWrapText": true, + "_font": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_isItalic": false, + "_isBold": false, + "_isUnderline": false, + "_underlineHeight": 2, + "_cacheMode": 0, + "_id": "" + }, + { + "__type__": "cc.CompPrefabInfo", + "fileId": "1fVVQb7LdIUZ7E43CVIsuV" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 1 + }, + "_enabled": true, + "__prefab": { + "__id__": 7 + }, + "_alignFlags": 8, + "_target": null, + "_left": 20, + "_right": 0, + "_top": 0, + "_bottom": 0, + "_horizontalCenter": 0, + "_verticalCenter": 0, + "_isAbsLeft": true, + "_isAbsRight": true, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 0, + "_originalHeight": 0, + "_alignMode": 2, + "_lockFlags": 0, + "_id": "" + }, + { + "__type__": "cc.CompPrefabInfo", + "fileId": "1dyUPgippJNLS6AWV5oz7O" + }, + { + "__type__": "0b365gNX8dAwZrAD7eKaF/R", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 1 + }, + "_enabled": true, + "__prefab": { + "__id__": 9 + }, + "_id": "" + }, + { + "__type__": "cc.CompPrefabInfo", + "fileId": "35yNVdeqZKy6dIzoq3eYwD" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "fcj/6WYKJAnbG8wIajLBQ9" + } +] \ No newline at end of file diff --git a/apps/client/assets/resources/prefab/Hall/PlayerItem.prefab.meta b/apps/client/assets/resources/prefab/Hall/PlayerItem.prefab.meta new file mode 100644 index 0000000..73e984a --- /dev/null +++ b/apps/client/assets/resources/prefab/Hall/PlayerItem.prefab.meta @@ -0,0 +1,13 @@ +{ + "ver": "1.1.39", + "importer": "prefab", + "imported": true, + "uuid": "7b0c739f-cf46-48f7-8c15-c97ab34268fe", + "files": [ + ".json" + ], + "subMetas": {}, + "userData": { + "syncNodeName": "PlayerItem" + } +} diff --git a/apps/client/assets/resources/prefab/Hall/RoomItem.prefab b/apps/client/assets/resources/prefab/Hall/RoomItem.prefab new file mode 100644 index 0000000..ef83062 --- /dev/null +++ b/apps/client/assets/resources/prefab/Hall/RoomItem.prefab @@ -0,0 +1,272 @@ +[ + { + "__type__": "cc.Prefab", + "_name": "RoomItem", + "_objFlags": 0, + "_native": "", + "data": { + "__id__": 1 + }, + "optimizationPolicy": 0, + "persistent": false, + "asyncLoadAssets": false + }, + { + "__type__": "cc.Node", + "_name": "RoomItem", + "_objFlags": 0, + "__editorExtras__": {}, + "_parent": null, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 2 + }, + { + "__id__": 4 + }, + { + "__id__": 6 + }, + { + "__id__": 8 + }, + { + "__id__": 10 + } + ], + "_prefab": { + "__id__": 13 + }, + "_lpos": { + "__type__": "cc.Vec3", + "x": -460, + "y": -20, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 33554432, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 1 + }, + "_enabled": true, + "__prefab": { + "__id__": 3 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 240, + "height": 50.4 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0, + "y": 1 + }, + "_id": "" + }, + { + "__type__": "cc.CompPrefabInfo", + "fileId": "004ckstpVLVI/GFNPQu6Ut" + }, + { + "__type__": "cc.Label", + "_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 + }, + "_string": "这是一个昵称", + "_horizontalAlign": 0, + "_verticalAlign": 0, + "_actualFontSize": 40, + "_fontSize": 40, + "_fontFamily": "Arial", + "_lineHeight": 40, + "_overflow": 0, + "_enableWrapText": true, + "_font": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_isItalic": false, + "_isBold": false, + "_isUnderline": false, + "_underlineHeight": 2, + "_cacheMode": 0, + "_id": "" + }, + { + "__type__": "cc.CompPrefabInfo", + "fileId": "cbYokkXAdJ4KKFtl4bKb6h" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 1 + }, + "_enabled": true, + "__prefab": { + "__id__": 7 + }, + "_alignFlags": 8, + "_target": null, + "_left": 20, + "_right": 0, + "_top": 0, + "_bottom": 0, + "_horizontalCenter": 0, + "_verticalCenter": 0, + "_isAbsLeft": true, + "_isAbsRight": true, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 0, + "_originalHeight": 0, + "_alignMode": 2, + "_lockFlags": 0, + "_id": "" + }, + { + "__type__": "cc.CompPrefabInfo", + "fileId": "04BVJ/YxxGgJB9RdmtoR81" + }, + { + "__type__": "26da1px6w1GPbLW+8ZL8KuJ", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 1 + }, + "_enabled": true, + "__prefab": { + "__id__": 9 + }, + "_id": "" + }, + { + "__type__": "cc.CompPrefabInfo", + "fileId": "fcJVJHKllGEpVqSAW4IqSW" + }, + { + "__type__": "cc.Button", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 1 + }, + "_enabled": true, + "__prefab": { + "__id__": 11 + }, + "clickEvents": [ + { + "__id__": 12 + } + ], + "_interactable": true, + "_transition": 0, + "_normalColor": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_hoverColor": { + "__type__": "cc.Color", + "r": 211, + "g": 211, + "b": 211, + "a": 255 + }, + "_pressedColor": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_disabledColor": { + "__type__": "cc.Color", + "r": 124, + "g": 124, + "b": 124, + "a": 255 + }, + "_normalSprite": null, + "_hoverSprite": null, + "_pressedSprite": null, + "_disabledSprite": null, + "_duration": 0.1, + "_zoomScale": 0.9, + "_target": null, + "_id": "" + }, + { + "__type__": "cc.CompPrefabInfo", + "fileId": "e9vctIZBRDxr9zs4vEXaKZ" + }, + { + "__type__": "cc.ClickEvent", + "target": { + "__id__": 1 + }, + "component": "", + "_componentId": "26da1px6w1GPbLW+8ZL8KuJ", + "handler": "handleClick", + "customEventData": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "a2/F/h+4pOXoCz6HE2/FCp" + } +] \ No newline at end of file diff --git a/apps/client/assets/resources/prefab/Hall/RoomItem.prefab.meta b/apps/client/assets/resources/prefab/Hall/RoomItem.prefab.meta new file mode 100644 index 0000000..0917a55 --- /dev/null +++ b/apps/client/assets/resources/prefab/Hall/RoomItem.prefab.meta @@ -0,0 +1,13 @@ +{ + "ver": "1.1.39", + "importer": "prefab", + "imported": true, + "uuid": "b91571d9-7804-4e62-b9d4-eef2f8f0cadd", + "files": [ + ".json" + ], + "subMetas": {}, + "userData": { + "syncNodeName": "RoomItem" + } +} diff --git a/client/assets/resources/prefab/JoyStick.prefab b/apps/client/assets/resources/prefab/JoyStick.prefab similarity index 100% rename from client/assets/resources/prefab/JoyStick.prefab rename to apps/client/assets/resources/prefab/JoyStick.prefab diff --git a/client/assets/resources/prefab/JoyStick.prefab.meta b/apps/client/assets/resources/prefab/JoyStick.prefab.meta similarity index 100% rename from client/assets/resources/prefab/JoyStick.prefab.meta rename to apps/client/assets/resources/prefab/JoyStick.prefab.meta diff --git a/client/assets/resources/prefab/Map1.prefab b/apps/client/assets/resources/prefab/Map1.prefab similarity index 100% rename from client/assets/resources/prefab/Map1.prefab rename to apps/client/assets/resources/prefab/Map1.prefab diff --git a/client/assets/resources/prefab/Map1.prefab.meta b/apps/client/assets/resources/prefab/Map1.prefab.meta similarity index 100% rename from client/assets/resources/prefab/Map1.prefab.meta rename to apps/client/assets/resources/prefab/Map1.prefab.meta diff --git a/client/assets/resources/prefab/Player.prefab b/apps/client/assets/resources/prefab/Player.prefab similarity index 100% rename from client/assets/resources/prefab/Player.prefab rename to apps/client/assets/resources/prefab/Player.prefab diff --git a/client/assets/resources/prefab/Player.prefab.meta b/apps/client/assets/resources/prefab/Player.prefab.meta similarity index 100% rename from client/assets/resources/prefab/Player.prefab.meta rename to apps/client/assets/resources/prefab/Player.prefab.meta diff --git a/apps/client/assets/resources/prefab/Room.meta b/apps/client/assets/resources/prefab/Room.meta new file mode 100644 index 0000000..04487e1 --- /dev/null +++ b/apps/client/assets/resources/prefab/Room.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "d4aded25-46cd-4911-b695-170d2eb72fd6", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/client/assets/resources/prefab/Shoot.prefab b/apps/client/assets/resources/prefab/Shoot.prefab similarity index 99% rename from client/assets/resources/prefab/Shoot.prefab rename to apps/client/assets/resources/prefab/Shoot.prefab index 7351885..142d128 100644 --- a/client/assets/resources/prefab/Shoot.prefab +++ b/apps/client/assets/resources/prefab/Shoot.prefab @@ -242,7 +242,7 @@ }, "component": "", "_componentId": "f4c4bvfd9NEo4jCKfQEAdq3", - "handler": "fire", + "handler": "shoot", "customEventData": "" }, { diff --git a/client/assets/resources/prefab/Shoot.prefab.meta b/apps/client/assets/resources/prefab/Shoot.prefab.meta similarity index 100% rename from client/assets/resources/prefab/Shoot.prefab.meta rename to apps/client/assets/resources/prefab/Shoot.prefab.meta diff --git a/client/assets/resources/prefab/Weapon1.prefab b/apps/client/assets/resources/prefab/Weapon1.prefab similarity index 100% rename from client/assets/resources/prefab/Weapon1.prefab rename to apps/client/assets/resources/prefab/Weapon1.prefab diff --git a/client/assets/resources/prefab/Weapon1.prefab.meta b/apps/client/assets/resources/prefab/Weapon1.prefab.meta similarity index 100% rename from client/assets/resources/prefab/Weapon1.prefab.meta rename to apps/client/assets/resources/prefab/Weapon1.prefab.meta diff --git a/client/assets/resources/prefab/Weapon2.prefab b/apps/client/assets/resources/prefab/Weapon2.prefab similarity index 100% rename from client/assets/resources/prefab/Weapon2.prefab rename to apps/client/assets/resources/prefab/Weapon2.prefab diff --git a/client/assets/resources/prefab/Weapon2.prefab.meta b/apps/client/assets/resources/prefab/Weapon2.prefab.meta similarity index 100% rename from client/assets/resources/prefab/Weapon2.prefab.meta rename to apps/client/assets/resources/prefab/Weapon2.prefab.meta diff --git a/client/assets/resources/texture.meta b/apps/client/assets/resources/texture.meta similarity index 100% rename from client/assets/resources/texture.meta rename to apps/client/assets/resources/texture.meta diff --git a/client/assets/resources/texture/bg.meta b/apps/client/assets/resources/texture/bg.meta similarity index 100% rename from client/assets/resources/texture/bg.meta rename to apps/client/assets/resources/texture/bg.meta diff --git a/client/assets/resources/texture/bg/tile.png b/apps/client/assets/resources/texture/bg/tile.png similarity index 100% rename from client/assets/resources/texture/bg/tile.png rename to apps/client/assets/resources/texture/bg/tile.png diff --git a/client/assets/resources/texture/bg/tile.png.meta b/apps/client/assets/resources/texture/bg/tile.png.meta similarity index 100% rename from client/assets/resources/texture/bg/tile.png.meta rename to apps/client/assets/resources/texture/bg/tile.png.meta diff --git a/client/assets/resources/texture/bullet.meta b/apps/client/assets/resources/texture/bullet.meta similarity index 100% rename from client/assets/resources/texture/bullet.meta rename to apps/client/assets/resources/texture/bullet.meta diff --git a/client/assets/resources/texture/bullet/bullet1.meta b/apps/client/assets/resources/texture/bullet/bullet1.meta similarity index 100% rename from client/assets/resources/texture/bullet/bullet1.meta rename to apps/client/assets/resources/texture/bullet/bullet1.meta diff --git a/client/assets/resources/texture/bullet/bullet1/bullet1 (1).png b/apps/client/assets/resources/texture/bullet/bullet1/bullet1 (1).png similarity index 100% rename from client/assets/resources/texture/bullet/bullet1/bullet1 (1).png rename to apps/client/assets/resources/texture/bullet/bullet1/bullet1 (1).png diff --git a/client/assets/resources/texture/bullet/bullet1/bullet1 (1).png.meta b/apps/client/assets/resources/texture/bullet/bullet1/bullet1 (1).png.meta similarity index 100% rename from client/assets/resources/texture/bullet/bullet1/bullet1 (1).png.meta rename to apps/client/assets/resources/texture/bullet/bullet1/bullet1 (1).png.meta diff --git a/client/assets/resources/texture/bullet/bullet2.meta b/apps/client/assets/resources/texture/bullet/bullet2.meta similarity index 100% rename from client/assets/resources/texture/bullet/bullet2.meta rename to apps/client/assets/resources/texture/bullet/bullet2.meta diff --git a/client/assets/resources/texture/bullet/bullet2/bullet2 (1).png b/apps/client/assets/resources/texture/bullet/bullet2/bullet2 (1).png similarity index 100% rename from client/assets/resources/texture/bullet/bullet2/bullet2 (1).png rename to apps/client/assets/resources/texture/bullet/bullet2/bullet2 (1).png diff --git a/client/assets/resources/texture/bullet/bullet2/bullet2 (1).png.meta b/apps/client/assets/resources/texture/bullet/bullet2/bullet2 (1).png.meta similarity index 100% rename from client/assets/resources/texture/bullet/bullet2/bullet2 (1).png.meta rename to apps/client/assets/resources/texture/bullet/bullet2/bullet2 (1).png.meta diff --git a/client/assets/resources/texture/explosion.meta b/apps/client/assets/resources/texture/explosion.meta similarity index 100% rename from client/assets/resources/texture/explosion.meta rename to apps/client/assets/resources/texture/explosion.meta diff --git a/client/assets/resources/texture/explosion/explosion (1).png b/apps/client/assets/resources/texture/explosion/explosion (1).png similarity index 100% rename from client/assets/resources/texture/explosion/explosion (1).png rename to apps/client/assets/resources/texture/explosion/explosion (1).png diff --git a/client/assets/resources/texture/explosion/explosion (1).png.meta b/apps/client/assets/resources/texture/explosion/explosion (1).png.meta similarity index 100% rename from client/assets/resources/texture/explosion/explosion (1).png.meta rename to apps/client/assets/resources/texture/explosion/explosion (1).png.meta diff --git a/client/assets/resources/texture/explosion/explosion (2).png b/apps/client/assets/resources/texture/explosion/explosion (2).png similarity index 100% rename from client/assets/resources/texture/explosion/explosion (2).png rename to apps/client/assets/resources/texture/explosion/explosion (2).png diff --git a/client/assets/resources/texture/explosion/explosion (2).png.meta b/apps/client/assets/resources/texture/explosion/explosion (2).png.meta similarity index 100% rename from client/assets/resources/texture/explosion/explosion (2).png.meta rename to apps/client/assets/resources/texture/explosion/explosion (2).png.meta diff --git a/client/assets/resources/texture/explosion/explosion (3).png b/apps/client/assets/resources/texture/explosion/explosion (3).png similarity index 100% rename from client/assets/resources/texture/explosion/explosion (3).png rename to apps/client/assets/resources/texture/explosion/explosion (3).png diff --git a/client/assets/resources/texture/explosion/explosion (3).png.meta b/apps/client/assets/resources/texture/explosion/explosion (3).png.meta similarity index 100% rename from client/assets/resources/texture/explosion/explosion (3).png.meta rename to apps/client/assets/resources/texture/explosion/explosion (3).png.meta diff --git a/client/assets/resources/texture/explosion/explosion (4).png b/apps/client/assets/resources/texture/explosion/explosion (4).png similarity index 100% rename from client/assets/resources/texture/explosion/explosion (4).png rename to apps/client/assets/resources/texture/explosion/explosion (4).png diff --git a/client/assets/resources/texture/explosion/explosion (4).png.meta b/apps/client/assets/resources/texture/explosion/explosion (4).png.meta similarity index 100% rename from client/assets/resources/texture/explosion/explosion (4).png.meta rename to apps/client/assets/resources/texture/explosion/explosion (4).png.meta diff --git a/client/assets/resources/texture/explosion/explosion (5).png b/apps/client/assets/resources/texture/explosion/explosion (5).png similarity index 100% rename from client/assets/resources/texture/explosion/explosion (5).png rename to apps/client/assets/resources/texture/explosion/explosion (5).png diff --git a/client/assets/resources/texture/explosion/explosion (5).png.meta b/apps/client/assets/resources/texture/explosion/explosion (5).png.meta similarity index 100% rename from client/assets/resources/texture/explosion/explosion (5).png.meta rename to apps/client/assets/resources/texture/explosion/explosion (5).png.meta diff --git a/client/assets/resources/texture/explosion/explosion (6).png b/apps/client/assets/resources/texture/explosion/explosion (6).png similarity index 100% rename from client/assets/resources/texture/explosion/explosion (6).png rename to apps/client/assets/resources/texture/explosion/explosion (6).png diff --git a/client/assets/resources/texture/explosion/explosion (6).png.meta b/apps/client/assets/resources/texture/explosion/explosion (6).png.meta similarity index 100% rename from client/assets/resources/texture/explosion/explosion (6).png.meta rename to apps/client/assets/resources/texture/explosion/explosion (6).png.meta diff --git a/client/assets/resources/texture/explosion/explosion (7).png b/apps/client/assets/resources/texture/explosion/explosion (7).png similarity index 100% rename from client/assets/resources/texture/explosion/explosion (7).png rename to apps/client/assets/resources/texture/explosion/explosion (7).png diff --git a/client/assets/resources/texture/explosion/explosion (7).png.meta b/apps/client/assets/resources/texture/explosion/explosion (7).png.meta similarity index 100% rename from client/assets/resources/texture/explosion/explosion (7).png.meta rename to apps/client/assets/resources/texture/explosion/explosion (7).png.meta diff --git a/client/assets/resources/texture/joystick.meta b/apps/client/assets/resources/texture/joystick.meta similarity index 100% rename from client/assets/resources/texture/joystick.meta rename to apps/client/assets/resources/texture/joystick.meta diff --git a/client/assets/resources/texture/joystick/circle.png b/apps/client/assets/resources/texture/joystick/circle.png similarity index 100% rename from client/assets/resources/texture/joystick/circle.png rename to apps/client/assets/resources/texture/joystick/circle.png diff --git a/client/assets/resources/texture/joystick/circle.png.meta b/apps/client/assets/resources/texture/joystick/circle.png.meta similarity index 100% rename from client/assets/resources/texture/joystick/circle.png.meta rename to apps/client/assets/resources/texture/joystick/circle.png.meta diff --git a/client/assets/resources/texture/player.meta b/apps/client/assets/resources/texture/player.meta similarity index 100% rename from client/assets/resources/texture/player.meta rename to apps/client/assets/resources/texture/player.meta diff --git a/client/assets/resources/texture/player/player1.meta b/apps/client/assets/resources/texture/player/player1.meta similarity index 100% rename from client/assets/resources/texture/player/player1.meta rename to apps/client/assets/resources/texture/player/player1.meta diff --git a/client/assets/resources/texture/player/player1/idle.meta b/apps/client/assets/resources/texture/player/player1/idle.meta similarity index 100% rename from client/assets/resources/texture/player/player1/idle.meta rename to apps/client/assets/resources/texture/player/player1/idle.meta diff --git a/client/assets/resources/texture/player/player1/idle/idle (1).png b/apps/client/assets/resources/texture/player/player1/idle/idle (1).png similarity index 100% rename from client/assets/resources/texture/player/player1/idle/idle (1).png rename to apps/client/assets/resources/texture/player/player1/idle/idle (1).png diff --git a/client/assets/resources/texture/player/player1/idle/idle (1).png.meta b/apps/client/assets/resources/texture/player/player1/idle/idle (1).png.meta similarity index 100% rename from client/assets/resources/texture/player/player1/idle/idle (1).png.meta rename to apps/client/assets/resources/texture/player/player1/idle/idle (1).png.meta diff --git a/client/assets/resources/texture/player/player1/idle/idle (2).png b/apps/client/assets/resources/texture/player/player1/idle/idle (2).png similarity index 100% rename from client/assets/resources/texture/player/player1/idle/idle (2).png rename to apps/client/assets/resources/texture/player/player1/idle/idle (2).png diff --git a/client/assets/resources/texture/player/player1/idle/idle (2).png.meta b/apps/client/assets/resources/texture/player/player1/idle/idle (2).png.meta similarity index 100% rename from client/assets/resources/texture/player/player1/idle/idle (2).png.meta rename to apps/client/assets/resources/texture/player/player1/idle/idle (2).png.meta diff --git a/client/assets/resources/texture/player/player1/idle/idle (3).png b/apps/client/assets/resources/texture/player/player1/idle/idle (3).png similarity index 100% rename from client/assets/resources/texture/player/player1/idle/idle (3).png rename to apps/client/assets/resources/texture/player/player1/idle/idle (3).png diff --git a/client/assets/resources/texture/player/player1/idle/idle (3).png.meta b/apps/client/assets/resources/texture/player/player1/idle/idle (3).png.meta similarity index 100% rename from client/assets/resources/texture/player/player1/idle/idle (3).png.meta rename to apps/client/assets/resources/texture/player/player1/idle/idle (3).png.meta diff --git a/client/assets/resources/texture/player/player1/idle/idle (4).png b/apps/client/assets/resources/texture/player/player1/idle/idle (4).png similarity index 100% rename from client/assets/resources/texture/player/player1/idle/idle (4).png rename to apps/client/assets/resources/texture/player/player1/idle/idle (4).png diff --git a/client/assets/resources/texture/player/player1/idle/idle (4).png.meta b/apps/client/assets/resources/texture/player/player1/idle/idle (4).png.meta similarity index 100% rename from client/assets/resources/texture/player/player1/idle/idle (4).png.meta rename to apps/client/assets/resources/texture/player/player1/idle/idle (4).png.meta diff --git a/client/assets/resources/texture/player/player1/idle/idle (5).png b/apps/client/assets/resources/texture/player/player1/idle/idle (5).png similarity index 100% rename from client/assets/resources/texture/player/player1/idle/idle (5).png rename to apps/client/assets/resources/texture/player/player1/idle/idle (5).png diff --git a/client/assets/resources/texture/player/player1/idle/idle (5).png.meta b/apps/client/assets/resources/texture/player/player1/idle/idle (5).png.meta similarity index 100% rename from client/assets/resources/texture/player/player1/idle/idle (5).png.meta rename to apps/client/assets/resources/texture/player/player1/idle/idle (5).png.meta diff --git a/client/assets/resources/texture/player/player1/idle/idle (6).png b/apps/client/assets/resources/texture/player/player1/idle/idle (6).png similarity index 100% rename from client/assets/resources/texture/player/player1/idle/idle (6).png rename to apps/client/assets/resources/texture/player/player1/idle/idle (6).png diff --git a/client/assets/resources/texture/player/player1/idle/idle (6).png.meta b/apps/client/assets/resources/texture/player/player1/idle/idle (6).png.meta similarity index 100% rename from client/assets/resources/texture/player/player1/idle/idle (6).png.meta rename to apps/client/assets/resources/texture/player/player1/idle/idle (6).png.meta diff --git a/client/assets/resources/texture/player/player1/run.meta b/apps/client/assets/resources/texture/player/player1/run.meta similarity index 100% rename from client/assets/resources/texture/player/player1/run.meta rename to apps/client/assets/resources/texture/player/player1/run.meta diff --git a/client/assets/resources/texture/player/player1/run/run (1).png b/apps/client/assets/resources/texture/player/player1/run/run (1).png similarity index 100% rename from client/assets/resources/texture/player/player1/run/run (1).png rename to apps/client/assets/resources/texture/player/player1/run/run (1).png diff --git a/client/assets/resources/texture/player/player1/run/run (1).png.meta b/apps/client/assets/resources/texture/player/player1/run/run (1).png.meta similarity index 100% rename from client/assets/resources/texture/player/player1/run/run (1).png.meta rename to apps/client/assets/resources/texture/player/player1/run/run (1).png.meta diff --git a/client/assets/resources/texture/player/player1/run/run (2).png b/apps/client/assets/resources/texture/player/player1/run/run (2).png similarity index 100% rename from client/assets/resources/texture/player/player1/run/run (2).png rename to apps/client/assets/resources/texture/player/player1/run/run (2).png diff --git a/client/assets/resources/texture/player/player1/run/run (2).png.meta b/apps/client/assets/resources/texture/player/player1/run/run (2).png.meta similarity index 100% rename from client/assets/resources/texture/player/player1/run/run (2).png.meta rename to apps/client/assets/resources/texture/player/player1/run/run (2).png.meta diff --git a/client/assets/resources/texture/player/player1/run/run (3).png b/apps/client/assets/resources/texture/player/player1/run/run (3).png similarity index 100% rename from client/assets/resources/texture/player/player1/run/run (3).png rename to apps/client/assets/resources/texture/player/player1/run/run (3).png diff --git a/client/assets/resources/texture/player/player1/run/run (3).png.meta b/apps/client/assets/resources/texture/player/player1/run/run (3).png.meta similarity index 100% rename from client/assets/resources/texture/player/player1/run/run (3).png.meta rename to apps/client/assets/resources/texture/player/player1/run/run (3).png.meta diff --git a/client/assets/resources/texture/player/player1/run/run (4).png b/apps/client/assets/resources/texture/player/player1/run/run (4).png similarity index 100% rename from client/assets/resources/texture/player/player1/run/run (4).png rename to apps/client/assets/resources/texture/player/player1/run/run (4).png diff --git a/client/assets/resources/texture/player/player1/run/run (4).png.meta b/apps/client/assets/resources/texture/player/player1/run/run (4).png.meta similarity index 100% rename from client/assets/resources/texture/player/player1/run/run (4).png.meta rename to apps/client/assets/resources/texture/player/player1/run/run (4).png.meta diff --git a/client/assets/resources/texture/player/player1/run/run (5).png b/apps/client/assets/resources/texture/player/player1/run/run (5).png similarity index 100% rename from client/assets/resources/texture/player/player1/run/run (5).png rename to apps/client/assets/resources/texture/player/player1/run/run (5).png diff --git a/client/assets/resources/texture/player/player1/run/run (5).png.meta b/apps/client/assets/resources/texture/player/player1/run/run (5).png.meta similarity index 100% rename from client/assets/resources/texture/player/player1/run/run (5).png.meta rename to apps/client/assets/resources/texture/player/player1/run/run (5).png.meta diff --git a/client/assets/resources/texture/player/player1/run/run (6).png b/apps/client/assets/resources/texture/player/player1/run/run (6).png similarity index 100% rename from client/assets/resources/texture/player/player1/run/run (6).png rename to apps/client/assets/resources/texture/player/player1/run/run (6).png diff --git a/client/assets/resources/texture/player/player1/run/run (6).png.meta b/apps/client/assets/resources/texture/player/player1/run/run (6).png.meta similarity index 100% rename from client/assets/resources/texture/player/player1/run/run (6).png.meta rename to apps/client/assets/resources/texture/player/player1/run/run (6).png.meta diff --git a/client/assets/resources/texture/player/player2.meta b/apps/client/assets/resources/texture/player/player2.meta similarity index 100% rename from client/assets/resources/texture/player/player2.meta rename to apps/client/assets/resources/texture/player/player2.meta diff --git a/client/assets/resources/texture/player/player2/idle.meta b/apps/client/assets/resources/texture/player/player2/idle.meta similarity index 100% rename from client/assets/resources/texture/player/player2/idle.meta rename to apps/client/assets/resources/texture/player/player2/idle.meta diff --git a/client/assets/resources/texture/player/player2/idle/idle (1).png b/apps/client/assets/resources/texture/player/player2/idle/idle (1).png similarity index 100% rename from client/assets/resources/texture/player/player2/idle/idle (1).png rename to apps/client/assets/resources/texture/player/player2/idle/idle (1).png diff --git a/client/assets/resources/texture/player/player2/idle/idle (1).png.meta b/apps/client/assets/resources/texture/player/player2/idle/idle (1).png.meta similarity index 100% rename from client/assets/resources/texture/player/player2/idle/idle (1).png.meta rename to apps/client/assets/resources/texture/player/player2/idle/idle (1).png.meta diff --git a/client/assets/resources/texture/player/player2/idle/idle (2).png b/apps/client/assets/resources/texture/player/player2/idle/idle (2).png similarity index 100% rename from client/assets/resources/texture/player/player2/idle/idle (2).png rename to apps/client/assets/resources/texture/player/player2/idle/idle (2).png diff --git a/client/assets/resources/texture/player/player2/idle/idle (2).png.meta b/apps/client/assets/resources/texture/player/player2/idle/idle (2).png.meta similarity index 100% rename from client/assets/resources/texture/player/player2/idle/idle (2).png.meta rename to apps/client/assets/resources/texture/player/player2/idle/idle (2).png.meta diff --git a/client/assets/resources/texture/player/player2/idle/idle (3).png b/apps/client/assets/resources/texture/player/player2/idle/idle (3).png similarity index 100% rename from client/assets/resources/texture/player/player2/idle/idle (3).png rename to apps/client/assets/resources/texture/player/player2/idle/idle (3).png diff --git a/client/assets/resources/texture/player/player2/idle/idle (3).png.meta b/apps/client/assets/resources/texture/player/player2/idle/idle (3).png.meta similarity index 100% rename from client/assets/resources/texture/player/player2/idle/idle (3).png.meta rename to apps/client/assets/resources/texture/player/player2/idle/idle (3).png.meta diff --git a/client/assets/resources/texture/player/player2/idle/idle (4).png b/apps/client/assets/resources/texture/player/player2/idle/idle (4).png similarity index 100% rename from client/assets/resources/texture/player/player2/idle/idle (4).png rename to apps/client/assets/resources/texture/player/player2/idle/idle (4).png diff --git a/client/assets/resources/texture/player/player2/idle/idle (4).png.meta b/apps/client/assets/resources/texture/player/player2/idle/idle (4).png.meta similarity index 100% rename from client/assets/resources/texture/player/player2/idle/idle (4).png.meta rename to apps/client/assets/resources/texture/player/player2/idle/idle (4).png.meta diff --git a/client/assets/resources/texture/player/player2/idle/idle (5).png b/apps/client/assets/resources/texture/player/player2/idle/idle (5).png similarity index 100% rename from client/assets/resources/texture/player/player2/idle/idle (5).png rename to apps/client/assets/resources/texture/player/player2/idle/idle (5).png diff --git a/client/assets/resources/texture/player/player2/idle/idle (5).png.meta b/apps/client/assets/resources/texture/player/player2/idle/idle (5).png.meta similarity index 100% rename from client/assets/resources/texture/player/player2/idle/idle (5).png.meta rename to apps/client/assets/resources/texture/player/player2/idle/idle (5).png.meta diff --git a/client/assets/resources/texture/player/player2/idle/idle (6).png b/apps/client/assets/resources/texture/player/player2/idle/idle (6).png similarity index 100% rename from client/assets/resources/texture/player/player2/idle/idle (6).png rename to apps/client/assets/resources/texture/player/player2/idle/idle (6).png diff --git a/client/assets/resources/texture/player/player2/idle/idle (6).png.meta b/apps/client/assets/resources/texture/player/player2/idle/idle (6).png.meta similarity index 100% rename from client/assets/resources/texture/player/player2/idle/idle (6).png.meta rename to apps/client/assets/resources/texture/player/player2/idle/idle (6).png.meta diff --git a/client/assets/resources/texture/player/player2/run.meta b/apps/client/assets/resources/texture/player/player2/run.meta similarity index 100% rename from client/assets/resources/texture/player/player2/run.meta rename to apps/client/assets/resources/texture/player/player2/run.meta diff --git a/client/assets/resources/texture/player/player2/run/run (1).png b/apps/client/assets/resources/texture/player/player2/run/run (1).png similarity index 100% rename from client/assets/resources/texture/player/player2/run/run (1).png rename to apps/client/assets/resources/texture/player/player2/run/run (1).png diff --git a/client/assets/resources/texture/player/player2/run/run (1).png.meta b/apps/client/assets/resources/texture/player/player2/run/run (1).png.meta similarity index 100% rename from client/assets/resources/texture/player/player2/run/run (1).png.meta rename to apps/client/assets/resources/texture/player/player2/run/run (1).png.meta diff --git a/client/assets/resources/texture/player/player2/run/run (2).png b/apps/client/assets/resources/texture/player/player2/run/run (2).png similarity index 100% rename from client/assets/resources/texture/player/player2/run/run (2).png rename to apps/client/assets/resources/texture/player/player2/run/run (2).png diff --git a/client/assets/resources/texture/player/player2/run/run (2).png.meta b/apps/client/assets/resources/texture/player/player2/run/run (2).png.meta similarity index 100% rename from client/assets/resources/texture/player/player2/run/run (2).png.meta rename to apps/client/assets/resources/texture/player/player2/run/run (2).png.meta diff --git a/client/assets/resources/texture/player/player2/run/run (3).png b/apps/client/assets/resources/texture/player/player2/run/run (3).png similarity index 100% rename from client/assets/resources/texture/player/player2/run/run (3).png rename to apps/client/assets/resources/texture/player/player2/run/run (3).png diff --git a/client/assets/resources/texture/player/player2/run/run (3).png.meta b/apps/client/assets/resources/texture/player/player2/run/run (3).png.meta similarity index 100% rename from client/assets/resources/texture/player/player2/run/run (3).png.meta rename to apps/client/assets/resources/texture/player/player2/run/run (3).png.meta diff --git a/client/assets/resources/texture/player/player2/run/run (4).png b/apps/client/assets/resources/texture/player/player2/run/run (4).png similarity index 100% rename from client/assets/resources/texture/player/player2/run/run (4).png rename to apps/client/assets/resources/texture/player/player2/run/run (4).png diff --git a/client/assets/resources/texture/player/player2/run/run (4).png.meta b/apps/client/assets/resources/texture/player/player2/run/run (4).png.meta similarity index 100% rename from client/assets/resources/texture/player/player2/run/run (4).png.meta rename to apps/client/assets/resources/texture/player/player2/run/run (4).png.meta diff --git a/client/assets/resources/texture/player/player2/run/run (5).png b/apps/client/assets/resources/texture/player/player2/run/run (5).png similarity index 100% rename from client/assets/resources/texture/player/player2/run/run (5).png rename to apps/client/assets/resources/texture/player/player2/run/run (5).png diff --git a/client/assets/resources/texture/player/player2/run/run (5).png.meta b/apps/client/assets/resources/texture/player/player2/run/run (5).png.meta similarity index 100% rename from client/assets/resources/texture/player/player2/run/run (5).png.meta rename to apps/client/assets/resources/texture/player/player2/run/run (5).png.meta diff --git a/client/assets/resources/texture/player/player2/run/run (6).png b/apps/client/assets/resources/texture/player/player2/run/run (6).png similarity index 100% rename from client/assets/resources/texture/player/player2/run/run (6).png rename to apps/client/assets/resources/texture/player/player2/run/run (6).png diff --git a/client/assets/resources/texture/player/player2/run/run (6).png.meta b/apps/client/assets/resources/texture/player/player2/run/run (6).png.meta similarity index 100% rename from client/assets/resources/texture/player/player2/run/run (6).png.meta rename to apps/client/assets/resources/texture/player/player2/run/run (6).png.meta diff --git a/client/assets/resources/texture/weapon.meta b/apps/client/assets/resources/texture/weapon.meta similarity index 100% rename from client/assets/resources/texture/weapon.meta rename to apps/client/assets/resources/texture/weapon.meta diff --git a/client/assets/resources/texture/weapon/weapon1.meta b/apps/client/assets/resources/texture/weapon/weapon1.meta similarity index 100% rename from client/assets/resources/texture/weapon/weapon1.meta rename to apps/client/assets/resources/texture/weapon/weapon1.meta diff --git a/client/assets/resources/texture/weapon/weapon1/attack.meta b/apps/client/assets/resources/texture/weapon/weapon1/attack.meta similarity index 100% rename from client/assets/resources/texture/weapon/weapon1/attack.meta rename to apps/client/assets/resources/texture/weapon/weapon1/attack.meta diff --git a/client/assets/resources/texture/weapon/weapon1/attack/attack (1).png b/apps/client/assets/resources/texture/weapon/weapon1/attack/attack (1).png similarity index 100% rename from client/assets/resources/texture/weapon/weapon1/attack/attack (1).png rename to apps/client/assets/resources/texture/weapon/weapon1/attack/attack (1).png diff --git a/client/assets/resources/texture/weapon/weapon1/attack/attack (1).png.meta b/apps/client/assets/resources/texture/weapon/weapon1/attack/attack (1).png.meta similarity index 100% rename from client/assets/resources/texture/weapon/weapon1/attack/attack (1).png.meta rename to apps/client/assets/resources/texture/weapon/weapon1/attack/attack (1).png.meta diff --git a/client/assets/resources/texture/weapon/weapon1/attack/attack (2).png b/apps/client/assets/resources/texture/weapon/weapon1/attack/attack (2).png similarity index 100% rename from client/assets/resources/texture/weapon/weapon1/attack/attack (2).png rename to apps/client/assets/resources/texture/weapon/weapon1/attack/attack (2).png diff --git a/client/assets/resources/texture/weapon/weapon1/attack/attack (2).png.meta b/apps/client/assets/resources/texture/weapon/weapon1/attack/attack (2).png.meta similarity index 100% rename from client/assets/resources/texture/weapon/weapon1/attack/attack (2).png.meta rename to apps/client/assets/resources/texture/weapon/weapon1/attack/attack (2).png.meta diff --git a/client/assets/resources/texture/weapon/weapon1/attack/attack (3).png b/apps/client/assets/resources/texture/weapon/weapon1/attack/attack (3).png similarity index 100% rename from client/assets/resources/texture/weapon/weapon1/attack/attack (3).png rename to apps/client/assets/resources/texture/weapon/weapon1/attack/attack (3).png diff --git a/client/assets/resources/texture/weapon/weapon1/attack/attack (3).png.meta b/apps/client/assets/resources/texture/weapon/weapon1/attack/attack (3).png.meta similarity index 100% rename from client/assets/resources/texture/weapon/weapon1/attack/attack (3).png.meta rename to apps/client/assets/resources/texture/weapon/weapon1/attack/attack (3).png.meta diff --git a/client/assets/resources/texture/weapon/weapon1/attack/attack (4).png b/apps/client/assets/resources/texture/weapon/weapon1/attack/attack (4).png similarity index 100% rename from client/assets/resources/texture/weapon/weapon1/attack/attack (4).png rename to apps/client/assets/resources/texture/weapon/weapon1/attack/attack (4).png diff --git a/client/assets/resources/texture/weapon/weapon1/attack/attack (4).png.meta b/apps/client/assets/resources/texture/weapon/weapon1/attack/attack (4).png.meta similarity index 100% rename from client/assets/resources/texture/weapon/weapon1/attack/attack (4).png.meta rename to apps/client/assets/resources/texture/weapon/weapon1/attack/attack (4).png.meta diff --git a/client/assets/resources/texture/weapon/weapon1/attack/attack (5).png b/apps/client/assets/resources/texture/weapon/weapon1/attack/attack (5).png similarity index 100% rename from client/assets/resources/texture/weapon/weapon1/attack/attack (5).png rename to apps/client/assets/resources/texture/weapon/weapon1/attack/attack (5).png diff --git a/client/assets/resources/texture/weapon/weapon1/attack/attack (5).png.meta b/apps/client/assets/resources/texture/weapon/weapon1/attack/attack (5).png.meta similarity index 100% rename from client/assets/resources/texture/weapon/weapon1/attack/attack (5).png.meta rename to apps/client/assets/resources/texture/weapon/weapon1/attack/attack (5).png.meta diff --git a/client/assets/resources/texture/weapon/weapon1/attack/attack (6).png b/apps/client/assets/resources/texture/weapon/weapon1/attack/attack (6).png similarity index 100% rename from client/assets/resources/texture/weapon/weapon1/attack/attack (6).png rename to apps/client/assets/resources/texture/weapon/weapon1/attack/attack (6).png diff --git a/client/assets/resources/texture/weapon/weapon1/attack/attack (6).png.meta b/apps/client/assets/resources/texture/weapon/weapon1/attack/attack (6).png.meta similarity index 100% rename from client/assets/resources/texture/weapon/weapon1/attack/attack (6).png.meta rename to apps/client/assets/resources/texture/weapon/weapon1/attack/attack (6).png.meta diff --git a/client/assets/resources/texture/weapon/weapon1/attack/attack (7).png b/apps/client/assets/resources/texture/weapon/weapon1/attack/attack (7).png similarity index 100% rename from client/assets/resources/texture/weapon/weapon1/attack/attack (7).png rename to apps/client/assets/resources/texture/weapon/weapon1/attack/attack (7).png diff --git a/client/assets/resources/texture/weapon/weapon1/attack/attack (7).png.meta b/apps/client/assets/resources/texture/weapon/weapon1/attack/attack (7).png.meta similarity index 100% rename from client/assets/resources/texture/weapon/weapon1/attack/attack (7).png.meta rename to apps/client/assets/resources/texture/weapon/weapon1/attack/attack (7).png.meta diff --git a/client/assets/resources/texture/weapon/weapon1/idle.meta b/apps/client/assets/resources/texture/weapon/weapon1/idle.meta similarity index 100% rename from client/assets/resources/texture/weapon/weapon1/idle.meta rename to apps/client/assets/resources/texture/weapon/weapon1/idle.meta diff --git a/client/assets/resources/texture/weapon/weapon1/idle/idle (1).png b/apps/client/assets/resources/texture/weapon/weapon1/idle/idle (1).png similarity index 100% rename from client/assets/resources/texture/weapon/weapon1/idle/idle (1).png rename to apps/client/assets/resources/texture/weapon/weapon1/idle/idle (1).png diff --git a/client/assets/resources/texture/weapon/weapon1/idle/idle (1).png.meta b/apps/client/assets/resources/texture/weapon/weapon1/idle/idle (1).png.meta similarity index 100% rename from client/assets/resources/texture/weapon/weapon1/idle/idle (1).png.meta rename to apps/client/assets/resources/texture/weapon/weapon1/idle/idle (1).png.meta diff --git a/client/assets/resources/texture/weapon/weapon2.meta b/apps/client/assets/resources/texture/weapon/weapon2.meta similarity index 100% rename from client/assets/resources/texture/weapon/weapon2.meta rename to apps/client/assets/resources/texture/weapon/weapon2.meta diff --git a/client/assets/resources/texture/weapon/weapon2/attack.meta b/apps/client/assets/resources/texture/weapon/weapon2/attack.meta similarity index 100% rename from client/assets/resources/texture/weapon/weapon2/attack.meta rename to apps/client/assets/resources/texture/weapon/weapon2/attack.meta diff --git a/client/assets/resources/texture/weapon/weapon2/attack/attack (1).png b/apps/client/assets/resources/texture/weapon/weapon2/attack/attack (1).png similarity index 100% rename from client/assets/resources/texture/weapon/weapon2/attack/attack (1).png rename to apps/client/assets/resources/texture/weapon/weapon2/attack/attack (1).png diff --git a/client/assets/resources/texture/weapon/weapon2/attack/attack (1).png.meta b/apps/client/assets/resources/texture/weapon/weapon2/attack/attack (1).png.meta similarity index 100% rename from client/assets/resources/texture/weapon/weapon2/attack/attack (1).png.meta rename to apps/client/assets/resources/texture/weapon/weapon2/attack/attack (1).png.meta diff --git a/client/assets/resources/texture/weapon/weapon2/attack/attack (2).png b/apps/client/assets/resources/texture/weapon/weapon2/attack/attack (2).png similarity index 100% rename from client/assets/resources/texture/weapon/weapon2/attack/attack (2).png rename to apps/client/assets/resources/texture/weapon/weapon2/attack/attack (2).png diff --git a/client/assets/resources/texture/weapon/weapon2/attack/attack (2).png.meta b/apps/client/assets/resources/texture/weapon/weapon2/attack/attack (2).png.meta similarity index 100% rename from client/assets/resources/texture/weapon/weapon2/attack/attack (2).png.meta rename to apps/client/assets/resources/texture/weapon/weapon2/attack/attack (2).png.meta diff --git a/client/assets/resources/texture/weapon/weapon2/attack/attack (3).png b/apps/client/assets/resources/texture/weapon/weapon2/attack/attack (3).png similarity index 100% rename from client/assets/resources/texture/weapon/weapon2/attack/attack (3).png rename to apps/client/assets/resources/texture/weapon/weapon2/attack/attack (3).png diff --git a/client/assets/resources/texture/weapon/weapon2/attack/attack (3).png.meta b/apps/client/assets/resources/texture/weapon/weapon2/attack/attack (3).png.meta similarity index 100% rename from client/assets/resources/texture/weapon/weapon2/attack/attack (3).png.meta rename to apps/client/assets/resources/texture/weapon/weapon2/attack/attack (3).png.meta diff --git a/client/assets/resources/texture/weapon/weapon2/attack/attack (4).png b/apps/client/assets/resources/texture/weapon/weapon2/attack/attack (4).png similarity index 100% rename from client/assets/resources/texture/weapon/weapon2/attack/attack (4).png rename to apps/client/assets/resources/texture/weapon/weapon2/attack/attack (4).png diff --git a/client/assets/resources/texture/weapon/weapon2/attack/attack (4).png.meta b/apps/client/assets/resources/texture/weapon/weapon2/attack/attack (4).png.meta similarity index 100% rename from client/assets/resources/texture/weapon/weapon2/attack/attack (4).png.meta rename to apps/client/assets/resources/texture/weapon/weapon2/attack/attack (4).png.meta diff --git a/client/assets/resources/texture/weapon/weapon2/attack/attack (5).png b/apps/client/assets/resources/texture/weapon/weapon2/attack/attack (5).png similarity index 100% rename from client/assets/resources/texture/weapon/weapon2/attack/attack (5).png rename to apps/client/assets/resources/texture/weapon/weapon2/attack/attack (5).png diff --git a/client/assets/resources/texture/weapon/weapon2/attack/attack (5).png.meta b/apps/client/assets/resources/texture/weapon/weapon2/attack/attack (5).png.meta similarity index 100% rename from client/assets/resources/texture/weapon/weapon2/attack/attack (5).png.meta rename to apps/client/assets/resources/texture/weapon/weapon2/attack/attack (5).png.meta diff --git a/client/assets/resources/texture/weapon/weapon2/attack/attack (6).png b/apps/client/assets/resources/texture/weapon/weapon2/attack/attack (6).png similarity index 100% rename from client/assets/resources/texture/weapon/weapon2/attack/attack (6).png rename to apps/client/assets/resources/texture/weapon/weapon2/attack/attack (6).png diff --git a/client/assets/resources/texture/weapon/weapon2/attack/attack (6).png.meta b/apps/client/assets/resources/texture/weapon/weapon2/attack/attack (6).png.meta similarity index 100% rename from client/assets/resources/texture/weapon/weapon2/attack/attack (6).png.meta rename to apps/client/assets/resources/texture/weapon/weapon2/attack/attack (6).png.meta diff --git a/client/assets/resources/texture/weapon/weapon2/attack/attack (7).png b/apps/client/assets/resources/texture/weapon/weapon2/attack/attack (7).png similarity index 100% rename from client/assets/resources/texture/weapon/weapon2/attack/attack (7).png rename to apps/client/assets/resources/texture/weapon/weapon2/attack/attack (7).png diff --git a/client/assets/resources/texture/weapon/weapon2/attack/attack (7).png.meta b/apps/client/assets/resources/texture/weapon/weapon2/attack/attack (7).png.meta similarity index 100% rename from client/assets/resources/texture/weapon/weapon2/attack/attack (7).png.meta rename to apps/client/assets/resources/texture/weapon/weapon2/attack/attack (7).png.meta diff --git a/client/assets/resources/texture/weapon/weapon2/idle.meta b/apps/client/assets/resources/texture/weapon/weapon2/idle.meta similarity index 100% rename from client/assets/resources/texture/weapon/weapon2/idle.meta rename to apps/client/assets/resources/texture/weapon/weapon2/idle.meta diff --git a/client/assets/resources/texture/weapon/weapon2/idle/idle (1).png b/apps/client/assets/resources/texture/weapon/weapon2/idle/idle (1).png similarity index 100% rename from client/assets/resources/texture/weapon/weapon2/idle/idle (1).png rename to apps/client/assets/resources/texture/weapon/weapon2/idle/idle (1).png diff --git a/client/assets/resources/texture/weapon/weapon2/idle/idle (1).png.meta b/apps/client/assets/resources/texture/weapon/weapon2/idle/idle (1).png.meta similarity index 100% rename from client/assets/resources/texture/weapon/weapon2/idle/idle (1).png.meta rename to apps/client/assets/resources/texture/weapon/weapon2/idle/idle (1).png.meta diff --git a/apps/client/package.json b/apps/client/package.json new file mode 100644 index 0000000..5cb3807 --- /dev/null +++ b/apps/client/package.json @@ -0,0 +1,9 @@ +{ + "name": "@game/client", + "uuid": "c6c0afbe-ddea-4eb8-a29a-28c194f6e602", + "version": "3.6.0", + "creator": { + "version": "3.6.0" + }, + "type": "module" +} \ No newline at end of file diff --git a/client/settings/v2/packages/cocos-service.json b/apps/client/settings/v2/packages/cocos-service.json similarity index 100% rename from client/settings/v2/packages/cocos-service.json rename to apps/client/settings/v2/packages/cocos-service.json diff --git a/client/settings/v2/packages/engine.json b/apps/client/settings/v2/packages/engine.json similarity index 100% rename from client/settings/v2/packages/engine.json rename to apps/client/settings/v2/packages/engine.json diff --git a/client/settings/v2/packages/project.json b/apps/client/settings/v2/packages/project.json similarity index 100% rename from client/settings/v2/packages/project.json rename to apps/client/settings/v2/packages/project.json diff --git a/client/tsconfig.json b/apps/client/tsconfig.json similarity index 98% rename from client/tsconfig.json rename to apps/client/tsconfig.json index 7dc649a..2544084 100644 --- a/client/tsconfig.json +++ b/apps/client/tsconfig.json @@ -1,9 +1,8 @@ { /* Base configuration. Do not edit this field. */ "extends": "./temp/tsconfig.cocos.json", - /* Add your custom configuration here. */ "compilerOptions": { "strict": false } -} +} \ No newline at end of file diff --git a/server/package.json b/apps/server/package.json similarity index 74% rename from server/package.json rename to apps/server/package.json index fdcb193..ca20c9b 100644 --- a/server/package.json +++ b/apps/server/package.json @@ -1,5 +1,5 @@ { - "name": "BoomServer", + "name": "@game/server", "version": "1.0.0", "description": "", "main": "index.js", @@ -10,17 +10,16 @@ "author": "", "license": "ISC", "devDependencies": { - "@types/cors": "^2.8.12", - "@types/express": "^4.17.14", "@types/node": "^18.11.7", "@types/ws": "^8.5.3", + "eslint": "^8.26.0", "nodemon": "^2.0.20", "ts-node": "^10.9.1", "typescript": "^4.8.4" }, "dependencies": { - "cors": "^2.8.5", - "express": "^4.18.2", + "@types/fs-extra": "^9.0.13", + "fs-extra": "^10.1.0", "ws": "^8.10.0" } -} +} \ No newline at end of file diff --git a/apps/server/src/base/Singleton.ts b/apps/server/src/base/Singleton.ts new file mode 100644 index 0000000..b755b94 --- /dev/null +++ b/apps/server/src/base/Singleton.ts @@ -0,0 +1,13 @@ +export default class Singleton { + private static _instance: any = null + + static GetInstance(): T { + if (this._instance === null) { + this._instance = new this() + } + return this._instance + } + + protected constructor() { + } +} \ No newline at end of file diff --git a/apps/server/src/biz/Player.ts b/apps/server/src/biz/Player.ts new file mode 100644 index 0000000..cd71637 --- /dev/null +++ b/apps/server/src/biz/Player.ts @@ -0,0 +1,18 @@ +import Connection from '../core/Connection' + +export type IPlayer = Pick + +export default class Player { + id: number + nickname: string + connection: Connection + rid: number + + constructor({ id, nickname, connection }: IPlayer) { + this.id = id + this.nickname = nickname + this.connection = connection + this.connection.playerId = this.id + this.rid = -1 + } +} diff --git a/apps/server/src/biz/PlayerManager.ts b/apps/server/src/biz/PlayerManager.ts new file mode 100644 index 0000000..68949fd --- /dev/null +++ b/apps/server/src/biz/PlayerManager.ts @@ -0,0 +1,55 @@ +import { ApiMsgEnum } from '..' +import Singleton from '../base/Singleton' +import type { IPlayer } from './Player' +import Player from './Player' +import RoomManager from './RoomManager' + +export default class PlayerManager extends Singleton { + static get Instance() { + return super.GetInstance() + } + + playerId = 1 + players: Set = new Set() + idMapPlayer: Map = new Map() + + createPlayer({ connection, nickname }: Omit) { + const player = new Player({ id: this.playerId++, connection, nickname }) + this.players.add(player) + this.idMapPlayer.set(player.id, player) + return player + } + + removePlayer(uid: number) { + const player = this.idMapPlayer.get(uid) + if (player) { + const rid = player.rid + if (rid !== undefined) { + RoomManager.Instance.leaveRoom(rid, uid); + RoomManager.Instance.syncRooms(); + RoomManager.Instance.syncRoom(rid); + } + this.players.delete(player) + this.idMapPlayer.delete(uid) + this.syncPlayers() + } + } + + getPlayerById(uid: number) { + return this.idMapPlayer.get(uid) + } + + syncPlayers() { + for (const player of this.players) { + player.connection.sendMsg(ApiMsgEnum.MsgPlayerList, { list: this.getPlayersView() }) + } + } + + getPlayersView(players: Set = this.players) { + return [...players].map((player) => this.getPlayerView(player)) + } + + getPlayerView({ id, nickname, rid }: Player) { + return { id, nickname, rid } + } +} diff --git a/apps/server/src/biz/Room.ts b/apps/server/src/biz/Room.ts new file mode 100644 index 0000000..cf1bb1e --- /dev/null +++ b/apps/server/src/biz/Room.ts @@ -0,0 +1,39 @@ +import { ApiMsgEnum } from '..' +import type Player from './Player' +import PlayerManager from './PlayerManager' +import RoomManager from './RoomManager' + +export default class Room { + id: number + players: Set = new Set() + + constructor(rid: number) { + this.id = rid + } + + join(uid: number) { + const player = PlayerManager.Instance.getPlayerById(uid) + if (player) { + player.rid = this.id + this.players.add(player) + } + + } + + leave(uid: number) { + const player = PlayerManager.Instance.getPlayerById(uid) + if (player) { + player.rid = -1 + this.players.delete(player) + if (!this.players.size) { + RoomManager.Instance.closeRoom(this.id) + } + } + } + + sync() { + for (const player of this.players) { + player.connection.sendMsg(ApiMsgEnum.MsgRoom, RoomManager.Instance.getRoomView(this)) + } + } +} diff --git a/apps/server/src/biz/RoomManager.ts b/apps/server/src/biz/RoomManager.ts new file mode 100644 index 0000000..3057112 --- /dev/null +++ b/apps/server/src/biz/RoomManager.ts @@ -0,0 +1,70 @@ +import { ApiMsgEnum } from '..' +import Singleton from '../base/Singleton' +import Player from './Player' +import PlayerManager from './PlayerManager' +import Room from './Room' + +export default class RoomManager extends Singleton { + static get Instance() { + return super.GetInstance() + } + + roomId = 1 + rooms: Set = new Set() + idMapRoom: Map = new Map() + + createRoom() { + const room = new Room(this.roomId++) + this.rooms.add(room) + this.idMapRoom.set(room.id, room) + return room + } + + joinRoom(rid: number, uid: number) { + const room = this.getRoomById(rid) + if (room) { + room.join(uid) + return room + } + } + + leaveRoom(rid: number, uid: number) { + const room = this.getRoomById(rid) + if (room) { + room.leave(uid) + } + } + + closeRoom(rid: number) { + const room = this.getRoomById(rid) + if (room) { + this.rooms.delete(room) + this.idMapRoom.delete(rid) + } + } + + getRoomById(id: number) { + return this.idMapRoom.get(id) + } + + syncRooms() { + for (const player of PlayerManager.Instance.players) { + player.connection.sendMsg(ApiMsgEnum.MsgRoomList, { list: this.getRoomsView() }) + } + } + + syncRoom(rid: number) { + const room = this.idMapRoom.get(rid) + if (room) { + room.sync() + } + } + + getRoomsView(rooms: Set = this.rooms) { + return [...rooms].map((room) => this.getRoomView(room)) + } + + getRoomView({ id, players }: Room) { + return { id, players: PlayerManager.Instance.getPlayersView(players) } + } +} diff --git a/apps/server/src/common/index.ts b/apps/server/src/common/index.ts new file mode 100644 index 0000000..ecbe74e --- /dev/null +++ b/apps/server/src/common/index.ts @@ -0,0 +1 @@ +console.log(112221); diff --git a/apps/server/src/core/Connection.ts b/apps/server/src/core/Connection.ts new file mode 100644 index 0000000..b6aed13 --- /dev/null +++ b/apps/server/src/core/Connection.ts @@ -0,0 +1,79 @@ +import WebSocket from 'ws'; +import { EventEmitter } from 'stream'; +import MyServer, { IData } from '.'; +import { getTime } from '../utils'; + +export enum ConnectionEventEnum { + Close = 'Close', +} + +export default class Connection extends EventEmitter { + server: MyServer + ws: WebSocket + msgMap: Map = new Map() + playerId?: number; + + constructor(server: MyServer, ws: WebSocket) { + super() + + this.server = server + this.ws = ws + this.ws.on('close', (code: number, reason: Buffer) => { + this.emit(ConnectionEventEnum.Close, code, reason.toString()) + }) + + this.ws.on('message', (buffer: Buffer) => { + const str = buffer.toString() + try { + const { name, data } = JSON.parse(str) + console.log(`${getTime()}接收|${this.playerId || -1}|${str}`) + if (this.server.apiMap.has(name)) { + try { + const cb = this.server.apiMap.get(name) + const res = cb?.(this, data) + this.sendMsg(name, { + success: true, + res, + }) + } catch (error) { + this.sendMsg(name, { + success: false, + error: (error as Error)?.message, + }) + } + return + } + + if (this.msgMap.has(name)) { + this.msgMap.get(name)?.forEach(cb => cb(data)) + } + } catch (error) { + console.log(`解析失败,${str}不是合法的JSON格式:`, error) + } + }) + } + + listenMsg(name: string, cb: Function) { + if (this.msgMap.has(name)) { + this.msgMap.get(name)?.push(cb) + } else { + this.msgMap.set(name, [cb]) + } + } + + unlistenMsg(name: string, cb: Function) { + if (this.msgMap.has(name)) { + const index = this.msgMap.get(name)?.indexOf(cb) || -1 + index > -1 && this.msgMap.get(name)?.splice(index, 1) + } + } + + sendMsg(name: string, data: IData) { + const msg = JSON.stringify({ + name, + data + }) + console.log(`${getTime()}发送|${this.playerId || -1}|${msg}`) + this.ws.send(msg) + } +} \ No newline at end of file diff --git a/apps/server/src/core/index.ts b/apps/server/src/core/index.ts new file mode 100644 index 0000000..1d69ea1 --- /dev/null +++ b/apps/server/src/core/index.ts @@ -0,0 +1,71 @@ +import { EventEmitter } from 'stream'; +import WebSocket, { WebSocketServer } from 'ws'; +import Connection, { ConnectionEventEnum } from './Connection'; + +export interface IMyServerOptions { + port: number +} + +export type IData = Record + +export interface ICallApiRet { + success: boolean; + error?: Error; + res?: IData +} + +export enum MyServerEventEnum { + Connect = 'Connect', + DisConnect = 'DisConnect', +} + +export default class MyServer extends EventEmitter { + wss?: WebSocketServer + port: number + connections: Set = new Set() + apiMap: Map = new Map() + + constructor({ port = 8080 }: Partial) { + super() + this.port = port + } + + start() { + return new Promise((resolve, reject) => { + this.wss = new WebSocketServer({ port: this.port }); + this.wss.on('connection', this.handleConnect.bind(this)); + + this.wss.on("error", (e) => { + reject(e) + }) + + this.wss.on("close", () => { + console.log("MyServer 服务关闭"); + }) + + this.wss.on("listening", () => { + resolve(true) + }) + }) + + } + + handleConnect(ws: WebSocket) { + //初始化 + const connection = new Connection(this, ws) + + //向外告知有人来了 + this.connections.add(connection) + this.emit(MyServerEventEnum.Connect, connection) + + //向外告知有人走了 + connection.on(ConnectionEventEnum.Close, (code: number, reason: string) => { + this.connections.delete(connection) + this.emit(MyServerEventEnum.DisConnect, connection, code, reason) + }) + } + + setApi(apiName: string, cb: Function) { + this.apiMap.set(apiName, cb) + } +} \ No newline at end of file diff --git a/apps/server/src/index.ts b/apps/server/src/index.ts new file mode 100644 index 0000000..436294a --- /dev/null +++ b/apps/server/src/index.ts @@ -0,0 +1,109 @@ +import MyServer, { IData, MyServerEventEnum } from './core'; +import Player from './biz/Player'; +import PlayerManager from './biz/PlayerManager'; +import RoomManager from './biz/RoomManager'; +import Connection from './core/Connection'; +import { copyCommon, getTime } from './utils'; + +export enum ApiMsgEnum { + ApiPlayerList = 'ApiPlayerList', + ApiPlayerJoin = 'ApiPlayerJoin', + ApiRoomList = 'ApiRoomList', + ApiRoomCreate = 'ApiRoomCreate', + ApiRoomJoin = 'ApiRoomJoin', + ApiRoomLeave = 'ApiRoomLeave', + MsgPlayerList = 'MsgPlayerList', + MsgRoomList = 'MsgRoomList', + MsgRoom = 'MsgRoom', +} + +copyCommon() + +const server = new MyServer({ port: 8888 }) + +// event +server.on(MyServerEventEnum.Connect, (connection: Connection) => { + console.log(`${getTime()}来人|人数|${server.connections.size}`) +}) + +server.on(MyServerEventEnum.DisConnect, (connection: Connection) => { + console.log(`${getTime()}走人|人数|${server.connections.size}`) + if (connection.playerId) { + PlayerManager.Instance.removePlayer(connection.playerId) + } +}) + +// api +server.setApi(ApiMsgEnum.ApiPlayerList, (connection: Connection, data: IData) => { + return { list: PlayerManager.Instance.getPlayersView() } +}) + +server.setApi(ApiMsgEnum.ApiPlayerJoin, (connection: Connection, data: IData) => { + const nickname = data.nickname + const player = PlayerManager.Instance.createPlayer({ connection, nickname }) + PlayerManager.Instance.syncPlayers() + return PlayerManager.Instance.getPlayerView(player) +}) + +server.setApi(ApiMsgEnum.ApiRoomList, (connection: Connection, data: IData) => { + return { list: RoomManager.Instance.getRoomsView() } +}) + +server.setApi(ApiMsgEnum.ApiRoomCreate, (connection: Connection, data: IData) => { + if (connection.playerId) { + const room = RoomManager.Instance.joinRoom(RoomManager.Instance.createRoom().id, connection.playerId) + if (room) { + RoomManager.Instance.syncRooms() + PlayerManager.Instance.syncPlayers() + return RoomManager.Instance.getRoomView(room) + } else { + throw new Error("ApiRoomCreate room不存在") + } + } else { + throw new Error("ApiRoomCreate 玩家未登录") + } +}) + +server.setApi(ApiMsgEnum.ApiRoomJoin, (connection: Connection, data: IData) => { + if (connection.playerId) { + const room = RoomManager.Instance.joinRoom(data.rid, connection.playerId) + if (room) { + RoomManager.Instance.syncRooms() + PlayerManager.Instance.syncPlayers() + RoomManager.Instance.syncRoom(room.id) + return RoomManager.Instance.getRoomView(room) + } else { + throw new Error("ApiRoomJoin room不存在") + } + } else { + throw new Error("ApiRoomJoin 玩家未登录") + } +}) + +server.setApi(ApiMsgEnum.ApiRoomLeave, (connection: Connection, data: IData) => { + if (connection.playerId) { + const player = PlayerManager.Instance.getPlayerById(connection.playerId) + if (player) { + const rid = player.rid + if (rid) { + RoomManager.Instance.leaveRoom(rid, player.id) + PlayerManager.Instance.syncPlayers() + RoomManager.Instance.syncRooms() + RoomManager.Instance.syncRoom(rid) + } else { + throw new Error("ApiRoomLeave 玩家不在房间") + } + } else { + throw new Error("ApiRoomLeave 玩家不存在") + } + } else { + throw new Error("ApiRoomLeave 玩家未登录") + } +}) + +// start!! +server.start().then(() => { + console.log("服务启动!") +}).catch((e) => { + console.log("服务异常", e) +}) diff --git a/server/src/binary.ts b/apps/server/src/utils/binary.ts similarity index 100% rename from server/src/binary.ts rename to apps/server/src/utils/binary.ts diff --git a/server/src/eMath.ts b/apps/server/src/utils/eMath.ts similarity index 100% rename from server/src/eMath.ts rename to apps/server/src/utils/eMath.ts diff --git a/apps/server/src/utils/index.ts b/apps/server/src/utils/index.ts new file mode 100644 index 0000000..0266ee2 --- /dev/null +++ b/apps/server/src/utils/index.ts @@ -0,0 +1,22 @@ +import fs from 'fs-extra' +import path from 'path' + +export const getTime = () => new Date().toLocaleString().split("├")[0] + +export async function copyCommon() { + const src = path.resolve('./common') + const dst = path.resolve('../client/assets/Scripts/common') + + console.log(src, dst); + + // clean + await fs.remove(dst) + + //create + await fs.ensureDir(dst) + + // copy + await fs.copy(src, dst) + console.log('同步成功') +} + diff --git a/server/tsconfig.json b/apps/server/tsconfig.json similarity index 91% rename from server/tsconfig.json rename to apps/server/tsconfig.json index 75dcaea..ce84d99 100644 --- a/server/tsconfig.json +++ b/apps/server/tsconfig.json @@ -1,17 +1,18 @@ { + "include": [ + "./src" + ], "compilerOptions": { /* Visit https://aka.ms/tsconfig to read more about this file */ - /* Projects */ // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ - /* Language and Environment */ - "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ // "jsx": "preserve", /* Specify what JSX code is generated. */ // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ @@ -23,9 +24,8 @@ // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ - /* Modules */ - "module": "commonjs", /* Specify what module code is generated. */ + "module": "commonjs", /* Specify what module code is generated. */ // "rootDir": "./", /* Specify the root folder within your source files. */ // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ @@ -37,12 +37,10 @@ // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ // "resolveJsonModule": true, /* Enable importing .json files. */ // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ - /* JavaScript Support */ // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ - /* Emit */ // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ // "declarationMap": true, /* Create sourcemaps for d.ts files. */ @@ -67,16 +65,14 @@ // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ - /* Interop Constraints */ // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ - "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ - "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ - + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ /* Type Checking */ - "strict": true, /* Enable all strict type-checking options. */ + "strict": true, /* Enable all strict type-checking options. */ // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ @@ -95,9 +91,8 @@ // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ - /* Completeness */ // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ - "skipLibCheck": true /* Skip type checking all .d.ts files. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ } -} +} \ No newline at end of file diff --git a/client/assets/Scripts/Global/EventManager.ts b/client/assets/Scripts/Global/EventManager.ts deleted file mode 100644 index 12ff955..0000000 --- a/client/assets/Scripts/Global/EventManager.ts +++ /dev/null @@ -1,42 +0,0 @@ -import Singleton from '../Base/Singleton'; -import { EventEnum } from '../Enum'; - -interface IItem { - func: Function; - ctx: unknown; -} - -export default class EventManager extends Singleton { - static get Instance() { - return super.GetInstance(); - } - - private eventMap: Map> = new Map(); - - on(event: EventEnum, func: Function, ctx?: unknown) { - if (this.eventMap.has(event)) { - this.eventMap.get(event).push({ func, ctx }); - } else { - this.eventMap.set(event, [{ func, ctx }]); - } - } - - off(event: EventEnum, func: Function, ctx?: unknown) { - if (this.eventMap.has(event)) { - const index = this.eventMap.get(event).findIndex(i => func === i.func && i.ctx === ctx); - index > -1 && this.eventMap.get(event).splice(index, 1); - } - } - - emit(event: EventEnum, ...params: unknown[]) { - if (this.eventMap.has(event)) { - this.eventMap.get(event).forEach(({ func, ctx }) => { - ctx ? func.apply(ctx, params) : func(...params); - }); - } - } - - clear() { - this.eventMap.clear(); - } -} diff --git a/client/assets/Scripts/Global/NetworkManager.ts b/client/assets/Scripts/Global/NetworkManager.ts deleted file mode 100644 index 5534c34..0000000 --- a/client/assets/Scripts/Global/NetworkManager.ts +++ /dev/null @@ -1,44 +0,0 @@ -import Singleton from '../Base/Singleton' - -export default class NetworkManager extends Singleton { - static get Instance() { - return super.GetInstance() - } - - ws: WebSocket - port = 8888 - - connect() { - return new Promise((resolve, reject) => { - this.ws = new WebSocket(`ws://localhost:${this.port}`) - this.ws.onopen = () => { - console.log("ws onopen") - resolve(null) - } - - this.ws.onerror = () => { - console.log("ws onerror") - reject() - } - - this.ws.onclose = () => { - console.log("ws onclose") - reject() - } - - this.ws.onmessage = (data) => { - console.log("onmessage", data); - - } - }) - - } - - sendMsg(data) { - this.ws.send(data) - } - - async callApi(path: string) { - return await fetch(`http://localhost:${this.port}${path}`).then((res) => res.json()) - } -} diff --git a/client/assets/Scripts/Global/ObjectPoolManager.ts b/client/assets/Scripts/Global/ObjectPoolManager.ts deleted file mode 100644 index fa3f6cc..0000000 --- a/client/assets/Scripts/Global/ObjectPoolManager.ts +++ /dev/null @@ -1,52 +0,0 @@ -import Singleton from '../Base/Singleton' -import { instantiate, Node, Prefab } from 'cc' -import { EntityTypeEnum } from '../Enum' -import DataManager from './DataManager' -import { ResourceManager } from './ResourceManager' - -export default class ObjectPoolManager extends Singleton { - static get Instance() { - return super.GetInstance() - } - - private objectPool: Node = null - private poolObjectMap: Map = new Map() - - private getObjectContainerName(objectName: EntityTypeEnum) { - return objectName + 'Pool' - } - - getPoolObject(objectName: EntityTypeEnum) { - if (this.objectPool === null) { - this.objectPool = new Node("ObjectPool") - this.objectPool.setParent(DataManager.Instance.gm.stage) - } - - if (!this.poolObjectMap.has(objectName)) { - this.poolObjectMap.set(objectName, []) - const container = new Node(this.getObjectContainerName(objectName)) - container.setParent(this.objectPool) - } - - let node: Node - const nodes = this.poolObjectMap.get(objectName) - const index = nodes.findIndex(node => node.active) - - if (index === -1) { - const prefab = DataManager.Instance.prefabMap.get(objectName) - node = instantiate(prefab) - node.name = objectName - node.setParent(this.objectPool.getChildByName(this.getObjectContainerName(objectName))) - } else { - node = nodes.splice(index, 1)[0] - } - node.active = true - return node - } - - returnPoolObject(object: Node) { - object.active = false - const objectName = object.name as EntityTypeEnum - this.poolObjectMap.get(objectName).push(object) - } -} diff --git a/client/package.json b/client/package.json deleted file mode 100644 index a80f666..0000000 --- a/client/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "Boom", - "uuid": "c6c0afbe-ddea-4eb8-a29a-28c194f6e602", - "version": "3.6.0", - "creator": { - "version": "3.6.0" - }, - "scripts": { - "lint": "eslint . --fix" - }, - "devDependencies": { - "@antfu/eslint-config": "^0.27.0", - "eslint": "^8.26.0" - } -} diff --git a/package.json b/package.json new file mode 100644 index 0000000..664d151 --- /dev/null +++ b/package.json @@ -0,0 +1,9 @@ +{ + "name": "game", + "repository": "https://gitee.com/sli97/cocos-nodejs-io-game.git", + "private": true, + "version": "1.0.0", + "workspaces": [ + "apps/*" + ] +} \ No newline at end of file diff --git a/server/src/index.ts b/server/src/index.ts deleted file mode 100644 index b9d2d09..0000000 --- a/server/src/index.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { WebSocketServer } from 'ws'; -import express from 'express' -import http from 'http' -import cors from 'cors' - -const app = express() -app.use(cors()) - -app.get("/join", (req, res) => { - - res.send([{ a: 1 }]) -}) - -const server = http.createServer(app) - -const wss = new WebSocketServer({ server }); - -wss.on('connection', function connection(socket) { - socket.on('message', function message(data) { - console.log('received: %s', data); - }); - - socket.on("close", () => { - console.log("socket close"); - }) - - socket.on("error", () => { - console.log("socket error"); - }) - - socket.send('something'); -}); - -wss.on("error", () => { - console.log("服务错误"); -}) - -wss.on("close", () => { - console.log("服务关闭"); -}) - -wss.on("listening", () => { - console.log("ws服务启动"); -}) - -server.listen(8888, () => { - console.log("http服务启动"); -}) \ No newline at end of file diff --git a/test.js b/test.js new file mode 100644 index 0000000..42a0feb --- /dev/null +++ b/test.js @@ -0,0 +1,2 @@ +const a = new Date() +console.log(a.toLocaleString().split("├")[0]); \ No newline at end of file diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..43e7895 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,990 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@eslint/eslintrc@^1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.3.tgz#2b044ab39fdfa75b4688184f9e573ce3c5b0ff95" + integrity sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.4.0" + globals "^13.15.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@humanwhocodes/config-array@^0.11.6": + version "0.11.7" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.7.tgz#38aec044c6c828f6ed51d5d7ae3d9b9faf6dbb0f" + integrity sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" + integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== + +"@types/fs-extra@^9.0.13": + version "9.0.13" + resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.13.tgz#7594fbae04fe7f1918ce8b3d213f74ff44ac1f45" + integrity sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA== + dependencies: + "@types/node" "*" + +"@types/node@*", "@types/node@^18.11.7": + version "18.11.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.9.tgz#02d013de7058cea16d36168ef2fc653464cfbad4" + integrity sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg== + +"@types/ws@^8.5.3": + version "8.5.3" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.3.tgz#7d25a1ffbecd3c4f2d35068d0b283c037003274d" + integrity sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w== + dependencies: + "@types/node" "*" + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-walk@^8.1.1: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +acorn@^8.4.1, acorn@^8.8.0: + version "8.8.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" + integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== + +ajv@^6.10.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chokidar@^3.5.2: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.1, debug@^4.3.2: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +eslint@^8.26.0: + version "8.28.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.28.0.tgz#81a680732634677cc890134bcdd9fdfea8e63d6e" + integrity sha512-S27Di+EVyMxcHiwDrFzk8dJYAaD+/5SoWKxL1ri/71CRHsnJnRDPNt2Kzj24+MT9FDupf4aqqyqPrvI8MvQ4VQ== + dependencies: + "@eslint/eslintrc" "^1.3.3" + "@humanwhocodes/config-array" "^0.11.6" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.4.0" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.15.0" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-sdsl "^4.1.4" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.1" + regexpp "^3.2.0" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + +espree@^9.4.0: + version "9.4.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd" + integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== + dependencies: + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" + +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastq@^1.6.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + dependencies: + reusify "^1.0.4" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.2.7" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== + +fs-extra@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@^7.1.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^13.15.0: + version "13.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.18.0.tgz#fb224daeeb2bb7d254cd2c640f003528b8d0c1dc" + integrity sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A== + dependencies: + type-fest "^0.20.2" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +ignore-by-default@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" + integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== + +ignore@^5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.1.tgz#c2b1f76cb999ede1502f3a226a9310fdfe88d46c" + integrity sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +js-sdsl@^4.1.4: + version "4.2.0" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.2.0.tgz#278e98b7bea589b8baaf048c20aeb19eb7ad09d0" + integrity sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +nodemon@^2.0.20: + version "2.0.20" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.20.tgz#e3537de768a492e8d74da5c5813cb0c7486fc701" + integrity sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw== + dependencies: + chokidar "^3.5.2" + debug "^3.2.7" + ignore-by-default "^1.0.1" + minimatch "^3.1.2" + pstree.remy "^1.1.8" + semver "^5.7.1" + simple-update-notifier "^1.0.7" + supports-color "^5.5.0" + touch "^3.1.0" + undefsafe "^2.0.5" + +nopt@~1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" + integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg== + dependencies: + abbrev "1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +pstree.remy@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" + integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +semver@^5.7.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@~7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +simple-update-notifier@^1.0.7: + version "1.1.0" + resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz#67694c121de354af592b347cdba798463ed49c82" + integrity sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg== + dependencies: + semver "~7.0.0" + +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +supports-color@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +touch@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" + integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== + dependencies: + nopt "~1.0.10" + +ts-node@^10.9.1: + version "10.9.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +typescript@^4.8.4: + version "4.9.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.3.tgz#3aea307c1746b8c384435d8ac36b8a2e580d85db" + integrity sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA== + +undefsafe@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" + integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +ws@^8.10.0: + version "8.11.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" + integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==