From e199970fb56b6dd170be30c8d7f6ed2e9431deb8 Mon Sep 17 00:00:00 2001 From: devil <410662979@qq.com> Date: Sun, 21 May 2023 15:53:32 +0800 Subject: [PATCH] the demo --- .DS_Store | Bin 0 -> 6148 bytes ...tom Script Template Help Documentation.url | 2 + .creator/default-meta.json | 5 + .gitignore | 24 + assets/.DS_Store | Bin 0 -> 6148 bytes assets/Scripts.meta | 12 + assets/Scripts/.DS_Store | Bin 0 -> 6148 bytes assets/Scripts/RVO.meta | 12 + assets/Scripts/RVO/Agent.ts | 557 ++++++ assets/Scripts/RVO/Agent.ts.meta | 12 + assets/Scripts/RVO/Common.ts | 117 ++ assets/Scripts/RVO/Common.ts.meta | 12 + assets/Scripts/RVO/Simulator.ts | 236 +++ assets/Scripts/RVO/Simulator.ts.meta | 12 + assets/Scripts/RVO/kdtree.ts | 391 +++++ assets/Scripts/RVO/kdtree.ts.meta | 12 + assets/Scripts/Test.meta | 12 + assets/Scripts/Test/MonsterFactory.ts | 211 +++ assets/Scripts/Test/MonsterFactory.ts.meta | 9 + assets/Scripts/Test/Test2.ts | 90 + assets/Scripts/Test/Test2.ts.meta | 9 + assets/Scripts/Test/monsterCtl.ts | 206 +++ assets/Scripts/Test/monsterCtl.ts.meta | 9 + assets/Scripts/Test/monsterEffectCtl.ts | 136 ++ assets/Scripts/Test/monsterEffectCtl.ts.meta | 1 + assets/Scripts/camera.meta | 12 + assets/Scripts/camera/camerafollow.ts | 32 + assets/Scripts/camera/camerafollow.ts.meta | 9 + assets/Scripts/common.meta | 12 + assets/Scripts/common/QuadTree.ts | 170 ++ assets/Scripts/common/QuadTree.ts.meta | 9 + assets/Scripts/conf.meta | 12 + assets/Scripts/core.meta | 12 + assets/Scripts/core/audio.meta | 12 + assets/Scripts/core/conf.meta | 12 + assets/Scripts/core/data.meta | 12 + assets/Scripts/core/event.meta | 12 + assets/Scripts/core/event/EventManager.ts | 139 ++ .../Scripts/core/event/EventManager.ts.meta | 11 + assets/Scripts/core/gui.meta | 12 + assets/Scripts/core/libs.meta | 12 + assets/Scripts/core/libs/encrypt.meta | 12 + assets/Scripts/core/resLoad.meta | 12 + assets/Scripts/core/utils.meta | 12 + assets/Scripts/core/utils/ArrayUtil.ts | 120 ++ assets/Scripts/core/utils/ArrayUtil.ts.meta | 11 + assets/Scripts/core/utils/MathUtil.ts | 116 ++ assets/Scripts/core/utils/MathUtil.ts.meta | 11 + assets/Scripts/core/utils/Util.ts | 231 +++ assets/Scripts/core/utils/Util.ts.meta | 11 + assets/Scripts/logics.meta | 12 + assets/Scripts/logics/mng.meta | 12 + assets/Scripts/logics/mng/SortMng.ts | 34 + assets/Scripts/logics/mng/SortMng.ts.meta | 11 + assets/Scripts/logics/mng/WaveMng.ts | 126 ++ assets/Scripts/logics/mng/WaveMng.ts.meta | 11 + assets/Scripts/logics/role.meta | 12 + assets/Scripts/logics/skill.meta | 12 + assets/Scripts/logics/skillEntity.meta | 12 + assets/Scripts/mng.meta | 12 + assets/Scripts/mng/wave.ts | 451 +++++ assets/Scripts/mng/wave.ts.meta | 9 + assets/Scripts/rolectl.meta | 12 + assets/Scripts/rolectl/player.ts | 239 +++ assets/Scripts/rolectl/player.ts.meta | 9 + assets/Scripts/rolectl/rolejoystick.ts | 136 ++ assets/Scripts/rolectl/rolejoystick.ts.meta | 9 + assets/Scripts/rolectl/snakebody.ts | 66 + assets/Scripts/rolectl/snakebody.ts.meta | 9 + assets/Scripts/ui.meta | 12 + assets/animation.meta | 12 + assets/animation/monster_0.anim | 88 + assets/animation/monster_0.anim.meta | 13 + assets/animation/monster_1.anim | 88 + assets/animation/monster_1.anim.meta | 13 + assets/animation/nvwushen.anim | 93 + assets/animation/nvwushen.anim.meta | 13 + assets/res.meta | 12 + assets/res/shader.meta | 12 + assets/resources.meta | 15 + assets/resources/Image.meta | 12 + assets/resources/Image/role.meta | 12 + assets/resources/Image/role/女武神.meta | 12 + .../Image/role/女武神/nws-move_0.png | Bin 0 -> 16860 bytes .../Image/role/女武神/nws-move_0.png.meta | 162 ++ .../Image/role/女武神/nws-move_12.png | Bin 0 -> 17116 bytes .../Image/role/女武神/nws-move_12.png.meta | 162 ++ .../Image/role/女武神/nws-move_16.png | Bin 0 -> 17004 bytes .../Image/role/女武神/nws-move_16.png.meta | 162 ++ .../Image/role/女武神/nws-move_20.png | Bin 0 -> 16797 bytes .../Image/role/女武神/nws-move_20.png.meta | 162 ++ .../Image/role/女武神/nws-move_4.png | Bin 0 -> 17038 bytes .../Image/role/女武神/nws-move_4.png.meta | 162 ++ .../Image/role/女武神/nws-move_8.png | Bin 0 -> 16840 bytes .../Image/role/女武神/nws-move_8.png.meta | 162 ++ assets/resources/Image/role/鹰怪物.meta | 12 + assets/resources/Image/role/鹰怪物/棕色.meta | 12 + .../role/鹰怪物/棕色/ygw-animation_0.png | Bin 0 -> 9526 bytes .../role/鹰怪物/棕色/ygw-animation_0.png.meta | 162 ++ .../role/鹰怪物/棕色/ygw-animation_12.png | Bin 0 -> 8595 bytes .../鹰怪物/棕色/ygw-animation_12.png.meta | 162 ++ .../role/鹰怪物/棕色/ygw-animation_3.png | Bin 0 -> 10266 bytes .../role/鹰怪物/棕色/ygw-animation_3.png.meta | 162 ++ .../role/鹰怪物/棕色/ygw-animation_6.png | Bin 0 -> 9087 bytes .../role/鹰怪物/棕色/ygw-animation_6.png.meta | 162 ++ .../role/鹰怪物/棕色/ygw-animation_9.png | Bin 0 -> 8911 bytes .../role/鹰怪物/棕色/ygw-animation_9.png.meta | 162 ++ assets/resources/Image/role/鹰怪物/蓝色.meta | 12 + .../role/鹰怪物/蓝色/ygw-animation_0.png | Bin 0 -> 9313 bytes .../role/鹰怪物/蓝色/ygw-animation_0.png.meta | 162 ++ .../role/鹰怪物/蓝色/ygw-animation_12.png | Bin 0 -> 8493 bytes .../鹰怪物/蓝色/ygw-animation_12.png.meta | 162 ++ .../role/鹰怪物/蓝色/ygw-animation_3.png | Bin 0 -> 10139 bytes .../role/鹰怪物/蓝色/ygw-animation_3.png.meta | 162 ++ .../role/鹰怪物/蓝色/ygw-animation_6.png | Bin 0 -> 8842 bytes .../role/鹰怪物/蓝色/ygw-animation_6.png.meta | 162 ++ .../role/鹰怪物/蓝色/ygw-animation_9.png | Bin 0 -> 8883 bytes .../role/鹰怪物/蓝色/ygw-animation_9.png.meta | 162 ++ assets/resources/config.meta | 12 + assets/resources/config/gameCfg.json | 131 ++ assets/resources/config/gameCfg.json.meta | 11 + assets/resources/config/productCfg.json | 98 ++ assets/resources/config/productCfg.json.meta | 11 + assets/resources/config/uiCfg.json | 1 + assets/resources/config/uiCfg.json.meta | 11 + assets/resources/fgui.meta | 12 + assets/resources/img_rankBg_2.png | Bin 0 -> 137 bytes assets/resources/img_rankBg_2.png.meta | 134 ++ assets/resources/mt.meta | 12 + assets/resources/mt/monsterEff.effect | 197 +++ assets/resources/mt/monsterEff.effect.meta | 11 + assets/resources/mt/monsterEff.mtl | 36 + assets/resources/mt/monsterEff.mtl.meta | 11 + assets/resources/mt/noice.png | Bin 0 -> 9258 bytes assets/resources/mt/noice.png.meta | 42 + assets/resources/prefab.meta | 12 + assets/resources/prefab/monster.meta | 12 + assets/resources/prefab/monster/A.prefab | 216 +++ assets/resources/prefab/monster/A.prefab.meta | 13 + assets/resources/prefab/monster/B.prefab | 216 +++ assets/resources/prefab/monster/B.prefab.meta | 13 + assets/resources/prefab/monster/C.prefab | 216 +++ assets/resources/prefab/monster/C.prefab.meta | 13 + assets/resources/prefab/snakeBody.prefab | 162 ++ assets/resources/prefab/snakeBody.prefab.meta | 13 + assets/resources/tmpMonster.meta | 12 + assets/resources/tmpMonster/jy_01.png | Bin 0 -> 907 bytes assets/resources/tmpMonster/jy_01.png.meta | 134 ++ assets/resources/tmpMonster/jy_02.png | Bin 0 -> 917 bytes assets/resources/tmpMonster/jy_02.png.meta | 134 ++ assets/resources/tmpMonster/jy_03.png | Bin 0 -> 954 bytes assets/resources/tmpMonster/jy_03.png.meta | 134 ++ assets/resources/tmpMonster/jy_04.png | Bin 0 -> 1166 bytes assets/resources/tmpMonster/jy_04.png.meta | 134 ++ assets/resources/摇杆-内圆.png | Bin 0 -> 252 bytes assets/resources/摇杆-内圆.png.meta | 134 ++ assets/resources/摇杆-外圆.png | Bin 0 -> 1070 bytes assets/resources/摇杆-外圆.png.meta | 134 ++ assets/template.meta | 12 + assets/test.scene | 1550 +++++++++++++++++ assets/test.scene.meta | 11 + package.json | 8 + settings/v2/packages/builder.json | 3 + settings/v2/packages/cocos-service.json | 43 + settings/v2/packages/device.json | 3 + settings/v2/packages/engine.json | 144 ++ settings/v2/packages/program.json | 3 + settings/v2/packages/project.json | 22 + tsconfig.json | 9 + 169 files changed, 11582 insertions(+) create mode 100644 .DS_Store create mode 100644 .creator/asset-template/typescript/Custom Script Template Help Documentation.url create mode 100644 .creator/default-meta.json create mode 100644 .gitignore create mode 100644 assets/.DS_Store create mode 100644 assets/Scripts.meta create mode 100644 assets/Scripts/.DS_Store create mode 100644 assets/Scripts/RVO.meta create mode 100644 assets/Scripts/RVO/Agent.ts create mode 100644 assets/Scripts/RVO/Agent.ts.meta create mode 100644 assets/Scripts/RVO/Common.ts create mode 100644 assets/Scripts/RVO/Common.ts.meta create mode 100644 assets/Scripts/RVO/Simulator.ts create mode 100644 assets/Scripts/RVO/Simulator.ts.meta create mode 100644 assets/Scripts/RVO/kdtree.ts create mode 100644 assets/Scripts/RVO/kdtree.ts.meta create mode 100644 assets/Scripts/Test.meta create mode 100644 assets/Scripts/Test/MonsterFactory.ts create mode 100644 assets/Scripts/Test/MonsterFactory.ts.meta create mode 100644 assets/Scripts/Test/Test2.ts create mode 100644 assets/Scripts/Test/Test2.ts.meta create mode 100644 assets/Scripts/Test/monsterCtl.ts create mode 100644 assets/Scripts/Test/monsterCtl.ts.meta create mode 100644 assets/Scripts/Test/monsterEffectCtl.ts create mode 100644 assets/Scripts/Test/monsterEffectCtl.ts.meta create mode 100644 assets/Scripts/camera.meta create mode 100644 assets/Scripts/camera/camerafollow.ts create mode 100644 assets/Scripts/camera/camerafollow.ts.meta create mode 100644 assets/Scripts/common.meta create mode 100644 assets/Scripts/common/QuadTree.ts create mode 100644 assets/Scripts/common/QuadTree.ts.meta create mode 100644 assets/Scripts/conf.meta create mode 100644 assets/Scripts/core.meta create mode 100644 assets/Scripts/core/audio.meta create mode 100644 assets/Scripts/core/conf.meta create mode 100644 assets/Scripts/core/data.meta create mode 100644 assets/Scripts/core/event.meta create mode 100644 assets/Scripts/core/event/EventManager.ts create mode 100644 assets/Scripts/core/event/EventManager.ts.meta create mode 100644 assets/Scripts/core/gui.meta create mode 100644 assets/Scripts/core/libs.meta create mode 100644 assets/Scripts/core/libs/encrypt.meta create mode 100644 assets/Scripts/core/resLoad.meta create mode 100644 assets/Scripts/core/utils.meta create mode 100644 assets/Scripts/core/utils/ArrayUtil.ts create mode 100644 assets/Scripts/core/utils/ArrayUtil.ts.meta create mode 100644 assets/Scripts/core/utils/MathUtil.ts create mode 100644 assets/Scripts/core/utils/MathUtil.ts.meta create mode 100644 assets/Scripts/core/utils/Util.ts create mode 100644 assets/Scripts/core/utils/Util.ts.meta create mode 100644 assets/Scripts/logics.meta create mode 100644 assets/Scripts/logics/mng.meta create mode 100644 assets/Scripts/logics/mng/SortMng.ts create mode 100644 assets/Scripts/logics/mng/SortMng.ts.meta create mode 100644 assets/Scripts/logics/mng/WaveMng.ts create mode 100644 assets/Scripts/logics/mng/WaveMng.ts.meta create mode 100644 assets/Scripts/logics/role.meta create mode 100644 assets/Scripts/logics/skill.meta create mode 100644 assets/Scripts/logics/skillEntity.meta create mode 100644 assets/Scripts/mng.meta create mode 100644 assets/Scripts/mng/wave.ts create mode 100644 assets/Scripts/mng/wave.ts.meta create mode 100644 assets/Scripts/rolectl.meta create mode 100644 assets/Scripts/rolectl/player.ts create mode 100644 assets/Scripts/rolectl/player.ts.meta create mode 100644 assets/Scripts/rolectl/rolejoystick.ts create mode 100644 assets/Scripts/rolectl/rolejoystick.ts.meta create mode 100644 assets/Scripts/rolectl/snakebody.ts create mode 100644 assets/Scripts/rolectl/snakebody.ts.meta create mode 100644 assets/Scripts/ui.meta create mode 100644 assets/animation.meta create mode 100644 assets/animation/monster_0.anim create mode 100644 assets/animation/monster_0.anim.meta create mode 100644 assets/animation/monster_1.anim create mode 100644 assets/animation/monster_1.anim.meta create mode 100644 assets/animation/nvwushen.anim create mode 100644 assets/animation/nvwushen.anim.meta create mode 100644 assets/res.meta create mode 100644 assets/res/shader.meta create mode 100644 assets/resources.meta create mode 100644 assets/resources/Image.meta create mode 100644 assets/resources/Image/role.meta create mode 100644 assets/resources/Image/role/女武神.meta create mode 100644 assets/resources/Image/role/女武神/nws-move_0.png create mode 100644 assets/resources/Image/role/女武神/nws-move_0.png.meta create mode 100644 assets/resources/Image/role/女武神/nws-move_12.png create mode 100644 assets/resources/Image/role/女武神/nws-move_12.png.meta create mode 100644 assets/resources/Image/role/女武神/nws-move_16.png create mode 100644 assets/resources/Image/role/女武神/nws-move_16.png.meta create mode 100644 assets/resources/Image/role/女武神/nws-move_20.png create mode 100644 assets/resources/Image/role/女武神/nws-move_20.png.meta create mode 100644 assets/resources/Image/role/女武神/nws-move_4.png create mode 100644 assets/resources/Image/role/女武神/nws-move_4.png.meta create mode 100644 assets/resources/Image/role/女武神/nws-move_8.png create mode 100644 assets/resources/Image/role/女武神/nws-move_8.png.meta create mode 100644 assets/resources/Image/role/鹰怪物.meta create mode 100644 assets/resources/Image/role/鹰怪物/棕色.meta create mode 100644 assets/resources/Image/role/鹰怪物/棕色/ygw-animation_0.png create mode 100644 assets/resources/Image/role/鹰怪物/棕色/ygw-animation_0.png.meta create mode 100644 assets/resources/Image/role/鹰怪物/棕色/ygw-animation_12.png create mode 100644 assets/resources/Image/role/鹰怪物/棕色/ygw-animation_12.png.meta create mode 100644 assets/resources/Image/role/鹰怪物/棕色/ygw-animation_3.png create mode 100644 assets/resources/Image/role/鹰怪物/棕色/ygw-animation_3.png.meta create mode 100644 assets/resources/Image/role/鹰怪物/棕色/ygw-animation_6.png create mode 100644 assets/resources/Image/role/鹰怪物/棕色/ygw-animation_6.png.meta create mode 100644 assets/resources/Image/role/鹰怪物/棕色/ygw-animation_9.png create mode 100644 assets/resources/Image/role/鹰怪物/棕色/ygw-animation_9.png.meta create mode 100644 assets/resources/Image/role/鹰怪物/蓝色.meta create mode 100644 assets/resources/Image/role/鹰怪物/蓝色/ygw-animation_0.png create mode 100644 assets/resources/Image/role/鹰怪物/蓝色/ygw-animation_0.png.meta create mode 100644 assets/resources/Image/role/鹰怪物/蓝色/ygw-animation_12.png create mode 100644 assets/resources/Image/role/鹰怪物/蓝色/ygw-animation_12.png.meta create mode 100644 assets/resources/Image/role/鹰怪物/蓝色/ygw-animation_3.png create mode 100644 assets/resources/Image/role/鹰怪物/蓝色/ygw-animation_3.png.meta create mode 100644 assets/resources/Image/role/鹰怪物/蓝色/ygw-animation_6.png create mode 100644 assets/resources/Image/role/鹰怪物/蓝色/ygw-animation_6.png.meta create mode 100644 assets/resources/Image/role/鹰怪物/蓝色/ygw-animation_9.png create mode 100644 assets/resources/Image/role/鹰怪物/蓝色/ygw-animation_9.png.meta create mode 100644 assets/resources/config.meta create mode 100644 assets/resources/config/gameCfg.json create mode 100644 assets/resources/config/gameCfg.json.meta create mode 100644 assets/resources/config/productCfg.json create mode 100644 assets/resources/config/productCfg.json.meta create mode 100644 assets/resources/config/uiCfg.json create mode 100644 assets/resources/config/uiCfg.json.meta create mode 100644 assets/resources/fgui.meta create mode 100644 assets/resources/img_rankBg_2.png create mode 100644 assets/resources/img_rankBg_2.png.meta create mode 100644 assets/resources/mt.meta create mode 100644 assets/resources/mt/monsterEff.effect create mode 100644 assets/resources/mt/monsterEff.effect.meta create mode 100644 assets/resources/mt/monsterEff.mtl create mode 100644 assets/resources/mt/monsterEff.mtl.meta create mode 100644 assets/resources/mt/noice.png create mode 100644 assets/resources/mt/noice.png.meta create mode 100644 assets/resources/prefab.meta create mode 100644 assets/resources/prefab/monster.meta create mode 100644 assets/resources/prefab/monster/A.prefab create mode 100644 assets/resources/prefab/monster/A.prefab.meta create mode 100644 assets/resources/prefab/monster/B.prefab create mode 100644 assets/resources/prefab/monster/B.prefab.meta create mode 100644 assets/resources/prefab/monster/C.prefab create mode 100644 assets/resources/prefab/monster/C.prefab.meta create mode 100644 assets/resources/prefab/snakeBody.prefab create mode 100644 assets/resources/prefab/snakeBody.prefab.meta create mode 100644 assets/resources/tmpMonster.meta create mode 100644 assets/resources/tmpMonster/jy_01.png create mode 100644 assets/resources/tmpMonster/jy_01.png.meta create mode 100644 assets/resources/tmpMonster/jy_02.png create mode 100644 assets/resources/tmpMonster/jy_02.png.meta create mode 100644 assets/resources/tmpMonster/jy_03.png create mode 100644 assets/resources/tmpMonster/jy_03.png.meta create mode 100644 assets/resources/tmpMonster/jy_04.png create mode 100644 assets/resources/tmpMonster/jy_04.png.meta create mode 100644 assets/resources/摇杆-内圆.png create mode 100644 assets/resources/摇杆-内圆.png.meta create mode 100644 assets/resources/摇杆-外圆.png create mode 100644 assets/resources/摇杆-外圆.png.meta create mode 100644 assets/template.meta create mode 100644 assets/test.scene create mode 100644 assets/test.scene.meta create mode 100644 package.json create mode 100644 settings/v2/packages/builder.json create mode 100644 settings/v2/packages/cocos-service.json create mode 100644 settings/v2/packages/device.json create mode 100644 settings/v2/packages/engine.json create mode 100644 settings/v2/packages/program.json create mode 100644 settings/v2/packages/project.json create mode 100644 tsconfig.json diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..84f56612f1a27cb61eff36a7ae198c6a185c30e1 GIT binary patch literal 6148 zcmeHKISv9b4733uBpOP}e1RWC2wuPkKmySqkhtotco$D&d^E7oL4(FCXA;Mg)lLzw zMMS5U^+aSOA_KUg+-zu@?VGo(lMw~NamHCr*Tr$aJM6cu?DqlV_GKj}JewE3?a`buj$yu{@0mP=P;C!0v|vH>`J2f3w#N;oIBhMbEjbNat!oxjD?lsu_r}du{ri@ VViV|e#GMZ0&w%MdqXNHH-~qms6~O=i literal 0 HcmV?d00001 diff --git a/.creator/asset-template/typescript/Custom Script Template Help Documentation.url b/.creator/asset-template/typescript/Custom Script Template Help Documentation.url new file mode 100644 index 0000000..7606df0 --- /dev/null +++ b/.creator/asset-template/typescript/Custom Script Template Help Documentation.url @@ -0,0 +1,2 @@ +[InternetShortcut] +URL=https://docs.cocos.com/creator/manual/en/scripting/setup.html#custom-script-template \ No newline at end of file diff --git a/.creator/default-meta.json b/.creator/default-meta.json new file mode 100644 index 0000000..abb1239 --- /dev/null +++ b/.creator/default-meta.json @@ -0,0 +1,5 @@ +{ + "image": { + "type": "sprite-frame" + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a231b3f --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ + +#/////////////////////////// +# Cocos Creator 3D Project +#/////////////////////////// +library/ +temp/ +local/ +build/ +profiles/ +native +#////////////////////////// +# NPM +#////////////////////////// +node_modules/ + +#////////////////////////// +# VSCode +#////////////////////////// +.vscode/ + +#////////////////////////// +# WebStorm +#////////////////////////// +.idea/ \ No newline at end of file diff --git a/assets/.DS_Store b/assets/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..c1b3ceebb5d61981319f8dc1554e34eea2a3989a GIT binary patch literal 6148 zcmeHKPm9w)6o1pLcETbQQP|_4*Mh0LDB>m7dhlvQ4=T0Ul-*#O2}!y=ltRw>g*=M* z8T<@h{0{!!%(!f~D|lE$mU-~zH+g^N&+oxZhKR&ykq(LaL?oe%odC@R!hY5*={QRd zD9jiOs_2krRG-9K(cbVsGQhP9P&L$yG@YqmRph!jf)|yg9>u6@MH!XUP@OF6GRbuU z&*!Afv$_ex@1nEQy>`7PdvaI4i;wj(Zl=wm9!;w^{Pj}nJo(+9Ca<#Da?-!`R2R)O zD`u5R$kG`?-oDO?R4+$*QKYrWjjcllGMM!DR;z<>I8gf!!}UO|9^DTI>R|uDdL78y zckexZG5L_s3;hvmg9u(d%MA;s?I-lk?J7SS#)o=dnivs$-Hw>+@!0KK4(|MXe)Gq- zCl^Jfe-Tw4pPlUsPkL@WC-FuNIKqo(z%$?(xEu!D*(i4}XE;BKXTURXg&5%TK|vWK zhpk0(bf7U$0ALqpBk1#6f^(F^$YE;{9*D51K$|Mu6GPZ^*p-Wm9JUs1Iteo~#&I(X z_d*e7cG#5(ClOint!Kb9u*txV{p|Do|Lo82|IH--HOj ut%AOXvT$5$@iYY;a}^_&ui`zZ5!e-XfRV%2A}kR9BVcIojc4GWGVluk19OA` literal 0 HcmV?d00001 diff --git a/assets/Scripts.meta b/assets/Scripts.meta new file mode 100644 index 0000000..105a468 --- /dev/null +++ b/assets/Scripts.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "823bea19-caeb-456d-aff2-883004ae2bf0", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/assets/Scripts/.DS_Store b/assets/Scripts/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..f96f5a2665bfdbe377c5fcd47615f559c6fd57a4 GIT binary patch literal 6148 zcmeHKJ5Iwu5S<||EYYM)xd))h4NPQeB!Z};5CllE90}-s2gFG@0(9JgmX3lZ6%z05 zEQu{F$_SwuY4`2U*M5?BJtCr$yTw>!C?YuqQMu?5s(Vd)$(crFj`8%ou2wxM{;rD8 zK9CbRljG%O`}v<9ww9_c%lWdNLzAx`N1rcm&xdX6;uq`cs+Cm(!X%SZxsV&V?N&Uv zZrj>5Ki2Q}uU2ytTh-gDefCaWnX#^mGvEw31I~amKn8GUQ}TU7pPd0`z!}&u!1Ezs z5Q~J3VLUo8#TEdVK^+Ba_7aQ<35$e{AuJHJP@sisYBAKpp%2NgNZ1%!xM*rVG*$j? zUNlxm{t(?o3qzls0cW7gz`(Xc-v3AVWO|$YZiw%k0cYT!F`!vFEhl)XbhrL^J>Ine tV}?PYU&93i>&{OAHatg0(P;L-HT;T%jUls8AH#wEBM=Gk$r;!I17D{rNm~E_ literal 0 HcmV?d00001 diff --git a/assets/Scripts/RVO.meta b/assets/Scripts/RVO.meta new file mode 100644 index 0000000..d709b4f --- /dev/null +++ b/assets/Scripts/RVO.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "7a699aa3-3f5a-41b9-87db-13203bc13a10", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/assets/Scripts/RVO/Agent.ts b/assets/Scripts/RVO/Agent.ts new file mode 100644 index 0000000..c94a9f3 --- /dev/null +++ b/assets/Scripts/RVO/Agent.ts @@ -0,0 +1,557 @@ +import { KeyValuePair, Line, Obstacle, RVOMath, Vector2 } from "./Common"; +import { Simulator } from "./Simulator"; + + +export class Agent { + agentNeighbors_: KeyValuePair[] = []; + obstaclNeighbors_: KeyValuePair[] = []; + orcaLines_: Line[] = []; + position_: Vector2 = new Vector2(0, 0); + prefVelocity_: Vector2 = new Vector2(0, 0); + velocity_: Vector2 = new Vector2(0, 0); + id: number = 0; + maxNeighbors_: number = 0; + maxSpeed_: number = 0.0; + private _neighborDist: number = 0.0; + public get neighborDist(): number { + return this._neighborDist; + } + public set neighborDist(value: number) { + this._neighborDist = value; + } + radius_: number = 0.0; + timeHorizon: number = 0.0; + timeHorizonObst: number = 0.0; + newVelocity_: Vector2 = new Vector2(0, 0); + mass: number = 1; + + + computeNeighbors(sim: Simulator) { + this.obstaclNeighbors_.length = 0; + let rangeSq = (this.timeHorizonObst * this.maxSpeed_ + this.radius_) ** 2; + sim.kdTree.computeObstacleNeighbors(this, rangeSq); + + this.agentNeighbors_.length = 0; + + if (this.maxNeighbors_ > 0) { + rangeSq = this.neighborDist ** 2; + rangeSq = sim.kdTree.computeAgentNeighbors(this, rangeSq); + } + } + + /* Search for the best new velocity. */ + computeNewVelocity(dt: number) { + this.orcaLines_.length = 0; + let orcaLines = this.orcaLines_; + + let invTimeHorizonObst = 1.0 / this.timeHorizonObst; + + /* Create obstacle ORCA lines. */ + for (let i = 0; i < this.obstaclNeighbors_.length; ++i) { + let obstacle1 = this.obstaclNeighbors_[i].value; + let obstacle2 = obstacle1.next; + + let relativePosition1 = obstacle1.point.minus(this.position_); + let relativePosition2 = obstacle2.point.minus(this.position_); + + /* + * Check if velocity obstacle of obstacle is already taken care of by + * previously constructed obstacle ORCA lines. + */ + let alreadyCovered = false; + + for (let j = 0; j < orcaLines.length; ++j) { + if (RVOMath.det(relativePosition1.scale(invTimeHorizonObst).minus(orcaLines[j].point), orcaLines[j].direction) - invTimeHorizonObst * this.radius_ >= -RVOMath.RVO_EPSILON + && RVOMath.det(relativePosition2.scale(invTimeHorizonObst).minus(orcaLines[j].point), orcaLines[j].direction) - invTimeHorizonObst * this.radius_ >= -RVOMath.RVO_EPSILON) { + + alreadyCovered = true; + break; + } + } + + if (alreadyCovered) { + continue; + } + + /* Not yet covered. Check for collisions. */ + + let distSq1 = RVOMath.absSq(relativePosition1); + let distSq2 = RVOMath.absSq(relativePosition2); + + let radiusSq = RVOMath.sqr(this.radius_); + + let obstacleVector = obstacle2.point.minus(obstacle1.point); + let s = relativePosition1.scale(-1).multiply(obstacleVector) / RVOMath.absSq(obstacleVector); + let distSqLine = RVOMath.absSq(relativePosition1.scale(-1).minus(obstacleVector.scale(s))); + + let line = new Line(); + if (s < 0 && distSq1 <= radiusSq) { + /* Collision with left vertex. Ignore if non-convex. */ + if (obstacle1.convex) { + line.point = new Vector2(0, 0); + line.direction = RVOMath.normalize(new Vector2(-relativePosition1.y, relativePosition1.x)); + orcaLines.push(line); + } + continue; + } + else if (s > 1 && distSq2 <= radiusSq) { + /* Collision with right vertex. Ignore if non-convex + * or if it will be taken care of by neighoring obstace */ + if (obstacle2.convex && RVOMath.det(relativePosition2, obstacle2.direction) >= 0) { + line.point = new Vector2(0, 0); + line.direction = RVOMath.normalize(new Vector2(-relativePosition2.y, relativePosition2.x)); + orcaLines.push(line); + } + continue; + } + else if (s >= 0 && s <= 1 && distSqLine <= radiusSq) { + /* Collision with obstacle segment. */ + line.point = new Vector2(0, 0); + line.direction = obstacle1.direction.scale(-1); + orcaLines.push(line); + continue; + } + + /* + * No collision. + * Compute legs. When obliquely viewed, both legs can come from a single + * vertex. Legs extend cut-off line when nonconvex vertex. + */ + let leftLegDirection: Vector2, rightLegDirection: Vector2; + + if (s < 0 && distSqLine <= radiusSq) { + /* + * Obstacle viewed obliquely so that left vertex + * defines velocity obstacle. + */ + if (!obstacle1.convex) { + /* Ignore obstacle. */ + continue; + } + + obstacle2 = obstacle1; + + let leg1 = Math.sqrt(distSq1 - radiusSq); + leftLegDirection = (new Vector2(relativePosition1.x * leg1 - relativePosition1.y * this.radius_, relativePosition1.x * this.radius_ + relativePosition1.y * leg1)).scale(1 / distSq1); + rightLegDirection = (new Vector2(relativePosition1.x * leg1 + relativePosition1.y * this.radius_, -relativePosition1.x * this.radius_ + relativePosition1.y * leg1)).scale(1 / distSq1); + } + else if (s > 1 && distSqLine <= radiusSq) { + /* + * Obstacle viewed obliquely so that + * right vertex defines velocity obstacle. + */ + if (!obstacle2.convex) { + /* Ignore obstacle. */ + continue; + } + + obstacle1 = obstacle2; + + let leg2 = Math.sqrt(distSq2 - radiusSq); + leftLegDirection = (new Vector2(relativePosition2.x * leg2 - relativePosition2.y * this.radius_, relativePosition2.x * this.radius_ + relativePosition2.y * leg2)).scale(1 / distSq2); + rightLegDirection = (new Vector2(relativePosition2.x * leg2 + relativePosition2.y * this.radius_, -relativePosition2.x * this.radius_ + relativePosition2.y * leg2)).scale(1 / distSq2); + } + else { + /* Usual situation. */ + if (obstacle1.convex) { + let leg1 = Math.sqrt(distSq1 - radiusSq); + leftLegDirection = (new Vector2(relativePosition1.x * leg1 - relativePosition1.y * this.radius_, relativePosition1.x * this.radius_ + relativePosition1.y * leg1)).scale(1 / distSq1); + } + else { + /* Left vertex non-convex; left leg extends cut-off line. */ + leftLegDirection = obstacle1.direction.scale(-1); + } + + if (obstacle2.convex) { + let leg2 = Math.sqrt(distSq2 - radiusSq); + rightLegDirection = (new Vector2(relativePosition2.x * leg2 + relativePosition2.y * this.radius_, -relativePosition2.x * this.radius_ + relativePosition2.y * leg2)).scale(1 / distSq2); + } + else { + /* Right vertex non-convex; right leg extends cut-off line. */ + rightLegDirection = obstacle1.direction; + } + } + + /* + * Legs can never point into neighboring edge when convex vertex, + * take cutoff-line of neighboring edge instead. If velocity projected on + * "foreign" leg, no constraint is added. + */ + + let leftNeighbor = obstacle1.previous; + + let isLeftLegForeign = false; + let isRightLegForeign = false; + + if (obstacle1.convex && RVOMath.det(leftLegDirection, leftNeighbor.direction.scale(-1)) >= 0.0) { + /* Left leg points into obstacle. */ + leftLegDirection = leftNeighbor.direction.scale(-1); + isLeftLegForeign = true; + } + + if (obstacle2.convex && RVOMath.det(rightLegDirection, obstacle2.direction) <= 0.0) { + /* Right leg points into obstacle. */ + rightLegDirection = obstacle2.direction; + isRightLegForeign = true; + } + + /* Compute cut-off centers. */ + let leftCutoff = obstacle1.point.minus(this.position_).scale(invTimeHorizonObst); + let rightCutoff = obstacle2.point.minus(this.position_).scale(invTimeHorizonObst); + let cutoffVec = rightCutoff.minus(leftCutoff); + + /* Project current velocity on velocity obstacle. */ + + /* Check if current velocity is projected on cutoff circles. */ + let t = (obstacle1 == obstacle2) ? 0.5 : this.velocity_.minus(leftCutoff).multiply(cutoffVec) / RVOMath.absSq(cutoffVec); + let tLeft = this.velocity_.minus(leftCutoff).multiply(leftLegDirection); + let tRight = this.velocity_.minus(rightCutoff).multiply(rightLegDirection); + + if ((t < 0.0 && tLeft < 0.0) || (obstacle1 == obstacle2 && tLeft < 0.0 && tRight < 0.0)) { + /* Project on left cut-off circle. */ + let unitW = RVOMath.normalize(this.velocity_.minus(leftCutoff)); + + line.direction = new Vector2(unitW.y, -unitW.x); + line.point = leftCutoff.plus(unitW.scale(this.radius_ * invTimeHorizonObst)); + orcaLines.push(line); + continue; + } + else if (t > 1.0 && tRight < 0.0) { + /* Project on right cut-off circle. */ + let unitW = RVOMath.normalize(this.velocity_.minus(rightCutoff)); + + line.direction = new Vector2(unitW.y, -unitW.x); + line.point = rightCutoff.plus(unitW.scale(this.radius_ * invTimeHorizonObst)); + orcaLines.push(line); + continue; + } + + /* + * Project on left leg, right leg, or cut-off line, whichever is closest + * to velocity. + */ + let distSqCutoff = ((t < 0.0 || t > 1.0 || obstacle1 == obstacle2) ? Infinity : RVOMath.absSq(this.velocity_.minus(cutoffVec.scale(t).plus(leftCutoff)))); + let distSqLeft = ((tLeft < 0.0) ? Infinity : RVOMath.absSq(this.velocity_.minus(leftLegDirection.scale(tLeft).plus(leftCutoff)))); + let distSqRight = ((tRight < 0.0) ? Infinity : RVOMath.absSq(this.velocity_.minus(rightLegDirection.scale(tRight).plus(rightCutoff)))); + + if (distSqCutoff <= distSqLeft && distSqCutoff <= distSqRight) { + /* Project on cut-off line. */ + line.direction = obstacle1.direction.scale(-1); + let aux = new Vector2(-line.direction.y, line.direction.x); + line.point = aux.scale(this.radius_ * invTimeHorizonObst).plus(leftCutoff); + orcaLines.push(line); + continue; + } + else if (distSqLeft <= distSqRight) { + /* Project on left leg. */ + if (isLeftLegForeign) { + continue; + } + + line.direction = leftLegDirection; + let aux = new Vector2(-line.direction.y, line.direction.x); + line.point = aux.scale(this.radius_ * invTimeHorizonObst).plus(leftCutoff); + orcaLines.push(line); + continue; + } + else { + /* Project on right leg. */ + if (isRightLegForeign) { + continue; + } + + line.direction = rightLegDirection.scale(-1); + let aux = new Vector2(-line.direction.y, line.direction.x); + line.point = aux.scale(this.radius_ * invTimeHorizonObst).plus(rightCutoff); + orcaLines.push(line); + continue; + } + } + + let numObstLines = orcaLines.length; + + let invTimeHorizon = 1.0 / this.timeHorizon; + + /* Create agent ORCA lines. */ + for (let i = 0; i < this.agentNeighbors_.length; ++i) { + let other = this.agentNeighbors_[i].value; + + let relativePosition = other.position_.minus(this.position_); + + // mass + let massRatio = (other.mass / (this.mass + other.mass)); + let neighborMassRatio = (this.mass / (this.mass + other.mass)); + + let velocityOpt = (massRatio >= 0.5 ? (this.velocity_.minus(this.velocity_.scale(massRatio)).scale(2)) : this.prefVelocity_.plus(this.velocity_.minus(this.prefVelocity_).scale(massRatio * 2))); + let neighborVelocityOpt = (neighborMassRatio >= 0.5 ? other.velocity_.scale(2).scale(1 - neighborMassRatio) : (other.prefVelocity_.plus(other.velocity_.minus(other.prefVelocity_).scale(2 * neighborMassRatio)))); + + let relativeVelocity = velocityOpt.minus(neighborVelocityOpt);//this.velocity.minus(other.velocity); + let distSq = RVOMath.absSq(relativePosition); + let combinedRadius = this.radius_ + other.radius_; + let combinedRadiusSq = RVOMath.sqr(combinedRadius); + + let line = new Line(); + let u: Vector2; + + if (distSq > combinedRadiusSq) { + /* No collision. */ + let w = relativeVelocity.minus(relativePosition.scale(invTimeHorizon)); // Vector + /* Vector from cutoff center to relative velocity. */ + let wLengthSq = RVOMath.absSq(w); + + let dotProduct1 = w.multiply(relativePosition); + + if (dotProduct1 < 0.0 && RVOMath.sqr(dotProduct1) > combinedRadiusSq * wLengthSq) { + /* Project on cut-off circle. */ + let wLength = Math.sqrt(wLengthSq); + let unitW = w.scale(1 / wLength); + + line.direction = new Vector2(unitW.y, -unitW.x); + u = unitW.scale(combinedRadius * invTimeHorizon - wLength); + } + else { + /* Project on legs. */ + let leg = Math.sqrt(distSq - combinedRadiusSq); + + if (RVOMath.det(relativePosition, w) > 0.0) { + /* Project on left leg. */ + let aux = new Vector2(relativePosition.x * leg - relativePosition.y * combinedRadius, relativePosition.x * combinedRadius + relativePosition.y * leg); + line.direction = aux.scale(1 / distSq); + } + else { + /* Project on right leg. */ + let aux = new Vector2(relativePosition.x * leg + relativePosition.y * combinedRadius, -relativePosition.x * combinedRadius + relativePosition.y * leg); + line.direction = aux.scale(-1 / distSq); + } + + let dotProduct2 = relativeVelocity.multiply(line.direction); + u = line.direction.scale(dotProduct2).minus(relativeVelocity); + } + } + else { + /* Collision. Project on cut-off circle of time timeStep. */ + let invTimeStep = 1.0 / dt; + + /* Vector from cutoff center to relative velocity. */ + let w = relativeVelocity.minus(relativePosition.scale(invTimeStep)); + + let wLength = RVOMath.abs(w); + let unitW = w.scale(1 / wLength); + + line.direction = new Vector2(unitW.y, -unitW.x); + u = unitW.scale(combinedRadius * invTimeStep - wLength); + } + + + // line.point = u.scale(0.5).plus(this.velocity); + line.point = velocityOpt.plus(u.scale(massRatio)); + orcaLines.push(line); + } + + let lineFail = this.linearProgram2(orcaLines, this.maxSpeed_, this.prefVelocity_, false, this.newVelocity_); + + if (lineFail < orcaLines.length) { + this.linearProgram3(orcaLines, numObstLines, lineFail, this.maxSpeed_, this.newVelocity_); + } + } + + insertAgentNeighbor(agent: Agent, rangeSq: number) { + if (this != agent) { + let distSq = RVOMath.absSq(this.position_.minus(agent.position_)); + + if (distSq < rangeSq) { + if (this.agentNeighbors_.length < this.maxNeighbors_) { + this.agentNeighbors_.push(new KeyValuePair(distSq, agent)); + } + let i = this.agentNeighbors_.length - 1; + while (i != 0 && distSq < this.agentNeighbors_[i - 1].key) { + this.agentNeighbors_[i] = this.agentNeighbors_[i - 1]; + --i; + } + this.agentNeighbors_[i] = new KeyValuePair(distSq, agent); + + if (this.agentNeighbors_.length == this.maxNeighbors_) { + rangeSq = this.agentNeighbors_[this.agentNeighbors_.length - 1].key; + } + } + } + return rangeSq; + } + + insertObstacleNeighbor(obstacle: Obstacle, rangeSq: number) { + let nextObstacle = obstacle.next; + + let distSq = RVOMath.distSqPointLineSegment(obstacle.point, nextObstacle.point, this.position_); + + if (distSq < rangeSq) { + this.obstaclNeighbors_.push(new KeyValuePair(distSq, obstacle)); + + let i = this.obstaclNeighbors_.length - 1; + while (i != 0 && distSq < this.obstaclNeighbors_[i - 1].key) { + this.obstaclNeighbors_[i] = this.obstaclNeighbors_[i - 1]; + --i; + } + this.obstaclNeighbors_[i] = new KeyValuePair(distSq, obstacle); + } + } + + update(dt: number) { + this.velocity_.copy(this.newVelocity_); + this.position_.copy(this.position_.plus(this.velocity_.scale(dt))); + }; + + linearProgram1(lines: Line[], lineNo: number, radius: number, optVelocity: Vector2, directionOpt: boolean, result: Vector2) { + let dotProduct = lines[lineNo].point.multiply(lines[lineNo].direction); + let discriminant = RVOMath.sqr(dotProduct) + RVOMath.sqr(radius) - RVOMath.absSq(lines[lineNo].point); + + if (discriminant < 0.0) { + /* Max speed circle fully invalidates line lineNo. */ + return false; + } + + let sqrtDiscriminant = Math.sqrt(discriminant); + let tLeft = -dotProduct - sqrtDiscriminant; + let tRight = -dotProduct + sqrtDiscriminant; + + for (let i = 0; i < lineNo; ++i) { + let denominator = RVOMath.det(lines[lineNo].direction, lines[i].direction); + let numerator = RVOMath.det(lines[i].direction, lines[lineNo].point.minus(lines[i].point)); + + if (Math.abs(denominator) <= RVOMath.RVO_EPSILON) { + /* Lines lineNo and i are (almost) parallel. */ + if (numerator < 0.0) { + return false; + } + else { + continue; + } + } + + let t = numerator / denominator; + + if (denominator >= 0.0) { + /* Line i bounds line lineNo on the right. */ + tRight = Math.min(tRight, t); + } + else { + /* Line i bounds line lineNo on the left. */ + tLeft = Math.max(tLeft, t); + } + + if (tLeft > tRight) { + return false; + } + } + + if (directionOpt) { + if (optVelocity.multiply(lines[lineNo].direction) > 0.0) { + // Take right extreme + result.copy(lines[lineNo].point.plus(lines[lineNo].direction.scale(tRight))); + } + else { + // Take left extreme. + result.copy(lines[lineNo].point.plus(lines[lineNo].direction.scale(tLeft))); + } + } + else { + // Optimize closest point + let t = lines[lineNo].direction.multiply(optVelocity.minus(lines[lineNo].point)); + if (t < tLeft) { + result.copy(lines[lineNo].point.plus(lines[lineNo].direction.scale(tLeft))); + } + else if (t > tRight) { + result.copy(lines[lineNo].point.plus(lines[lineNo].direction.scale(tRight))); + } + else { + result.copy(lines[lineNo].point.plus(lines[lineNo].direction.scale(t))); + } + } + + return true; + } + + linearProgram2(lines: Line[], radius: number, optVelocity: Vector2, directionOpt: boolean, result: Vector2) { + // directionOpt 第一次为false,第二次为true,directionOpt主要用在 linearProgram1 里面 + if (directionOpt) { + /* + * Optimize direction. Note that the optimization velocity is of unit + * length in this case. + */ + result.copy(optVelocity.scale(radius)); + } + else if (RVOMath.absSq(optVelocity) > RVOMath.sqr(radius)) { + /* Optimize closest point and outside circle. */ + result.copy(RVOMath.normalize(optVelocity).scale(radius)); + } + else { + /* Optimize closest point and inside circle. */ + result.copy(optVelocity); + } + + for (let i = 0; i < lines.length; ++i) { + if (RVOMath.det(lines[i].direction, lines[i].point.minus(result)) > 0.0) { + /* Result does not satisfy constraint i. Compute new optimal result. */ + let tempResult = result.clone(); + if (!this.linearProgram1(lines, i, radius, optVelocity, directionOpt, result)) { + result.copy(tempResult); + return i; + } + } + } + + return lines.length; + } + + linearProgram3(lines: Line[], numObstLines: number, beginLine: number, radius: number, result: Vector2) { + let distance = 0.0; + // 遍历所有剩余ORCA线 + for (let i = beginLine; i < lines.length; ++i) { + // 每一条 ORCA 线都需要精确的做出处理,distance 为 最大违规的速度 + if (RVOMath.det(lines[i].direction, lines[i].point.minus(result)) > distance) { + /* Result does not satisfy constraint of line i. */ + //std::vector projLines(lines.begin(), lines.begin() + numObstLines); + let projLines = []; // new List(); + // 1.静态阻挡的orca线直接加到projLines中 + for (let ii = 0; ii < numObstLines; ++ii) { + projLines.push(lines[ii]); + } + // 2.动态阻挡的orca线需要重新计算line,从第一个非静态阻挡到当前的orca线 + for (let j = numObstLines; j < i; ++j) { + let line = new Line(); + + let determinant = RVOMath.det(lines[i].direction, lines[j].direction); + + if (Math.abs(determinant) <= RVOMath.RVO_EPSILON) { + /* Line i and line j are parallel. */ + if (lines[i].direction.multiply(lines[j].direction) > 0.0) { + /* Line i and line j point in the same direction. */ + continue; + } + else { + /* Line i and line j point in opposite direction. */ + line.point = lines[i].point.plus(lines[j].point).scale(0.5); + } + } + else { + line.point = lines[i].point.plus(lines[i].direction.scale(RVOMath.det(lines[j].direction, lines[i].point.minus(lines[j].point)) / determinant)); + } + + line.direction = RVOMath.normalize(lines[j].direction.minus(lines[i].direction)); + projLines.push(line); + } + + let tempResult = result.clone(); + if (this.linearProgram2(projLines, radius, new Vector2(-lines[i].direction.y, lines[i].direction.x), true, result) < projLines.length) { + /* This should in principle not happen. The result is by definition + * already in the feasible region of this linear program. If it fails, + * it is due to small floating point error, and the current result is + * kept. + */ + result.copy(tempResult); + } + + distance = RVOMath.det(lines[i].direction, lines[i].point.minus(result)); + } + } + } +} \ No newline at end of file diff --git a/assets/Scripts/RVO/Agent.ts.meta b/assets/Scripts/RVO/Agent.ts.meta new file mode 100644 index 0000000..6628e2b --- /dev/null +++ b/assets/Scripts/RVO/Agent.ts.meta @@ -0,0 +1,12 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "99d7f5fd-fae6-4106-ba7a-93c1e298d001", + "files": [], + "subMetas": {}, + "userData": { + "moduleId": "project:///assets/Scripts/GameCore/RVO2/Agent.js", + "simulateGlobals": [] + } +} diff --git a/assets/Scripts/RVO/Common.ts b/assets/Scripts/RVO/Common.ts new file mode 100644 index 0000000..0f457c3 --- /dev/null +++ b/assets/Scripts/RVO/Common.ts @@ -0,0 +1,117 @@ +import { Vec2 } from "cc"; + +export class Vector2 { + x = 0; + y = 0; + + constructor(x: number, y: number) { + this.x = x; + this.y = y; + } + + plus(vector: Vector2) { + return new Vector2(this.x + vector.x, this.y + vector.y); + } + + minus(vector: Vector2) { + return new Vector2(this.x - vector.x, this.y - vector.y); + } + + multiply(vector: Vector2) { + return this.x * vector.x + this.y * vector.y; + } + + scale(k: number) { + return new Vector2(this.x * k, this.y * k); + } + + copy(v: Vector2 | Vec2) { + this.x = v.x; + this.y = v.y; + return this; + } + + clone() { + return new Vector2(this.x, this.y); + } + + substract(out: Vector2, other: Vector2) { + out.x -= other.x; + out.y -= other.y; + return out; + } + + lengthSqr() { + return this.x ** 2 + this.y ** 2; + } +} + +export class Obstacle { + next: Obstacle; + previous: Obstacle; + direction: Vector2; + point: Vector2; + id: number; + convex: boolean; +} + +export class Line { + point: Vector2; + direction: Vector2; +} + +export class KeyValuePair { + key: K; + value: V; + constructor(key: K, value: V) { + this.key = key; + this.value = value; + } +} + +export class RVOMath { + + static RVO_EPSILON = 0.00001; + + static absSq(v: Vector2) { + return v.multiply(v); + }; + + static normalize(v: Vector2) { + return v.scale(1 / RVOMath.abs(v)); // v / abs(v) + }; + + static distSqPointLineSegment(vector1: Vector2, vector2: Vector2, vector3: Vector2) { + let aux1 = vector3.minus(vector1); + let aux2 = vector2.minus(vector1); + + let r = aux1.multiply(aux2) / RVOMath.absSq(aux2); + + if (r < 0) { + return RVOMath.absSq(aux1); + } + else if (r > 1) { + return RVOMath.absSq(vector3.minus(vector2)); + } + else { + return RVOMath.absSq(vector3.minus(vector1.plus(aux2.scale(r)))); + } + }; + + static sqr(p: number) { + return p * p; + }; + + static det(v1: Vector2, v2: Vector2) { + return v1.x * v2.y - v1.y * v2.x; + }; + + static abs(v: Vector2) { + return Math.sqrt(RVOMath.absSq(v)); + }; + + static leftOf(a: Vector2, b: Vector2, c: Vector2) { + return RVOMath.det(a.minus(c), b.minus(a)); + }; + +} \ No newline at end of file diff --git a/assets/Scripts/RVO/Common.ts.meta b/assets/Scripts/RVO/Common.ts.meta new file mode 100644 index 0000000..2ac905a --- /dev/null +++ b/assets/Scripts/RVO/Common.ts.meta @@ -0,0 +1,12 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "b21abffd-42c6-4d43-bbe0-0edd2fb59f53", + "files": [], + "subMetas": {}, + "userData": { + "moduleId": "project:///assets/Scripts/GameCore/RVO2/Common.js", + "simulateGlobals": [] + } +} diff --git a/assets/Scripts/RVO/Simulator.ts b/assets/Scripts/RVO/Simulator.ts new file mode 100644 index 0000000..8e125be --- /dev/null +++ b/assets/Scripts/RVO/Simulator.ts @@ -0,0 +1,236 @@ +import { Vec2 } from "cc"; +import { Agent } from "./Agent"; +import { Obstacle, RVOMath, Vector2 } from "./Common"; +import { KdTree } from "./kdtree"; + + +export class Simulator { + private agentId: number = 0; + private agentIdLst: number[] = []; + aid2agent: { [key: string]: Agent } = Object.create(null); + + obstacles: Obstacle[] = []; + kdTree: KdTree = new KdTree(); + + + defaultAgent: Agent; // Agent + time: number = 0.0; + + private static _inst: Simulator; + static get instance(): Simulator { + if (!Simulator._inst) { + Simulator._inst = new Simulator(); + } + return Simulator._inst; + } + + getAgent(idx: number) { + return this.aid2agent[this.agentIdLst[idx]]; + } + + getAgentByAid(aid: number) { + return this.aid2agent[aid]; + } + + getGlobalTime() { + return this.time; + }; + + getNumAgents() { + // console.log("getNumAgents ::", this.agentIdLst.length, this.agentIdLst) + return this.agentIdLst.length; + }; + + getAgentAidByIdx(idx: number) { + return this.agentIdLst[idx] + } + + + setAgentPrefVelocity(aid: number, velocity: Vector2 | Vec2) { + this.aid2agent[aid].prefVelocity_.copy(velocity); + } + + getAgentPosition(aid: number) { + if (this.aid2agent[aid]) {//为什么移除了 还会进入这个aid的检测 + return this.aid2agent[aid].position_; + } + return null + + } + + getAgentPrefVelocity(aid: number) { + return this.aid2agent[aid].prefVelocity_; + } + + getAgentVelocity(aid: number) { + return this.aid2agent[aid].velocity_; + } + + getAgentRadius(aid: number) { + return this.aid2agent[aid].radius_; + } + + getAgentOrcaLines(aid: number) { + return this.aid2agent[aid].orcaLines_; + } + + /** + * 添加动态避障管理对象 + * @param position 初始位置 + * @param radius 检测半径 + * @param maxSpeed 最大速度 + * @param velocity 初始线速度(向量) + * @param mass 转向质量 + * @returns + */ + addAgent(position: Vector2 | Vec2, radius: number = null, maxSpeed: number = null, velocity: Vector2 = null, mass: number = null) { + if (!this.defaultAgent) { + throw new Error("no default agent"); + } + + let agent = new Agent(); + + agent.position_.copy(position); + agent.maxNeighbors_ = this.defaultAgent.maxNeighbors_; + agent.maxSpeed_ = maxSpeed || this.defaultAgent.maxSpeed_; + agent.neighborDist = this.defaultAgent.neighborDist; + agent.radius_ = radius || this.defaultAgent.radius_; + agent.timeHorizon = this.defaultAgent.timeHorizon; + agent.timeHorizonObst = this.defaultAgent.timeHorizonObst; + agent.velocity_.copy(velocity || this.defaultAgent.velocity_); + + agent.id = this.agentId++; + + if (mass && mass >= 0) { + agent.mass = mass + } + this.aid2agent[agent.id] = agent; + this.agentIdLst.push(agent.id); + + return agent.id; + } + + removeAgent(aid: number) { + if (this.hasAgent(aid)) { + + let idx = this.agentIdLst.indexOf(aid); + if (idx >= 0) { + // this.agentIdLst.splice(idx, 1) //用高效伪移除 + this.agentIdLst[idx] = this.agentIdLst[this.agentIdLst.length - 1]; + this.agentIdLst.length--; + } + delete this.aid2agent[aid]; + } + } + + hasAgent(aid: number) { + return !!this.aid2agent[aid]; + } + + setAgentMass(agentNo: number, mass: number) { + this.aid2agent[agentNo].mass = mass; + } + + getAgentMass(agentNo: number) { + return this.aid2agent[agentNo].mass; + } + + setAgentRadius(agentNo: number, radius: number) { + this.aid2agent[agentNo].radius_ = radius; + } + + /** + * + * @param neighborDist 在寻找周围邻居的搜索距离,这个值设置过大,会让小球在很远距离时做出避障行为 + * @param maxNeighbors 寻找周围邻居的最大数目,这个值设置越大,最终计算的速度越精确,但会增大计算量 + * @param timeHorizon 代表计算动态的物体时的时间窗口 + * @param timeHorizonObst 代表计算静态的物体时的时间窗口,比如在RTS游戏中,小兵向城墙移动时,没必要做出避障,这个值需要 设置得很小 + * @param radius 代表计算ORCA时的小球的半径,这个值不一定与小球实际显示的半径一样,偏小有利于小球移动顺畅 + * @param maxSpeed 小球最大速度值 + * @param velocity 小球初始速度 + */ + setAgentDefaults(neighborDist: number, maxNeighbors: number, timeHorizon: number, timeHorizonObst: number, radius: number, maxSpeed: number, velocity: Vector2) { + if (!this.defaultAgent) { + this.defaultAgent = new Agent(); + } + + this.defaultAgent.maxNeighbors_ = maxNeighbors; + this.defaultAgent.maxSpeed_ = maxSpeed; + this.defaultAgent.neighborDist = neighborDist; + this.defaultAgent.radius_ = radius; + this.defaultAgent.timeHorizon = timeHorizon; + this.defaultAgent.timeHorizonObst = timeHorizonObst; + this.defaultAgent.velocity_ = velocity; + } + + run(dt: number) { + this.kdTree.buildAgentTree(this.getNumAgents()); + let agentNum = this.agentIdLst.length; + for (let i = 0; i < agentNum; i++) { + this.aid2agent[this.agentIdLst[i]].computeNeighbors(this); + this.aid2agent[this.agentIdLst[i]].computeNewVelocity(dt); + } + for (let i = 0; i < agentNum; i++) { + this.aid2agent[this.agentIdLst[i]].update(dt); + } + + this.time += dt; + } + + + addObstacle(vertices: Vector2[]) { + if (vertices.length < 2) { + return -1; + } + + let obstacleNo = this.obstacles.length; + + for (let i = 0; i < vertices.length; ++i) { + let obstacle = new Obstacle(); + obstacle.point = vertices[i]; + if (i != 0) { + obstacle.previous = this.obstacles[this.obstacles.length - 1]; + obstacle.previous.next = obstacle; + } + if (i == vertices.length - 1) { + obstacle.next = this.obstacles[obstacleNo]; + obstacle.next.previous = obstacle; + } + obstacle.direction = RVOMath.normalize(vertices[(i == vertices.length - 1 ? 0 : i + 1)].minus(vertices[i])); + + if (vertices.length == 2) { + obstacle.convex = true; + } + else { + obstacle.convex = (RVOMath.leftOf(vertices[(i == 0 ? vertices.length - 1 : i - 1)], vertices[i], vertices[(i == vertices.length - 1 ? 0 : i + 1)]) >= 0); + } + + obstacle.id = this.obstacles.length; + + this.obstacles.push(obstacle); + } + + return obstacleNo; + } + + processObstacles() { + this.kdTree.buildObstacleTree(); + }; + + queryVisibility(point1: Vector2, point2: Vector2, radius: number) { + return this.kdTree.queryVisibility(point1, point2, radius); + }; + + getObstacles() { + return this.obstacles; + } + + clear() { + this.agentIdLst.length = 0; + this.agentId = 0; + this.aid2agent = Object.create(null); + this.defaultAgent = null; + this.kdTree = new KdTree(); + this.obstacles.length = 0; + } +} \ No newline at end of file diff --git a/assets/Scripts/RVO/Simulator.ts.meta b/assets/Scripts/RVO/Simulator.ts.meta new file mode 100644 index 0000000..6d805ba --- /dev/null +++ b/assets/Scripts/RVO/Simulator.ts.meta @@ -0,0 +1,12 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "c9717561-2e5e-441e-b1de-1b3ca6ee543f", + "files": [], + "subMetas": {}, + "userData": { + "moduleId": "project:///assets/Scripts/GameCore/RVO2/Simulator.js", + "simulateGlobals": [] + } +} diff --git a/assets/Scripts/RVO/kdtree.ts b/assets/Scripts/RVO/kdtree.ts new file mode 100644 index 0000000..f40fb75 --- /dev/null +++ b/assets/Scripts/RVO/kdtree.ts @@ -0,0 +1,391 @@ +import { RVOMath, Obstacle, Vector2 } from "./Common"; +import { Simulator } from "./Simulator"; +import { Agent } from "./Agent"; + +class FloatPair { + a: number; + b: number; + constructor(a: number, b: number) { + this.a = a; + this.b = b; + } + + lessThan(rhs: FloatPair) { + return this.a < rhs.a || !(rhs.a < this.a) && this.b < rhs.b; + } + + lessEqualThan(rhs: FloatPair) { + return (this.a == rhs.a && this.b == rhs.b) || this.lessThan(rhs); + } + + bigThan(rhs: FloatPair) { + return !this.lessEqualThan(rhs); + } + + bigEqualThan(rhs: FloatPair) { + return !this.lessThan(rhs); + } +} + +class AgentTreeNode { + begin: number; + end: number; + left: number; + right: number; + maxX: number; + maxY: number; + minX: number; + minY: number; +} + +class ObstacleTreeNode { + obstacle: Obstacle; + left: ObstacleTreeNode; + right: ObstacleTreeNode; +} + +export class KdTree { + /** + * The maximum size of an agent k-D tree leaf. + */ + MAX_LEAF_SIZE = 10; + agents: Agent[] = null; + agentTree: AgentTreeNode[] = []; + obstacleTree: ObstacleTreeNode = null; + + + buildAgentTree(agentNum: number) { + if (!this.agents || this.agents.length != agentNum) { + this.agents = new Array(agentNum); + for(let i = 0; i < this.agents.length; i++) { + this.agents[i] = Simulator.instance.getAgent(i); + } + + this.agentTree = new Array(2 * this.agents.length); + for (let i = 0; i < this.agentTree.length; i++) { + this.agentTree[i] = new AgentTreeNode(); + } + } + + if (this.agents.length != 0) { + this.buildAgentTreeRecursive(0, this.agents.length, 0); + } + } + + buildObstacleTree() { + this.obstacleTree = new ObstacleTreeNode(); + let obstacles = new Array(Simulator.instance.obstacles.length); + for(let i = 0; i < obstacles.length; i++) { + obstacles[i] = Simulator.instance.obstacles[i]; + } + this.obstacleTree = this.buildObstacleTreeRecursive(obstacles); + } + + computeAgentNeighbors(agent: Agent, rangeSq: number) { + return this.queryAgentTreeRecursive(agent, rangeSq, 0); + } + + computeObstacleNeighbors(agent: Agent, rangeSq: number) { + this.queryObstacleTreeRecursive(agent, rangeSq, this.obstacleTree); + } + + queryVisibility (q1: Vector2, q2: Vector2, radius: number) { + return this.queryVisibilityRecursive(q1, q2, radius, this.obstacleTree); + } + + buildAgentTreeRecursive(begin: number, end: number, node: number) { + this.agentTree[node].begin = begin; + this.agentTree[node].end = end; + this.agentTree[node].minX = this.agentTree[node].maxX = this.agents[begin].position_.x; + this.agentTree[node].minY = this.agentTree[node].maxY = this.agents[begin].position_.y; + + for (let i = begin + 1; i < end; ++i) { + this.agentTree[node].maxX = Math.max(this.agentTree[node].maxX, this.agents[i].position_.x); + this.agentTree[node].minX = Math.min(this.agentTree[node].minX, this.agents[i].position_.x); + this.agentTree[node].maxY = Math.max(this.agentTree[node].maxY, this.agents[i].position_.y); + this.agentTree[node].minY = Math.min(this.agentTree[node].minY, this.agents[i].position_.y); + } + + if (end - begin > this.MAX_LEAF_SIZE) { + // no leaf node + let isVertical = (this.agentTree[node].maxX - this.agentTree[node].minX) > (this.agentTree[node].maxY - this.agentTree[node].minY); + let splitValue = 0.5 * (isVertical ? this.agentTree[node].maxX + this.agentTree[node].minX : this.agentTree[node].maxY + this.agentTree[node].minY); + + let left = begin; + let right = end; + + while (left < right) { + while (left < right && (isVertical ? this.agents[left].position_.x : this.agents[left].position_.y) < splitValue) { + ++left; + } + + while (right > left && (isVertical ? this.agents[right - 1].position_.x : this.agents[right - 1].position_.y) >= splitValue) { + --right; + } + + if (left < right) { + let tmp = this.agents[left]; + this.agents[left] = this.agents[right - 1]; + this.agents[right - 1] = tmp; + ++left; + --right; + } + } + + let leftSize = left - begin; + if (leftSize == 0) { + ++leftSize; + ++left; + ++right; + } + + this.agentTree[node].left = node + 1; + this.agentTree[node].right = node + 2 * leftSize; + + this.buildAgentTreeRecursive(begin, left, this.agentTree[node].left); + this.buildAgentTreeRecursive(left, end, this.agentTree[node].right); + } + } + + + buildObstacleTreeRecursive(obstacles: Obstacle[]) { + if (obstacles.length == 0) { + return null; + } + else { + let node = new ObstacleTreeNode(); + let optimalSplit = 0; + let minLeft = obstacles.length; + let minRight = minLeft; + + for (let i = 0; i < obstacles.length; ++i) { + let leftSize = 0; + let rightSize = 0; + + let obstacleI1 = obstacles[i]; + let obstacleI2 = obstacleI1.next; + + for (let j = 0; j < obstacles.length; j++) { + if (i == j) { + continue; + } + + let obstacleJ1 = obstacles[j]; + let obstacleJ2 = obstacleJ1.next; + + let j1LeftOfI = RVOMath.leftOf(obstacleI1.point, obstacleI2.point, obstacleJ1.point); + let j2LeftOfI = RVOMath.leftOf(obstacleI1.point, obstacleI2.point, obstacleJ2.point); + + if (j1LeftOfI >= -RVOMath.RVO_EPSILON && j2LeftOfI >= -RVOMath.RVO_EPSILON) { + ++leftSize; + } + else if (j1LeftOfI <= RVOMath.RVO_EPSILON && j2LeftOfI <= RVOMath.RVO_EPSILON) { + ++rightSize; + } + else { + ++leftSize; + ++rightSize; + } + + let fp1 = new FloatPair(Math.max(leftSize, rightSize), Math.min(leftSize, rightSize)); + let fp2 = new FloatPair(Math.max(minLeft, minRight), Math.min(minLeft, minRight)); + + if (fp1.bigEqualThan(fp2)) { + break; + } + } + + let fp1 = new FloatPair(Math.max(leftSize, rightSize), Math.min(leftSize, rightSize)); + let fp2 = new FloatPair(Math.max(minLeft, minRight), Math.min(minLeft, minRight)); + + if (fp1.lessThan(fp2)) { + minLeft = leftSize; + minRight = rightSize; + optimalSplit = i; + } + } + + { + /* Build split node. */ + let leftObstacles: Obstacle[] = []; + for (let n = 0; n < minLeft; ++n) leftObstacles.push(null); + + let rightObstacles: Obstacle[] = []; + for (let n = 0; n < minRight; ++n) rightObstacles.push(null); + + let leftCounter = 0; + let rightCounter = 0; + let i = optimalSplit; + + let obstacleI1 = obstacles[i]; + let obstacleI2 = obstacleI1.next; + + for (let j = 0; j < obstacles.length; ++j) { + if (i == j) { + continue; + } + + let obstacleJ1 = obstacles[j]; + let obstacleJ2 = obstacleJ1.next; + + let j1LeftOfI = RVOMath.leftOf(obstacleI1.point, obstacleI2.point, obstacleJ1.point); + let j2LeftOfI = RVOMath.leftOf(obstacleI1.point, obstacleI2.point, obstacleJ2.point); + + if (j1LeftOfI >= -RVOMath.RVO_EPSILON && j2LeftOfI >= -RVOMath.RVO_EPSILON) { + leftObstacles[leftCounter++] = obstacles[j]; + } + else if (j1LeftOfI <= RVOMath.RVO_EPSILON && j2LeftOfI <= RVOMath.RVO_EPSILON) { + rightObstacles[rightCounter++] = obstacles[j]; + } + else { + /* Split obstacle j. */ + let t = RVOMath.det(obstacleI2.point.minus(obstacleI1.point), obstacleJ1.point.minus(obstacleI1.point)) / + RVOMath.det(obstacleI2.point.minus(obstacleI1.point), obstacleJ1.point.minus(obstacleJ2.point)); + + let splitpoint = obstacleJ1.point.plus( (obstacleJ2.point.minus(obstacleJ1.point)).scale(t) ); + + let newObstacle = new Obstacle(); + newObstacle.point = splitpoint; + newObstacle.previous = obstacleJ1; + newObstacle.next = obstacleJ2; + newObstacle.convex = true; + newObstacle.direction = obstacleJ1.direction; + + newObstacle.id = Simulator.instance.obstacles.length; + + Simulator.instance.obstacles.push(newObstacle); + + obstacleJ1.next = newObstacle; + obstacleJ2.previous = newObstacle; + + if (j1LeftOfI > 0.0) { + leftObstacles[leftCounter++] = obstacleJ1; + rightObstacles[rightCounter++] = newObstacle; + } + else { + rightObstacles[rightCounter++] = obstacleJ1; + leftObstacles[leftCounter++] = newObstacle; + } + } + } + + node.obstacle = obstacleI1; + node.left = this.buildObstacleTreeRecursive(leftObstacles); + node.right = this.buildObstacleTreeRecursive(rightObstacles); + return node; + } + } + } + + + queryAgentTreeRecursive(agent: Agent, rangeSq: number, node: number) { + if (this.agentTree[node].end - this.agentTree[node].begin <= this.MAX_LEAF_SIZE) { + for (let i = this.agentTree[node].begin; i < this.agentTree[node].end; ++i) { + rangeSq = agent.insertAgentNeighbor(this.agents[i], rangeSq); + } + } + else { + let distSqLeft = RVOMath.sqr(Math.max(0, this.agentTree[this.agentTree[node].left].minX - agent.position_.x)) + + RVOMath.sqr(Math.max(0, agent.position_.x - this.agentTree[this.agentTree[node].left].maxX)) + + RVOMath.sqr(Math.max(0, this.agentTree[this.agentTree[node].left].minY - agent.position_.y)) + + RVOMath.sqr(Math.max(0, agent.position_.y - this.agentTree[this.agentTree[node].left].maxY)); + + let distSqRight = RVOMath.sqr(Math.max(0, this.agentTree[this.agentTree[node].right].minX - agent.position_.x)) + + RVOMath.sqr(Math.max(0, agent.position_.x - this.agentTree[this.agentTree[node].right].maxX)) + + RVOMath.sqr(Math.max(0, this.agentTree[this.agentTree[node].right].minY - agent.position_.y)) + + RVOMath.sqr(Math.max(0, agent.position_.y - this.agentTree[this.agentTree[node].right].maxY)); + + if (distSqLeft < distSqRight) { + if (distSqLeft < rangeSq) { + rangeSq = this.queryAgentTreeRecursive(agent, rangeSq, this.agentTree[node].left); + + if (distSqRight < rangeSq) { + rangeSq = this.queryAgentTreeRecursive(agent, rangeSq, this.agentTree[node].right); + } + } + } + else { + if (distSqRight < rangeSq) { + rangeSq = this.queryAgentTreeRecursive(agent, rangeSq, this.agentTree[node].right); + + if (distSqLeft < rangeSq) { + rangeSq = this.queryAgentTreeRecursive(agent, rangeSq, this.agentTree[node].left); + } + } + } + + } + return rangeSq; + } + + // pass ref range + queryObstacleTreeRecursive(agent: Agent, rangeSq: number, node: ObstacleTreeNode) { + if (node == null) { + return rangeSq; + } + else { + let obstacle1 = node.obstacle; + let obstacle2 = obstacle1.next; + + let agentLeftOfLine = RVOMath.leftOf(obstacle1.point, obstacle2.point, agent.position_); + + rangeSq = this.queryObstacleTreeRecursive(agent, rangeSq, (agentLeftOfLine >= 0 ? node.left : node.right)); + + let distSqLine = RVOMath.sqr(agentLeftOfLine) / RVOMath.absSq(obstacle2.point.minus(obstacle1.point)); + + if (distSqLine < rangeSq) + { + if (agentLeftOfLine < 0) + { + /* + * Try obstacle at this node only if is on right side of + * obstacle (and can see obstacle). + */ + agent.insertObstacleNeighbor(node.obstacle, rangeSq); + } + + /* Try other side of line. */ + this.queryObstacleTreeRecursive(agent, rangeSq, (agentLeftOfLine >= 0 ? node.right : node.left)); + } + return rangeSq; + } + } + + + + queryVisibilityRecursive(q1: Vector2, q2: Vector2, radius: number, node: ObstacleTreeNode) { + if (node == null) { + return true; + } + else { + let obstacle1 = node.obstacle; + let obstacle2 = obstacle1.next; + + let q1LeftOfI = RVOMath.leftOf(obstacle1.point, obstacle2.point, q1); + let q2LeftOfI = RVOMath.leftOf(obstacle1.point, obstacle2.point, q2); + let invLengthI = 1.0 / RVOMath.absSq(obstacle2.point.minus(obstacle1.point)); + + if (q1LeftOfI >= 0 && q2LeftOfI >= 0) + { + return this.queryVisibilityRecursive(q1, q2, radius, node.left) && ((RVOMath.sqr(q1LeftOfI) * invLengthI >= RVOMath.sqr(radius) && RVOMath.sqr(q2LeftOfI) * invLengthI >= RVOMath.sqr(radius)) || this.queryVisibilityRecursive(q1, q2, radius, node.right)); + } + else if (q1LeftOfI <= 0 && q2LeftOfI <= 0) + { + return this.queryVisibilityRecursive(q1, q2, radius, node.right) && ((RVOMath.sqr(q1LeftOfI) * invLengthI >= RVOMath.sqr(radius) && RVOMath.sqr(q2LeftOfI) * invLengthI >= RVOMath.sqr(radius)) || this.queryVisibilityRecursive(q1, q2, radius, node.left)); + } + else if (q1LeftOfI >= 0 && q2LeftOfI <= 0) + { + /* One can see through obstacle from left to right. */ + return this.queryVisibilityRecursive(q1, q2, radius, node.left) && this.queryVisibilityRecursive(q1, q2, radius, node.right); + } + else + { + let point1LeftOfQ = RVOMath.leftOf(q1, q2, obstacle1.point); + let point2LeftOfQ = RVOMath.leftOf(q1, q2, obstacle2.point); + let invLengthQ = 1.0 / RVOMath.absSq(q2.minus(q1)); + + return (point1LeftOfQ * point2LeftOfQ >= 0 && RVOMath.sqr(point1LeftOfQ) * invLengthQ > RVOMath.sqr(radius) && RVOMath.sqr(point2LeftOfQ) * invLengthQ > RVOMath.sqr(radius) && this.queryVisibilityRecursive(q1, q2, radius, node.left) && this.queryVisibilityRecursive(q1, q2, radius, node.right)); + } + } + } +} \ No newline at end of file diff --git a/assets/Scripts/RVO/kdtree.ts.meta b/assets/Scripts/RVO/kdtree.ts.meta new file mode 100644 index 0000000..2ddd092 --- /dev/null +++ b/assets/Scripts/RVO/kdtree.ts.meta @@ -0,0 +1,12 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "a7ee4e36-baac-4720-ba0f-7f779a7fd328", + "files": [], + "subMetas": {}, + "userData": { + "moduleId": "project:///assets/Scripts/GameCore/RVO2/kdtree.js", + "simulateGlobals": [] + } +} diff --git a/assets/Scripts/Test.meta b/assets/Scripts/Test.meta new file mode 100644 index 0000000..2298a30 --- /dev/null +++ b/assets/Scripts/Test.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "5180adb3-56df-4480-bc8e-b139f7d65ac4", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/assets/Scripts/Test/MonsterFactory.ts b/assets/Scripts/Test/MonsterFactory.ts new file mode 100644 index 0000000..eeac9b7 --- /dev/null +++ b/assets/Scripts/Test/MonsterFactory.ts @@ -0,0 +1,211 @@ +import { instantiate, Intersection2D, Node, NodePool, Prefab, Rect, resources, UITransform, Vec3, view } from "cc"; +import ArrayUtil from "../core/utils/ArrayUtil"; +import { monsterCtl } from "./monsterCtl"; +import Game from "./Test2"; + +interface MonsterPool { + name: string; + pool: NodePool; +} + + + +export default class MonsterFactory { + private static instance: MonsterFactory = null; + public static get Instance(): MonsterFactory { + if (this.instance == null) + this.instance = new MonsterFactory(); + return this.instance; + } + + MonsterPoolList: Array = new Array(); + monsterParent: Node; + monsterDataCountList = {}; //每种怪物的数量数据 + + monsterAllList: Array = new Array(); //所有的怪物; + + screenMonsterAllList: Array = new Array(); //屏幕里面的怪物; + + arrayMonsterList: Array> = new Array>(); + + currenTime = -30; + currentIndex = 0;//当前刷新到了第几次 + weekCount = 0; //第几次循环 + constructor() { + // this.monsterParent = find("Canvas/Game/monsterCtl"); + this.monsterParent = Game.Instance.monsterRootNode + } + + getMonsterCountByName(name) { + let index = 0; + for (let i = 0; i < this.monsterAllList.length; i++) { + if (this.monsterAllList[i].node.name == name) { + index++; + } + } + return index; + } + + clear() { + this.currenTime = -30; + this.currentIndex = 0; + this.weekCount = 0; + for (let i = 0; i < this.monsterAllList.length; i++) { + let monsterCtl = this.monsterAllList[i]; + this.recoverNode(monsterCtl.node); + i--; + } + this.monsterDataCountList = {}; + this.monsterAllList = new Array(); + this.arrayMonsterList = new Array>(); + this.screenMonsterAllList = new Array() + } + + update(dt) { + + } + + creatorMonsterByName(name, pos: Vec3, call?) { + let pool: NodePool = this.getEfPoolByName(name); + let node: Node = pool.get(); + + if (this.monsterDataCountList[name] == null) { + this.monsterDataCountList[name] = 0; + } + this.monsterDataCountList[name]++; + let resetNode = (ef: Node) => { + ef.parent = this.monsterParent; + ef.active = true; + ef.setPosition(pos.x, pos.y); + call && call(ef); + let mstCtl = ef.getComponent(monsterCtl) + if (mstCtl) { + mstCtl.reuse() + this.monsterAllList.push(mstCtl); + } else { + console.error("monster has none monster ctl...") + } + }; + if (node == null) { + resources.load("prefab/monster/" + name, Prefab, (err, resPrefab) => { + node = instantiate(resPrefab) + resetNode(node) + }) + + } + else { + // console.log("从缓存池创建...") + resetNode(node); + } + } + + getEfPoolByName(name) { + let efPool: NodePool = null; + for (let i = 0; i < this.MonsterPoolList.length; i++) { + if (name == this.MonsterPoolList[i].name) { + efPool = this.MonsterPoolList[i].pool; + break + } + } + if (efPool == null) { + efPool = new NodePool(); + this.MonsterPoolList.push({ + name: name, + pool: efPool + }) + } + return efPool; + } + + /** + * 回收 + * @param node + */ + recoverNode(node) { + let name = node.name; + if (this.monsterDataCountList[node.name]) { + this.monsterDataCountList[node.name]--; + } + for (let i = 0; i < this.MonsterPoolList.length; i++) { + if (name == this.MonsterPoolList[i].name) { + node.active = false; + this.MonsterPoolList[i].pool.put(node); + let com = node.getComponent(monsterCtl); + let index = this.monsterAllList.indexOf(com); + if (index != -1) { + ArrayUtil.fastRemoveAt(this.monsterAllList, index) + // this.monsterAllList.splice(index, 1); + } + break; + } + } + } + + + /** + * 获取当前在屏幕内的怪物 + * @param node + */ + getInViewMonster(node: Node = null) { + let tNode = node ? node : Game.Instance.Player.node + this.screenMonsterAllList = []; + this.arrayMonsterList = new Array>(); + let pos = tNode.getComponent(UITransform).convertToWorldSpaceAR(new Vec3()); + + let v2 = view.getViewportRect(); + let realView = new Vec3(v2.width, v2.height, 0); + let allRect = new Rect(pos.x - realView.x / 2, pos.y - realView.y / 2, realView.x, realView.y); + + let cutRectMonterList = new Array(); + this.arrayMonsterList.push(cutRectMonterList); + for (let j = 0; j < this.monsterAllList.length; j++) { + let monsterCtl = this.monsterAllList[j]; + let monsterRect = monsterCtl.getCircle(true); + //顺便获取屏幕里面的怪 + if (Intersection2D.rectCircle(allRect, monsterRect.pos, monsterRect.radius)) { + this.screenMonsterAllList.push(monsterCtl); + } + } + } + + cutRectCount = 2; + getCutRectList(node) { + this.screenMonsterAllList = []; + this.arrayMonsterList = new Array>(); + let pos = node.getComponent(UITransform).convertToWorldSpaceAR(new Vec3()); + let v2 = view.getViewportRect(); + let realView = new Vec3(v2.width, v2.height, 0); + let allRect = new Rect(pos.x - realView.x / 2, pos.y - realView.y / 2, realView.x, realView.y); + let rect1 = new Rect(pos.x - realView.x, pos.y, realView.x, realView.y); + let rect2 = new Rect(pos.x, pos.y, realView.x, realView.y); + let rect3 = new Rect(pos.x - realView.x, pos.y - realView.y, realView.x, realView.y); + let rect4 = new Rect(pos.x, pos.y - realView.y, realView.x, realView.y); + let rectList = [rect1, rect2, rect3, rect4]; + for (let i = 0; i < rectList.length; i++) { + let rect = rectList[i]; + let cutRectMonterList = new Array(); + this.arrayMonsterList.push(cutRectMonterList); + for (let j = 0; j < this.monsterAllList.length; j++) { + let monsterCtl = this.monsterAllList[j]; + let monsterRect = monsterCtl.getCircle(); + // let result = rect.intersects(monsterRect); + // rect.polygonCircle + let result = Intersection2D.rectCircle(rect, monsterRect.pos, monsterRect.radius) + //改为矩形圆形判断 + if (result) { + cutRectMonterList.push(monsterCtl); + monsterCtl.cutRectMonterList = cutRectMonterList; + + } + //顺便获取屏幕里面的怪 + if (i == 0) { + if (Intersection2D.rectCircle(allRect, monsterRect.pos, monsterRect.radius)) { + this.screenMonsterAllList.push(monsterCtl); + } + } + } + } + + } + +} \ No newline at end of file diff --git a/assets/Scripts/Test/MonsterFactory.ts.meta b/assets/Scripts/Test/MonsterFactory.ts.meta new file mode 100644 index 0000000..6e45d75 --- /dev/null +++ b/assets/Scripts/Test/MonsterFactory.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "411ec7f5-0831-42e0-92ab-00f47d9173c5", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/Scripts/Test/Test2.ts b/assets/Scripts/Test/Test2.ts new file mode 100644 index 0000000..43242f4 --- /dev/null +++ b/assets/Scripts/Test/Test2.ts @@ -0,0 +1,90 @@ + +import { Camera, Component, dynamicAtlasManager, Node, _decorator } from 'cc'; +import WaveMng from '../logics/mng/WaveMng'; +import { player } from '../rolectl/player'; +import { Vector2 } from '../RVO/Common'; +import { Simulator } from '../RVO/Simulator'; +import { monsterCtl } from './monsterCtl'; +const { ccclass, property } = _decorator; + +// 关闭web的动态合图 +// dynamicAtlasManager.enabled = false + +export default class Game { + public limitMonst: number = 400 + private static instance: Game = null; + public static get Instance(): Game { + if (this.instance == null) + this.instance = new Game(); + return this.instance; + } + + private _Player: player; + public get Player(): player { + return this._Player; + } + public set Player(value: player) { + this._Player = value; + } + + private _monsterRootNode: Node; + public get monsterRootNode(): Node { + return this._monsterRootNode; + } + public set monsterRootNode(value: Node) { + this._monsterRootNode = value; + } + + private _camera: Camera; + public get camera(): Camera { + return this._camera; + } + public set camera(value: Camera) { + this._camera = value; + } +} + +@ccclass('Test2') +export class Test2 extends Component { + @property(Camera) + camera: Camera; + @property(Node) + avatarLayer: Node; + @property(player) + player: player + + onEnable() { + Game.Instance.Player = this.player + Game.Instance.monsterRootNode = this.avatarLayer + Game.Instance.camera = this.camera// this.node.getComponent(this.camera) + } + + onDisable() { + } + + _bigRedBall: Node + start() { + // let simulator = Simulator.instance; + Simulator.instance.setAgentDefaults(60, 3, 1, 0.1, 14, 80, new Vector2(0, 0)); + } + + _framTimes = 0 + _dt: number = 0 + update(dt: number) { + //测试怪物生成RVO + this._dt += dt + if (this._dt > 0.5) { + this._dt = 0 + this.getComponent(WaveMng).createMonster() + } + + // 更新逻辑坐标 + Simulator.instance.run(dt); + this._framTimes = 0 + for (let index = 0; index < Game.Instance.Player.monsterList.length; index++) { + const monster = Game.Instance.Player.monsterList[index]; + monster.getComponent(monsterCtl).moveByRvo() + } + + } +} \ No newline at end of file diff --git a/assets/Scripts/Test/Test2.ts.meta b/assets/Scripts/Test/Test2.ts.meta new file mode 100644 index 0000000..284a01e --- /dev/null +++ b/assets/Scripts/Test/Test2.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "1928e6fa-5abf-447e-9276-7b784ea79f1d", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/Scripts/Test/monsterCtl.ts b/assets/Scripts/Test/monsterCtl.ts new file mode 100644 index 0000000..49dc2aa --- /dev/null +++ b/assets/Scripts/Test/monsterCtl.ts @@ -0,0 +1,206 @@ +import { Component, Vec2, Vec3, _decorator, v2, v3 } from 'cc'; +import { RVOMath } from '../RVO/Common'; +import { Simulator } from '../RVO/Simulator'; +import Util from '../core/utils/Util'; +import MonsterFactory from './MonsterFactory'; +import Game from './Test2'; +import { monsterEffectCtl } from './monsterEffectCtl'; +const { ccclass, property } = _decorator; + +@ccclass('monsterCtl') +export class monsterCtl extends Component { + private _hp: number = 5; + public get hp(): number { + return this._hp; + } + public set hp(value: number) { + this._hp = value; + } + + // private state : number = + //测试受击 + // hurtCoolTime = 0.15; + // hurtTime = 0.2; + + hurtCoolTime = 0.15; + hurtTime = 0.2; + private _hit: boolean = false + private _hitPow: number = 3 //受击系数 系数越高 反弹力度越大 + + private orScale: Vec3 = v3(1, 1, 1) + public cutRectMonterList = [] + + + private _agentHandleId: number = -1; //RVOid + public get agentHandleId(): number { + return this._agentHandleId; + } + public set agentHandleId(value: number) { + this._agentHandleId = value; + } + + start() { + this.orScale = this.node.scale + this._effectCtl = this.node.getComponent(monsterEffectCtl) + } + + _effectCtl: monsterEffectCtl + reuse() { + this._hit = false + this.hurtTime = 0 + this._effectCtl = this.node.getComponent(monsterEffectCtl) + if (this._effectCtl) + this._effectCtl.reuse() + } + + /** + * 改为圆形判断 + */ + getRect() { + let agent = Simulator.instance.getAgentByAid(this.agentHandleId) + if (agent) { + return agent.radius_ + } + } + + _tmpV2: Vec2 = new Vec2() + getCircle(world: boolean = false) { + let agent = Simulator.instance.getAgentByAid(this.agentHandleId) + if (agent) { + if (world) { + return { pos: Util.v3t2(this.node.worldPosition, this._tmpV2), radius: agent.radius_ } + } else { + return { pos: Util.v3t2(this.node.position, this._tmpV2), radius: agent.radius_ } + } + + } else { + console.error("monster Circle error...") + return null + } + } + + _frames: number = 0 + update(deltaTime: number) { + this.hurtTime -= deltaTime + + if (this._hit) {//设置 反向并且衰减的 线速度 + this.setPreferredVelocities(this._hitPow)//this._hitPow * this.hurtTime / this.hurtCoolTime + if (this.hurtTime <= 0) { + this._hit = false + } + } else { + if (this._frames++ > 8) { + this._frames = 0 + this.setPreferredVelocities()//设置追踪主角的线速度 + //确定朝向 + } + } + + } + + /** + * 设置追踪主角的线速度方向和大小 + */ + _tmpScale: Vec3 = new Vec3() + setPreferredVelocities(hitPow: number = null) { + if (this.agentHandleId < 0) { + return + } + this._tmpScale = this.node.getScale() + let agentAid = this.agentHandleId + let agent = Simulator.instance.getAgentByAid(agentAid) + let agentPos = Simulator.instance.getAgentPosition(agentAid) + let moveTarget: Vec2 = v2(Game.Instance.Player.node.getPosition().x, Game.Instance.Player.node.getPosition().y) + //受击状态的线速度处理 + if (hitPow) { + if (agent && agentPos) { + let goalVector: Vec2 = moveTarget.subtract2f(agentPos.x, agentPos.y)// this.goals[i].minus(Simulator.instance.getAgentPosition(agentAid)); + goalVector = goalVector.normalize().multiplyScalar(agent.maxSpeed_ * -hitPow); + Simulator.instance.setAgentPrefVelocity(agentAid, goalVector); + } + return + } + + + if (agent && agentPos) { + let goalVector: Vec2 = moveTarget.subtract2f(agentPos.x, agentPos.y)// this.goals[i].minus(Simulator.instance.getAgentPosition(agentAid)); + if (goalVector.lengthSqr() > 1.0) { + goalVector = goalVector.normalize().multiplyScalar(agent.maxSpeed_); + } + if (goalVector.lengthSqr() < RVOMath.RVO_EPSILON) { + Simulator.instance.setAgentPrefVelocity(agentAid, Vec2.ZERO); + } + else { + Simulator.instance.setAgentPrefVelocity(agentAid, goalVector); + //这个会导致抖动呀 宝贝... + // let angle = Math.random() * 2.0 * Math.PI; + // let dist = Math.random() * 0.0001; + // Simulator.instance.setAgentPrefVelocity(i, + // Simulator.instance.getAgentPrefVelocity(i).plus(new Vector2(Math.cos(angle), Math.sin(angle)).scale(dist))); + } + if (goalVector.x > 0) { + this.node.setScale(this._tmpScale.set(Math.abs(this._tmpScale.x), this._tmpScale.y, this._tmpScale.z)) + } else { + this.node.setScale(this._tmpScale.set(-Math.abs(this._tmpScale.x), this._tmpScale.y, this._tmpScale.z)) + } + } else { + console.error("RVO异常::", agent, agentPos, agentAid) + } + // } + } + + /** + * 在此之前 请确保Simulator run执行完毕 + */ + moveByRvo() { + // console.log("p::", p, Simulator.instance.getAgentPosition(this.agentHandleId)) + let p = Simulator.instance.getAgentPosition(this.agentHandleId); + this.node.setPosition(p.x, p.y) + } + + /** + * 测试效果 闪白 蓝光... + */ + hurtAction() { + let randEfIdx = Math.random() + let mstEffectCtl = this.node.getComponent(monsterEffectCtl) + if (mstEffectCtl) { + if (randEfIdx > 0.5) { + mstEffectCtl.playHit() + } else { + mstEffectCtl.playFroze() + } + } + } + + hurt(): boolean { + + // if (!this.) + if (this.hurtTime > 0) { //受击冷却中 + return + } + this.hurtTime = this.hurtCoolTime + + this._hp-- + if (this._hp <= 0) { + this.rmMonster() + return true + } else { + this.hurtAction() + this._hit = true + return false + } + } + + rmMonster() { + this._effectCtl.disove(() => { + if (this.agentHandleId >= 0) { + Simulator.instance.removeAgent(this.agentHandleId) + // console.log("移除RVO对象::", this.agentHandleId) + } + MonsterFactory.Instance.recoverNode(this.node) + }) + } +} + + diff --git a/assets/Scripts/Test/monsterCtl.ts.meta b/assets/Scripts/Test/monsterCtl.ts.meta new file mode 100644 index 0000000..9572013 --- /dev/null +++ b/assets/Scripts/Test/monsterCtl.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "cc093bda-87cd-4315-9b9e-178cd9fe6791", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/Scripts/Test/monsterEffectCtl.ts b/assets/Scripts/Test/monsterEffectCtl.ts new file mode 100644 index 0000000..db3f947 --- /dev/null +++ b/assets/Scripts/Test/monsterEffectCtl.ts @@ -0,0 +1,136 @@ +import { Component, Material, Sprite, UIOpacity, Vec4, _decorator, color, math, tween } from 'cc'; + +const { ccclass, property } = _decorator; + +@ccclass('monsterEffectCtl') +export class monsterEffectCtl extends Component { + _mt: Material = null + _spCmp: Sprite = null + private _hited: boolean; + private _froze: boolean; + private _optCmp: UIOpacity = null; + + + start() { + this._spCmp = this.node.getComponent(Sprite) + // this._optCmp = this.node.addComponent(UIOpacity) + // this._mt = this.node.getComponent(Sprite).getMaterialInstance(0)//这个打断合批... + } + + reuse() { + this.start() + // this._hited = this._froze = false + // this._frozeDt = this._hitDt = 0 + // this._mt = this.node.getComponent(Sprite).getMaterialInstance(0) + //关闭蓝色内发光 关闭闪白 + this._spCmp.color = color(255, 255, 255, 1) + } + + /** + * 闪白 + */ + _showHitTotalTime: number = 0.15 + playHit() { + //方式一 setProperty 打断合批 + //需要放开 start()中的 this._mt = this.node.getComponent(Sprite).getMaterialInstance(0) + // tween(this._mt).to(this._showHitTotalTime, {}, { + // onUpdate(target: Material, ratio) { + // target.setProperty("hitwhit", ratio) + // }, + // }).call(() => { + // this._mt.setProperty("hitwhit", 0.0) + // }).start() + + + //方式二 占用alpha通道 + let tSpCmp = this._spCmp // this.node.getComponent(Sprite) + tSpCmp.color = color(255, 255, 255, 1) + let tmpColor: math.Color = color(255, 255, 255, 244) + tween(tSpCmp).to(this._showHitTotalTime, {}, { + onUpdate(target: Sprite, ratio) { + tmpColor = color(255, 255, 255, 255 * ratio) + target.color = tmpColor + }, + }).call(() => { + tmpColor = color(255, 255, 255, 1) + tSpCmp.color = tmpColor + }).start() + + } + + /** + * 减速(视觉效果) + */ + frozeColor: Vec4 = Vec4.ZERO; + _showFrozeTime: number = 10 + _frozeDt: number = 0 + playFroze() { + //占用r通道 r在0~25.5之间 开启蓝色内光 + let tSpCmp = this._spCmp + let tmpColor: math.Color = null + tSpCmp.color = color(1, tSpCmp.color.g, tSpCmp.color.b, tSpCmp.color.a) + tween(tSpCmp).to(this._showFrozeTime, {}, {}).call(() => { + tmpColor = color(255, 255, 255, tSpCmp.color.a) + tSpCmp.color = tmpColor + }).start() + } + + /** + * 测试消融 + */ + _disoveTime: number = 1 + disove(cb?: Function) { + //占用g通道 + let tSpCmp = this._spCmp + tSpCmp.color = color(this._spCmp.color.r, 1, this._spCmp.color.b, this._spCmp.color.a) + let tmpColor: math.Color = null + tween(tSpCmp).to(this._disoveTime, {}, { + onUpdate(target: Sprite, ratio) { + tmpColor = color(255, 254 * ratio, 255, 255) + target.color = tmpColor + }, + }).call(() => { + if (cb) { + cb() + } + // tmpColor = color(255, 255, 255, 1) + // tSpCmp.color = tmpColor + }).start() + } + + /** + * 仅用于测试显示效果 + * 游戏类的冰冻减速 + * 中毒燃烧掉血等逻辑 应该由逻辑层实现 + */ + _hitDt: number + update(dt: number) { + // this._mt = this.node.getComponent(Sprite).getMaterial(0) + // if (this._hited) { + // this._hitDt += dt + // let percent = this._hitDt / this._showHitTotalTime + // percent = Math.min(Math.max(percent, 0.), 1.) + // this._mt.setProperty("hitwhit", percent) + // if (percent >= 1) { + // this._hitDt = 0 + // this._hited = false + // this._mt.setProperty("hitwhit", 0.0) + // } + // } + + // if (this._froze) { + // this._frozeDt += dt + // this._mt.setProperty("glowColor", this.frozeColor) + // if (this._frozeDt > this._showFrozeTime) { + // this._frozeDt = 0 + // this._mt.setProperty("glowColor", Vec4.ZERO) + // this._froze = false + // } + // } + + // console.log("this.mt::" , this._mt) + // this.node.getComponent(Sprite).setMaterial(this._mt,0) + } +} + + diff --git a/assets/Scripts/Test/monsterEffectCtl.ts.meta b/assets/Scripts/Test/monsterEffectCtl.ts.meta new file mode 100644 index 0000000..eb77759 --- /dev/null +++ b/assets/Scripts/Test/monsterEffectCtl.ts.meta @@ -0,0 +1 @@ +{"ver":"4.0.23","importer":"typescript","imported":true,"uuid":"eb420a22-bf96-4b6c-b2d9-8bab34bd9a58","files":[],"subMetas":{},"userData":{}} diff --git a/assets/Scripts/camera.meta b/assets/Scripts/camera.meta new file mode 100644 index 0000000..22212ac --- /dev/null +++ b/assets/Scripts/camera.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "a55debe1-4d5f-40e9-9995-8b241ef205c2", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/assets/Scripts/camera/camerafollow.ts b/assets/Scripts/camera/camerafollow.ts new file mode 100644 index 0000000..0ff2b8c --- /dev/null +++ b/assets/Scripts/camera/camerafollow.ts @@ -0,0 +1,32 @@ +import { Camera, Component, Node, Vec3, _decorator } from 'cc'; +const { ccclass, property } = _decorator; + +@ccclass('camerafollow') +export class camerafollow extends Component { + offset: Vec3 = new Vec3(); + camera: Camera; + + @property(Node) folNode: Node = null + start() { + this.camera = this.node.getComponent(Camera); + this.gameStart() + } + + gameStart() { + Vec3.subtract(this.offset, this.node.position, this.folNode.position); + } + + _tmpV3: Vec3 = new Vec3() + update(deltaTime: number) { + // if (Game.Instance.gameState != GameState.GAME_PLAY || Game.Instance.player == null) + // return; + let targetPos = this._tmpV3; + targetPos = Vec3.add(targetPos, this.offset, this.folNode.position); + Vec3.lerp(targetPos, this.node.position, targetPos, 0.1); + this.node.setPosition(targetPos); + } + + clear() { + this.node.position = new Vec3(0, 0, 0); + } +} \ No newline at end of file diff --git a/assets/Scripts/camera/camerafollow.ts.meta b/assets/Scripts/camera/camerafollow.ts.meta new file mode 100644 index 0000000..fa39e84 --- /dev/null +++ b/assets/Scripts/camera/camerafollow.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "ff6d36e8-a512-4150-9bd8-a29280339aa8", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/Scripts/common.meta b/assets/Scripts/common.meta new file mode 100644 index 0000000..5c79ec5 --- /dev/null +++ b/assets/Scripts/common.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "36e78f36-d62f-40f9-901c-ea51d2e40bb2", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/assets/Scripts/common/QuadTree.ts b/assets/Scripts/common/QuadTree.ts new file mode 100644 index 0000000..fc3e9ac --- /dev/null +++ b/assets/Scripts/common/QuadTree.ts @@ -0,0 +1,170 @@ +import { Rect, _decorator } from "cc"; +const { ccclass } = _decorator; + +@ccclass("QuadTree") +export default class QuadTree { + + nodes = []; + objects = []; //該容器的物體集合 + max_levels: number; // 最大深度 + max_objects: number; // 該容器最大容量 + level: number; //當前深度 + bounds: Rect = null; // 容器範圍(Rect) + + constructor(boundary, level) { + this.max_objects = 4; + this.max_levels = 4; + + this.level = level || 0; + this.bounds = boundary; + + this.objects = []; + this.nodes = []; + } + + insert(pRect) { + var i = 0, indexes; + + //if we have subnodes, call insert on matching subnodes + if (this.nodes.length) { + indexes = this.getIndex(pRect); + + for (i = 0; i < indexes.length; i++) { + this.nodes[indexes[i]].insert(pRect); + } + return; + } + + //otherwise, store object here + this.objects.push(pRect); + + //max_objects reached + if (this.objects.length > this.max_objects && this.level < this.max_levels) { + + //split if we don't already have subnodes + if (!this.nodes.length) { + this.split(); + } + + //add all objects to their corresponding subnode + for (i = 0; i < this.objects.length; i++) { + indexes = this.getIndex(this.objects[i]); + for (var k = 0; k < indexes.length; k++) { + this.nodes[indexes[k]].insert(this.objects[i]); + } + } + + //clean up this node + this.objects = []; + } + } + + split() { + var nextLevel = this.level + 1, + subWidth = this.bounds.width / 2, + subHeight = this.bounds.height / 2, + x = this.bounds.x, + y = this.bounds.y; + + //top right node + this.nodes[0] = new QuadTree({ + x: x + subWidth, + y: y, + width: subWidth, + height: subHeight + }, nextLevel); + + //top left node + this.nodes[1] = new QuadTree({ + x: x, + y: y, + width: subWidth, + height: subHeight + }, nextLevel); + + //bottom left node + this.nodes[2] = new QuadTree({ + x: x, + y: y + subHeight, + width: subWidth, + height: subHeight + }, nextLevel); + + //bottom right node + this.nodes[3] = new QuadTree({ + x: x + subWidth, + y: y + subHeight, + width: subWidth, + height: subHeight + }, nextLevel); + } + + + getIndex(pRect) { + var indexes = [], + verticalMidpoint = this.bounds.x + (this.bounds.width / 2), + horizontalMidpoint = this.bounds.y + (this.bounds.height / 2); + + var startIsNorth = pRect.y < horizontalMidpoint, + startIsWest = pRect.x < verticalMidpoint, + endIsEast = pRect.x + pRect.width > verticalMidpoint, + endIsSouth = pRect.y + pRect.height > horizontalMidpoint; + + //top-right quad + if (startIsNorth && endIsEast) { + indexes.push(0); + } + + //top-left quad + if (startIsWest && startIsNorth) { + indexes.push(1); + } + + //bottom-left quad + if (startIsWest && endIsSouth) { + indexes.push(2); + } + + //bottom-right quad + if (endIsEast && endIsSouth) { + indexes.push(3); + } + + return indexes; + } + + + retrieve(pRect) { + var indexes = this.getIndex(pRect), + returnObjects = this.objects; + + //if we have subnodes, retrieve their objects + if (this.nodes.length) { + for (var i = 0; i < indexes.length; i++) { + returnObjects = returnObjects.concat(this.nodes[indexes[i]].retrieve(pRect)); + } + } + + //remove duplicates + returnObjects = returnObjects.filter(function (item, index) { + return returnObjects.indexOf(item) >= index; + }); + + return returnObjects; + } + + objLen() { + + if (this.nodes.length > 0) { + let len = 0; + for (let node of this.nodes) { + len += node.objLen(); + } + return len; + } else { + //console.log('this.objects.length------',this.objects.length) + return this.objects.length; + } + } + +} diff --git a/assets/Scripts/common/QuadTree.ts.meta b/assets/Scripts/common/QuadTree.ts.meta new file mode 100644 index 0000000..167f4af --- /dev/null +++ b/assets/Scripts/common/QuadTree.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "469a12f5-f4ff-4458-94aa-0a440aaa114b", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/Scripts/conf.meta b/assets/Scripts/conf.meta new file mode 100644 index 0000000..8faccb5 --- /dev/null +++ b/assets/Scripts/conf.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "898d135e-bd05-458a-9341-3330818414fa", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/assets/Scripts/core.meta b/assets/Scripts/core.meta new file mode 100644 index 0000000..018196b --- /dev/null +++ b/assets/Scripts/core.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "ac65df09-c708-442b-aecb-03ab39ca0520", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/assets/Scripts/core/audio.meta b/assets/Scripts/core/audio.meta new file mode 100644 index 0000000..af55319 --- /dev/null +++ b/assets/Scripts/core/audio.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "83df4394-0767-4beb-b866-a462e2cdc935", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/assets/Scripts/core/conf.meta b/assets/Scripts/core/conf.meta new file mode 100644 index 0000000..2dd05e6 --- /dev/null +++ b/assets/Scripts/core/conf.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "208bfb92-0ad4-43a2-aee6-f6ac8ade12f1", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/assets/Scripts/core/data.meta b/assets/Scripts/core/data.meta new file mode 100644 index 0000000..571dff7 --- /dev/null +++ b/assets/Scripts/core/data.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "52f9fe41-4b8f-4a28-a615-9738f52a1974", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/assets/Scripts/core/event.meta b/assets/Scripts/core/event.meta new file mode 100644 index 0000000..87b61bf --- /dev/null +++ b/assets/Scripts/core/event.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "c447163d-4e7c-4993-ae73-1daf18176e15", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/assets/Scripts/core/event/EventManager.ts b/assets/Scripts/core/event/EventManager.ts new file mode 100644 index 0000000..5928699 --- /dev/null +++ b/assets/Scripts/core/event/EventManager.ts @@ -0,0 +1,139 @@ +import ArrayUtil from "../utils/ArrayUtil"; + +interface EventInfo { + func: Function; + target: any; +} + +class EventInfoList { + infos: EventInfo[] = null; + constructor() { + this.infos = []; + } + + has(cb: Function, target: any) { + if (this.infos.length <= 0) { + return false; + } + for (let i = 0; i < this.infos.length; i++) { + if (this.infos[i].func === cb && this.infos[i].target === target) { + return true; + } + } + return false; + } + /** + * 添加事件 + * @param cb 回调 + * @param target 目标 + */ + add(cb: Function, target: any) { + if (this.has(cb, target)) { + console.log('event repeat--------') + return; + } + let info = Object.create(null); + info.func = cb; + info.target = target; + + this.infos.push(info); + } + + /**移除指定 */ + remove(cb: Function, target: any) { + + if (this.infos.length <= 0) { + return; + } + for (let i = 0; i < this.infos.length; i++) { + if (this.infos[i].func === cb && this.infos[i].target === target) { + ArrayUtil.fastRemoveAt(this.infos, i); + break; + } + } + } + /**移除目标所有 */ + removeByTarget(target: any) { + if (this.infos.length <= 0) { + return; + } + + for (let i = 0; i < this.infos.length; i++) { + if (this.infos[i].target === target) { + ArrayUtil.fastRemoveAt(this.infos, i); + i--; + } + } + } + + /**移除所有 */ + removeAll() { + this.infos.forEach(info => { + info.func = null; + info.target = null; + }) + this.infos = []; + } + +} + +export class EventManager { + private _evtMap: { [k: string]: EventInfoList } = Object.create(null); + on(evtType: string, cb: Function, target?: any) { + let list = this._evtMap[evtType]; + if (!list) { + list = new EventInfoList(); + this._evtMap[evtType] = list; + } + list.add(cb, target); + } + + emit(evtType: string, ...params: any) { + let list = this._evtMap[evtType]; + if (!list || list.infos.length <= 0) { + return; + } + for (let i = 0; i < list.infos.length; i++) { + let info = list.infos[i]; + if (info.func) { + info.func.apply(info.target, params); + } + } + } + + /**移除 指定*/ + off(evtType: string, cb: Function, target?: any) { + let list = this._evtMap[evtType]; + if (!list) return; + list.remove(cb, target); + } + + /**事件名或目标移除 */ + offByKeyOrTarget(key: string | Object) { + let list: EventInfoList = null; + if (typeof key == 'string') { + list = this._evtMap[key]; + if (list) { + list.removeAll(); + } + } else { + + for (let k in this._evtMap) { + list = this._evtMap[k]; + list.removeByTarget(key); + } + } + } + +} + +/** + * [1] Class member could be defined like this. + * [2] Use `property` decorator if your want the member to be serializable. + * [3] Your initialization goes here. + * [4] Your update function goes here. + * + * Learn more about scripting: https://docs.cocos.com/creator/3.4/manual/zh/scripting/ + * Learn more about CCClass: https://docs.cocos.com/creator/3.4/manual/zh/scripting/ccclass.html + * Learn more about life-cycle callbacks: https://docs.cocos.com/creator/3.4/manual/zh/scripting/life-cycle-callbacks.html + */ diff --git a/assets/Scripts/core/event/EventManager.ts.meta b/assets/Scripts/core/event/EventManager.ts.meta new file mode 100644 index 0000000..19c3bf1 --- /dev/null +++ b/assets/Scripts/core/event/EventManager.ts.meta @@ -0,0 +1,11 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "8069a6da-1c33-4e0f-bd20-cbe42cdf93c0", + "files": [], + "subMetas": {}, + "userData": { + "simulateGlobals": [] + } +} diff --git a/assets/Scripts/core/gui.meta b/assets/Scripts/core/gui.meta new file mode 100644 index 0000000..e6a0015 --- /dev/null +++ b/assets/Scripts/core/gui.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "a60ec33d-05ca-4c72-af63-b9114ccf5f19", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/assets/Scripts/core/libs.meta b/assets/Scripts/core/libs.meta new file mode 100644 index 0000000..4981c01 --- /dev/null +++ b/assets/Scripts/core/libs.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "592a89e6-ccc0-4774-9ee7-9ae076b12106", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/assets/Scripts/core/libs/encrypt.meta b/assets/Scripts/core/libs/encrypt.meta new file mode 100644 index 0000000..92fc8c7 --- /dev/null +++ b/assets/Scripts/core/libs/encrypt.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "51ab9e9b-4ad5-4d65-aa54-46a3cdddf83d", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/assets/Scripts/core/resLoad.meta b/assets/Scripts/core/resLoad.meta new file mode 100644 index 0000000..4fc4581 --- /dev/null +++ b/assets/Scripts/core/resLoad.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "c84048a4-78cc-469b-b4de-3eacd1548372", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/assets/Scripts/core/utils.meta b/assets/Scripts/core/utils.meta new file mode 100644 index 0000000..fe2d263 --- /dev/null +++ b/assets/Scripts/core/utils.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "226f498a-54ae-42df-a53b-444ed7d701dc", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/assets/Scripts/core/utils/ArrayUtil.ts b/assets/Scripts/core/utils/ArrayUtil.ts new file mode 100644 index 0000000..d37a6b3 --- /dev/null +++ b/assets/Scripts/core/utils/ArrayUtil.ts @@ -0,0 +1,120 @@ +/* + * @Author: dgflash + * @Date: 2021-08-11 16:41:12 + * @LastEditors: dgflash + * @LastEditTime: 2022-01-24 15:00:52 + */ +/** + * 数组工具 + */ +export default class ArrayUtil { + /** 去重 */ + public static noRepeated(arr: any[]) { + var res = [arr[0]]; + for (var i = 1; i < arr.length; i++) { + var repeat = false; + for (var j = 0; j < res.length; j++) { + if (arr[i] == res[j]) { + repeat = true; + break; + } + } + + if (!repeat) { + res.push(arr[i]); + } + } + return res; + } + + /** + * 复制二维数组 + * @param array 目标数组 + */ + public static copy2DArray(array: any[][]): any[][] { + let newArray: any[][] = []; + for (let i = 0; i < array.length; i++) { + newArray.push(array[i].concat()); + } + return newArray; + } + + /** + * Fisher-Yates Shuffle 随机置乱算法 + * @param array 目标数组 + */ + public static fisherYatesShuffle(array: any[]): any[] { + let count = array.length; + while (count) { + let index = Math.floor(Math.random() * count--); + let temp = array[count]; + array[count] = array[index]; + array[index] = temp; + } + return array; + } + + /** + * 混淆数组 + * @param array 目标数组 + */ + public static confound(array: []): any[] { + let result = array.slice().sort(() => Math.random() - .5); + return result; + } + + /** + * 数组扁平化 + * @param array 目标数组 + */ + public static flattening(array: any[]) { + for (; array.some(v => Array.isArray(v));) { // 判断 array 中是否有数组 + array = [].concat.apply([], array); // 压扁数组 + } + return array; + } + + /** 删除数组中指定项 */ + public static removeItem(array: any[], item: any) { + var temp = array.concat(); + for (let i = 0; i < temp.length; i++) { + const value = temp[i]; + if (item == value) { + array.splice(i, 1); + break; + } + } + } + + /** + * 合并数组 + * @param array1 目标数组1 + * @param array2 目标数组2 + */ + public static combineArrays(array1: any[], array2: any[]): any[] { + let newArray = [...array1, ...array2]; + return newArray; + } + + /** + * 获取随机数组成员 + * @param array 目标数组 + */ + public static getRandomValueInArray(array: any[]): any { + let newArray = array[Math.floor(Math.random() * array.length)]; + return newArray; + } + + /** + * 快速移除指定位置数组元素 + * @param array + * @param idx + * @returns + */ + public static fastRemoveAt(array: any[],idx:number){ + let len = array.length-1; //1 + if(idx > len) return; + array[idx] = array[len]; + array.length = len; + } +} diff --git a/assets/Scripts/core/utils/ArrayUtil.ts.meta b/assets/Scripts/core/utils/ArrayUtil.ts.meta new file mode 100644 index 0000000..90e5e1c --- /dev/null +++ b/assets/Scripts/core/utils/ArrayUtil.ts.meta @@ -0,0 +1,11 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "b65cfca1-1091-485a-adbf-aadd39753a50", + "files": [], + "subMetas": {}, + "userData": { + "simulateGlobals": [] + } +} diff --git a/assets/Scripts/core/utils/MathUtil.ts b/assets/Scripts/core/utils/MathUtil.ts new file mode 100644 index 0000000..efdd1fe --- /dev/null +++ b/assets/Scripts/core/utils/MathUtil.ts @@ -0,0 +1,116 @@ +export class MathUtil { + /** + * 角度转弧度 + */ + public static deg2Rad: number = Math.PI / 180; + + /** + * 弧度转角度 + */ + public static rad2Deg: number = 180 / Math.PI; + + /** + * 获得随机方向 + */ + public static sign(x: number) { + if (x > 0) { + return 1; + } + if (x < 0) { + return -1; + } + return 0; + } + + /** 随时间变化进度值 */ + public static progress(start: number, end: number, t: number) { + return start + (end - start) * t; + } + + /** + * 插值 + * @param numStart + * @param numEnd + * @param t + */ + public static lerp(numStart: number, numEnd: number, t: number): number { + if (t > 1) { + t = 1; + } + else if (t < 0) { + t = 0 + } + + return numStart * (1 - t) + (numEnd * t); + } + + /** + * + * @param angle1 角度插值 + * @param angle2 + * @param t + */ + public static lerpAngle(current: number, target: number, t: number): number { + current %= 360; + target %= 360; + + var dAngle: number = target - current; + + if (dAngle > 180) { + target = current - (360 - dAngle); + } + else if (dAngle < -180) { + target = current + (360 + dAngle); + } + + return (MathUtil.lerp(current, target, t) % 360 + 360) % 360; + } + + /** + * 按一定的速度从一个角度转向令一个角度 + * @param current + * @param target + * @param speed + */ + public static angleTowards(current: number, target: number, speed: number): number { + current %= 360; + target %= 360; + + var dAngle: number = target - current; + + if (dAngle > 180) { + target = current - (360 - dAngle); + } + else if (dAngle < -180) { + target = current + (360 + dAngle); + } + + var dir = target - current; + + if (speed > Math.abs(dir)) { + return target; + } + + return ((current + speed * Math.sign(dir)) % 360 + 360) % 360; + } + + public static clamp(value: number, minLimit: number, maxLimit: number) { + if (value < minLimit) { + return minLimit; + } + + if (value > maxLimit) { + return maxLimit; + } + + return value; + } + + /** + * 获得一个值的概率 + * @param value + */ + public static probability(value: number) { + return Math.random() < value; + } +} diff --git a/assets/Scripts/core/utils/MathUtil.ts.meta b/assets/Scripts/core/utils/MathUtil.ts.meta new file mode 100644 index 0000000..072abf8 --- /dev/null +++ b/assets/Scripts/core/utils/MathUtil.ts.meta @@ -0,0 +1,11 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "2df4c13d-eb96-4b3c-bf18-ba3367cc6022", + "files": [], + "subMetas": {}, + "userData": { + "simulateGlobals": [] + } +} diff --git a/assets/Scripts/core/utils/Util.ts b/assets/Scripts/core/utils/Util.ts new file mode 100644 index 0000000..323444a --- /dev/null +++ b/assets/Scripts/core/utils/Util.ts @@ -0,0 +1,231 @@ +// Learn TypeScript: +// - https://docs.cocos.com/creator/manual/en/scripting/typescript.html +// Learn Attribute: +// - https://docs.cocos.com/creator/manual/en/scripting/reference/attributes.html +// Learn life-cycle callbacks: +// - https://docs.cocos.com/creator/manual/en/scripting/life-cycle-callbacks.html + +import { v2, v3, Vec2, Vec3 } from "cc"; + + +export default class Util { + + + static simpleV2(value, out?: Vec2) { + if (out) { + out.set(value, value) + return out + } + return v2(value, value) + } + + static simpleV3(value, out?: Vec3) { + if (out) { + out.set(value, value, value) + return out + } + return v3(value, value, value) + } + + static v2t3(v2Data: Vec2, out?: Vec3) { + if (!out) { + return v3(v2Data.x, v2Data.y, 1) + } else { + out.x = v2Data.x + out.y = v2Data.y + out.z = 1 + return out + } + } + + static v3t2(v3Data: Vec3, out?: Vec2) { + if (!out) { + return v2(v3Data.x, v3Data.y) + } else { + out.x = v3Data.x + out.y = v3Data.y + return out + } + } + + /** + * return min - max 之间的数,包括min和max + * @param min + * @param max + */ + static randomNumber(min: number, max: number) { + if (min == max) { + return min + } + return Math.floor(Math.random() * (max - min + 1) + min) + } + + static findArrNullIdx(arr: any[]) { + if (arr.length == 0) return 0; + for (let i = 0; i < arr.length; i++) { + if (!arr[i]) { + return i; + } + } + return -1; + } + + //分割number字符串 返回number 数组 + public static splitNumber(str: number | string, Separator: string = ',') { + if (!str) return []; + if (typeof str == 'number') { + return [str]; + } + + return str.split(Separator).map((s_num, idx) => { + return Number(s_num); + }) + } + + /** + * @param weights 权重数组 随机一个 + * @returns + */ + static weightRandomIdx(weights: number[]) { + if (weights.length <= 1) { + return 0; + } + + let tw: number = 0; + for (let i = 0; i < weights.length; i++) { + tw += weights[i]; + } + let rw = Math.random() * tw; + let sw: number = 0, ew: number = 0; + + for (let i = 0; i < weights.length; i++) { + ew = sw + weights[i]; + if (sw < rw && rw <= ew) { + return i; + } + sw = ew; + } + return 0; + } + + /**小数去0 */ + public static numMoveZoro(num: string) { + if (num.indexOf('.') < 0) { + return num; + } + num = num.replace(/0+?$/g, '') + if (num[num.length - 1] == '.') { + num = num.replace(/[.$]/, ''); + } + return num; + } + + /** + * + * @param num 秒 格式化 h:f:s + */ + public static secondFormat(num: number) { + let str = ''; + let h: number = Math.floor(num / 3600) + num -= h * 3600; + let f: number = Math.floor(num / 60) + num -= f * 60; + num = Math.floor(num) + + // str += (h<10?'0' + h:h); + + // str += ':'; + str += (f < 10 ? '0' + f : f); + + str += ':'; + str += (num < 10 ? '0' + num : num); + + return str; + } + + /**日期展示 */ + public static getDateStr(time: number, format: number = 1) { + + let date = new Date(time); + let y = date.getFullYear(), m = date.getMonth() + 1, + d = date.getDate(), h = date.getHours(), mn = date.getMinutes(); + + let mnStr = '' + mn; + if (mn < 10) mnStr = '0' + mn; + if (format == 1) { + return `${y}/${m}/${d} ${h}:${mnStr}`; + } else { + return `${y}年${m}月${d}日 ${h}:${mnStr}`; + } + + } + + + static generatorCallBack(len: number, callBack: Function, ...params: any) { + function* gen() { + for (let i = 0; i < len; i++) { + yield callBack(i, ...params) + } + } + return this.exeGenerator(gen(), 10); + } + + static exeGenerator(generator: Generator, duration: number) { + return new Promise((resolve, reject) => { + let gen = generator + let execute = () => { + let startTime = new Date().getTime() + for (let iter = gen.next(); ; iter = gen.next()) { + if (iter == null || iter.done) { + resolve(null) + return + } + if (new Date().getTime() - startTime > duration) { + setTimeout(() => { + execute() + }, duration) + return + } + } + } + execute() + }) + } + + /** + * 拷贝对象 + * @param src_obj 源对象 + * @param dst_obj 目标对象 + */ + static copyObj(src_obj: any, dst_obj: any) { + if (typeof dst_obj === "object") { + for (var key in dst_obj) { + if (typeof dst_obj[key] === "object") { + src_obj[key] != null && Util.copyObj(src_obj[key], dst_obj[key]); + } else if (typeof dst_obj[key] != "function") { + src_obj[key] != null && (dst_obj[key] = src_obj[key]); + } + } + } else { + console.log("can not copy the value type"); + } + } + + /** + * 克隆对象 + * @param obj 源对象 + * @returns 新的对象 + */ + static cloneObj(obj: any) { + var new_obj; + if (obj != null && (obj.constructor === Object || obj.constructor === Array)) { + new_obj = new obj.constructor(); + for (var key in obj) { + new_obj[key] = Util.cloneObj(obj[key]); + } + } else { + new_obj = obj; + } + return new_obj; + } +} \ No newline at end of file diff --git a/assets/Scripts/core/utils/Util.ts.meta b/assets/Scripts/core/utils/Util.ts.meta new file mode 100644 index 0000000..2fc6dea --- /dev/null +++ b/assets/Scripts/core/utils/Util.ts.meta @@ -0,0 +1,11 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "75224168-75d8-4cf6-bad8-d73031b24457", + "files": [], + "subMetas": {}, + "userData": { + "simulateGlobals": [] + } +} diff --git a/assets/Scripts/logics.meta b/assets/Scripts/logics.meta new file mode 100644 index 0000000..c0d9250 --- /dev/null +++ b/assets/Scripts/logics.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "7a60fd5f-89a1-4ee2-8dfa-68a14995f68c", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/assets/Scripts/logics/mng.meta b/assets/Scripts/logics/mng.meta new file mode 100644 index 0000000..65bfc65 --- /dev/null +++ b/assets/Scripts/logics/mng.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "3df89b31-a5ec-4394-bbbd-d80e4c3b0b53", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/assets/Scripts/logics/mng/SortMng.ts b/assets/Scripts/logics/mng/SortMng.ts new file mode 100644 index 0000000..2ef79fd --- /dev/null +++ b/assets/Scripts/logics/mng/SortMng.ts @@ -0,0 +1,34 @@ +import { Component, _decorator } from "cc"; + +const { ccclass, property } = _decorator; + +/** + * 排序 + */ +@ccclass +export default class SortMng extends Component { + + private _frameCount: number = 0; + + update(dt) { + if (++this._frameCount % 6 == 0) { + this._frameCount = 0 + this.sortChildrenByY(); + } + } + + private sortChildrenByY() { + let listToSort = this.node.children.slice(); + listToSort.sort(function (a, b) { + return b.getPosition().y - a.getPosition().y; + }); + + // console.log("排序::" , listToSort.length) + for (let i = 0; i < listToSort.length; ++i) { + let node = listToSort[i]; + if (node.active) { + node.setSiblingIndex(i + 1); + } + } + } +} diff --git a/assets/Scripts/logics/mng/SortMng.ts.meta b/assets/Scripts/logics/mng/SortMng.ts.meta new file mode 100644 index 0000000..a68d5b9 --- /dev/null +++ b/assets/Scripts/logics/mng/SortMng.ts.meta @@ -0,0 +1,11 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "b52c9552-a69e-490e-957e-eb0e6f08087a", + "files": [], + "subMetas": {}, + "userData": { + "simulateGlobals": [] + } +} diff --git a/assets/Scripts/logics/mng/WaveMng.ts b/assets/Scripts/logics/mng/WaveMng.ts new file mode 100644 index 0000000..c6cab6e --- /dev/null +++ b/assets/Scripts/logics/mng/WaveMng.ts @@ -0,0 +1,126 @@ +import { Component, Rect, UITransform, v2, v3, Vec2, Vec3, view, _decorator } from "cc"; +import QuadTree from "../../common/QuadTree"; +import Util from "../../core/utils/Util"; +import { Simulator } from "../../RVO/Simulator"; +import { monsterCtl } from "../../Test/monsterCtl"; +import MonsterFactory from "../../Test/MonsterFactory"; +import Game from "../../Test/Test2"; + +const { ccclass, property } = _decorator; + +/** + */ +@ccclass("WaveMng") +export default class WaveMng extends Component { + + public quadTree: QuadTree = null; + private _wHalf: number = 0; + private _hHalf: number = 0; + monsterPrefab: Array = ["A", "B", "C"]; + // monsterPrefab: Array = ["A"]; + + + + update() { + this.rebuildTree() + } + + rebuildTree() { + if (!Game.Instance.camera) { + return + } + let rect = view.getViewportRect() + this.quadTree = new QuadTree(rect, 0); + Game.Instance.Player.monsterList.forEach(enm => { + let rect = enm.getComponent(UITransform).getBoundingBoxToWorld() + let treeObj = { x: rect.x, y: rect.y, height: rect.height, width: rect.width, rect: rect, collider: enm } + this.quadTree.insert(treeObj) + }) + + } + /** + */ + _tmpV2: Vec2 = new Vec2() + _tmpV3: Vec3 = new Vec3() + createMonster() { + // if (Game.Instance.Player.monsterList.length <= 0) { + // return + if (Game.Instance.Player.monsterList.length >= Game.Instance.limitMonst) { + return + } + // if (this.node.getComponent(WaveMng)) { + let posArray = this.getPos(0, Math.random() * 20 + 10) + let speedCfg = [120, 80 , 80] + let radiusCfg = [20, 18, 18] + let maxHp = 4 + // return + for (let idx = 0; idx < posArray.length; idx++) { + let prefabIdx = Math.floor(Math.random() * this.monsterPrefab.length) + let prefabName: string = this.monsterPrefab[prefabIdx]// Math.random() > 0.5 ? this.sphereRed : this.sphereBlue + let speed = speedCfg[prefabIdx] + let radius = radiusCfg[prefabIdx] + let mass = 1 + let sacle = 0.5 + let checkDis = radius * 2 + let hp = Math.floor(Math.random() * maxHp) + if (prefabIdx != 0) { + sacle = 0.5 + } + + let p = posArray[idx] + let agentId = Simulator.instance.addAgent(Util.v3t2(p, this._tmpV2), radius, speed, null, mass); + let agentObj = Simulator.instance.getAgentByAid(agentId) + agentObj.neighborDist = checkDis //动态修改每个agent的巡视范围 + + MonsterFactory.Instance.creatorMonsterByName(prefabName, p, (node) => { + node.getComponent(monsterCtl).agentHandleId = agentId + node.getComponent(monsterCtl).hp = hp + node.setScale(Util.simpleV3(sacle, this._tmpV3)) + Game.Instance.Player.monsterList.push(node) + }) + } + } + + /** + * 获取四叉树的推荐检测列表 + * @param checkRect + */ + getTreeColliderList(checkRect: Rect) { + if (this.quadTree) { + return this.quadTree.retrieve(checkRect) + } + return [] + + } + + + _tmpPosVe3: Array = [] + getPos(type: number, numbs: number) { + this._tmpPosVe3.length = 0 + const size = view.getVisibleSize(); + this._wHalf = size.width * 0.25 + 300 + Math.random() * 300; + this._hHalf = size.height * 0.25 + 200 + Math.random() * 200; + let len = numbs + var w = this._wHalf;//椭圆长 + var h = this._hHalf; //椭圆高 + var angle = 360 / len; + var x, y; + const point = Game.Instance.Player.node.getPosition(); + for (let i = 0; i < len; i++) { + // Mathf.Deg2Rad 单位角度的弧 相当于 1° 的弧度 + x = w * Math.cos(i * (angle / 180) * Math.PI); + y = h * Math.sin(i * (angle / 180) * Math.PI); + this._tmpPosVe3.push(v3(x + point.x, y + point.y, 1)) + } + return this._tmpPosVe3 + } + + protected onEnable(): void { + + } + + protected onDisable(): void { + + } + +} \ No newline at end of file diff --git a/assets/Scripts/logics/mng/WaveMng.ts.meta b/assets/Scripts/logics/mng/WaveMng.ts.meta new file mode 100644 index 0000000..0fe3beb --- /dev/null +++ b/assets/Scripts/logics/mng/WaveMng.ts.meta @@ -0,0 +1,11 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "044954b5-0556-4284-bbdd-f0362ec09a7d", + "files": [], + "subMetas": {}, + "userData": { + "simulateGlobals": [] + } +} diff --git a/assets/Scripts/logics/role.meta b/assets/Scripts/logics/role.meta new file mode 100644 index 0000000..d016d06 --- /dev/null +++ b/assets/Scripts/logics/role.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "7e2691b1-d8ca-4638-b82f-078495072927", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/assets/Scripts/logics/skill.meta b/assets/Scripts/logics/skill.meta new file mode 100644 index 0000000..273c0af --- /dev/null +++ b/assets/Scripts/logics/skill.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "131cd532-4953-4327-91e0-a3b80ee3e5d2", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/assets/Scripts/logics/skillEntity.meta b/assets/Scripts/logics/skillEntity.meta new file mode 100644 index 0000000..adb4e1e --- /dev/null +++ b/assets/Scripts/logics/skillEntity.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "da6ceaaa-4625-4dae-b727-9ae8531388b7", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/assets/Scripts/mng.meta b/assets/Scripts/mng.meta new file mode 100644 index 0000000..c761355 --- /dev/null +++ b/assets/Scripts/mng.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "a8db4dac-3dca-4f08-b580-72ba8ee0e7bb", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/assets/Scripts/mng/wave.ts b/assets/Scripts/mng/wave.ts new file mode 100644 index 0000000..208693f --- /dev/null +++ b/assets/Scripts/mng/wave.ts @@ -0,0 +1,451 @@ +// import { Component, v2, Vec2, view, _decorator } from 'cc'; +// import { app } from '../../app'; +// import ItemHelper from '../common/ItemHelper'; +// import QuadTree from '../common/QuadTree '; +// import { JsonModule } from '../conf/ClientConfigMgr'; +// import Util from '../core/utils/Util'; +// import Enemy from '../logics/Enemy'; +// const { ccclass, property } = _decorator; + +// interface IWaveData { //波次数据 +// id: number; +// tm: number; +// curTm: number; +// } + + +// interface IFbMonsterData { //需要创建怪物数据 +// pos: Vec2; +// mid: number; +// fid: number; +// } + + + +// @ccclass('NewComponent') +// export class NewComponent extends Component { +// private _enemyList: Enemy[] = null; + +// private _target: any = null; + +// private _fbArr: IWaveData[] = []; + +// private _cTime: number; +// private _createList: IFbMonsterData[] = null; //创建怪物列表 + +// public checkEnemys: Enemy[] = []; +// public quadTree: QuadTree = null; + +// private _wHalf: number = 0; +// private _hHalf: number = 0; + +// initial() { + +// this._target = app.gameMgr.camera; +// this._fbArr = []; +// this._enemyList = []; +// this._createList = []; +// this._cTime = 0; + +// const size = view.getVisibleSize(); +// this._wHalf = size.width * 0.25 + 50; +// this._hHalf = size.height * 0.25 + 50; + +// // if(ItemHelper.isDoubleMode()){ +// // this.startWaves(); +// // } +// } + +// startWaves() { +// let cfg; +// if (ItemHelper.isDoubleMode()) { //双人模式 +// cfg = app.confMgr.conf.fbconfig.getConfById(420001); +// } else { //单人模式 + +// if (app.dataMgr.battleData.player1.trySuperSkill != null) { //超武试用 +// cfg = app.confMgr.conf.fbconfig.getConfById(410001); +// } else { +// let fbConfs = app.confMgr.conf.fbconfig.getConfArr(); +// cfg = fbConfs[0]; +// } +// } + +// this._fbArr.push({ id: cfg.id, tm: cfg.fresh_cd, curTm: 0 }); +// } + +// gameUpdate(dt) { + +// // this._fbArr.forEach(f => { +// // f.curTm += dt; +// // }) +// // for (let i = 0; i < this._fbArr.length; i++) { +// // let fb = this._fbArr[i]; +// // if (fb.curTm > fb.tm) { +// // ArrayUtil.fastRemoveAt(this._fbArr, i); +// // this.freshCreateWave(fb); +// // break; +// // } +// // } + +// let rect = view.getVisibleSize() // app.gameMgr.camera.getViewRect(); +// this.quadTree = new QuadTree(rect, 0); + +// this.checkEnemys = []; +// this._enemyList.forEach(enemy => { +// enemy.gameUpdate(dt); + +// if (!enemy.isDie && enemy.inView) { +// this.checkEnemys.push(enemy); +// this.quadTree.insert(enemy.getCollisionData()); +// } + +// }) +// // console.log('this._enemyList---------',this._enemyList.length,this.checkEnemys.length,this.quadTree.objLen()) + +// //逐帧创建怪物 +// if (this._createList.length > 0) { +// this._cTime += dt; +// if (this._cTime >= 0.01) { +// this._cTime = 0; +// this.createEnemy(); +// } +// } +// } + +// protected onEnable(): void { +// // systemEvent.on(EventName.gm_create_enemy, this.gmCreateEnemy, this); +// } + +// protected onDisable(): void { +// // systemEvent.off(EventName.gm_create_enemy, this.gmCreateEnemy, this); +// } + +// gmCreateEnemy(enemyId, count, type) { +// console.log("gmCreateEnemy :: ", enemyId, count, type) +// let obj = Object.create(null); +// obj.id = Math.random() > 0.5 ? 400001 : 400001; +// obj.monster_id = enemyId; +// obj.monster_num = count; +// obj.fresh_site = type; +// if (type == 20) { +// //椭圆 +// this.initEllipseEnemys(obj); +// } else if (type == 21) { +// //生成圆形 +// this.initCircleEnemy(obj); +// } +// else { +// //范围随机生成 +// this.initEnemys(obj); +// } +// } + + +// /**触发去创建一波 */ +// freshCreateWave(fb: { id: number, tm: number, curTm: number }) { + +// // let fbconf = app.confMgr.conf.fbconfig.getConfById(fb.id); +// // if (!fbconf) { +// // return; +// // } +// // let nextIdStr: string = fbconf.next_id; +// // if (nextIdStr) { +// // let ids = Util.splitNumber(nextIdStr); +// // for (let i = 0; i < ids.length; i++) { +// // let conf = app.confMgr.conf.fbconfig.getConfById(ids[i]); +// // this._fbArr.push({ id: conf.id, tm: conf.fresh_cd, curTm: 0 }); +// // } +// // } +// // console.log('timeToFreshWave--------', fbconf.id) + +// // if (fbconf.fresh_site == 20) { +// // this.initEllipseEnemys(fbconf); +// // } else { +// // this.initEnemys(fbconf); +// // } +// } +// /**椭圆包围圈 */ +// private initEllipseEnemys(fbconf: JsonModule.IFbconfig) { +// const mIds = Util.splitNumber(fbconf.monster_id); +// const nums = Util.splitNumber(fbconf.monster_num); +// let midArr: number[] = []; +// for (let i = 0; i < nums.length; i++) { +// let l = nums[i], mid = mIds[i]; +// for (let j = 0; j < l; j++) { +// midArr.push(mid); +// } +// } +// let len = midArr.length; + +// var w = this._wHalf;//椭圆长 +// var h = this._hHalf; //椭圆高 +// var angle = 360 / len; +// var x, y; +// const point = this._target.node.getPosition(); +// for (let i = 0; i < len; i++) { +// // Mathf.Deg2Rad 单位角度的弧 相当于 1° 的弧度 +// x = w * Math.cos(i * (angle / 180) * Math.PI); +// y = h * Math.sin(i * (angle / 180) * Math.PI); + + +// let obj: IFbMonsterData = Object.create(null); +// obj.pos = v2(x + point.x, y + point.y); +// obj.mid = midArr[i]; +// obj.fid = fbconf.id; +// this._createList.push(obj) +// } +// } +// /**圆形包围圈 */ +// private initCircleEnemy(fbconf: JsonModule.IFbconfig) { +// const mIds = Util.splitNumber(fbconf.monster_id); +// const nums = Util.splitNumber(fbconf.monster_num); +// let midArr: number[] = []; +// for (let i = 0; i < nums.length; i++) { +// let l = nums[i], mid = mIds[i]; +// for (let j = 0; j < l; j++) { +// midArr.push(mid); +// } +// } +// let len = midArr.length; +// const point = this._target.node.getPosition(); +// const averageAngle = 360 / len; +// let a = 0; +// for (let i = 0; i < len; i++) { +// let r = this._hHalf + 10;//半径 +// let pos = v2(); +// pos.x = point.x + Math.sin(a * Math.PI / 180) * r; +// pos.y = point.y + Math.cos(a * Math.PI / 180) * r; +// a += averageAngle; +// let obj: IFbMonsterData = Object.create(null); +// obj.pos = pos; +// obj.mid = midArr[i]; +// obj.fid = fbconf.id; +// this._createList.push(obj) +// } +// } +// /**方形 随机生成怪物 */ +// private initEnemys(fbconf: JsonModule.IFbconfig) { + +// const mIds = Util.splitNumber(fbconf.monster_id); +// const nums = Util.splitNumber(fbconf.monster_num); +// let midArr: number[] = []; +// for (let i = 0; i < nums.length; i++) { +// let l = nums[i], mid = mIds[i]; +// for (let j = 0; j < l; j++) { +// midArr.push(mid); +// } +// } +// //计算四边平均怪物数量 +// let total = midArr.length; +// let m_idx: number = 0; +// const means = []; +// if (total < 4) { +// for (let i = 0; i < total; i++) { +// means.push(1); +// } +// } else { +// const mean = Math.floor(total / 4); +// for (let i = 0; i < 4; i++) { +// total -= mean; +// means.push(mean); +// } +// for (let i = 0; i < total; i++) { +// means[i] += 1; +// } +// } + +// const point = this._target.node.getPosition(); +// const state = fbconf.fresh_site > 0 ? fbconf.fresh_site : 1; +// const xMin = point.x - this._wHalf / state;// / 1//Util.randomNumber(1,fbconf.fresh_site); +// const xMax = point.x + this._wHalf / state;// / 1//Util.randomNumber(1,fbconf.fresh_site); +// const yMin = point.y - this._hHalf / state;// / 1//Util.randomNumber(1,fbconf.fresh_site); +// const yMax = point.y + this._hHalf / state;// / 1//Util.randomNumber(1,fbconf.fresh_site); + +// const tmpRects = [ +// new Vec2(xMin, yMin), +// new Vec2(xMin, yMax), +// new Vec2(xMax, yMax), +// new Vec2(xMax, yMin)]; +// for (let i = 0; i < means.length; i++) { +// const num = means[i]; +// let pjs = i % 2 == 0 ? (yMax - yMin) : (xMax - xMin); +// pjs /= num; + +// for (let j = 0; j < num; j++) { +// const val = j * pjs; +// const pos: Vec2 = tmpRects[i].clone(); +// if (i == 0) { +// pos.y = Util.randomNumber(pos.y, pos.y + val); +// if (state != 1) { +// pos.x = Util.randomNumber(pos.x, pos.x + val) +// } +// // pos.x /= fbconf.fresh_site; +// // if(num > 4) { +// // pos.x -= Math.abs(Util.randomNumber(pos.x, pos.x - 100)); +// // } +// } else if (i == 1) { +// pos.x = Util.randomNumber(pos.x, pos.x + val); +// if (state != 1) +// pos.y = Util.randomNumber(pos.y, pos.y + val); +// // pos.y /= fbconf.fresh_site; +// // if(num > 4){ +// // pos.y += Util.randomNumber(pos.y, pos.y + 100); +// // } +// } else if (i == 2) { +// pos.y = Util.randomNumber(pos.y, pos.y - val); +// if (state != 1) +// pos.x = Util.randomNumber(pos.x, pos.x - val); +// // pos.x /= fbconf.fresh_site; +// // if(num > 4){ +// // pos.x += Util.randomNumber(pos.x, pos.x + 100); +// // } +// } else { +// pos.x = Util.randomNumber(pos.x, pos.x - val); +// if (state != 1) +// pos.y = Util.randomNumber(pos.y, pos.y - val); +// // pos.x -= val; +// // pos.y /= fbconf.fresh_site; +// // if(num > 4){ +// // pos.y -= Math.abs(Util.randomNumber(pos.y, pos.y - 100)); +// // } +// } + +// let obj: IFbMonsterData = Object.create(null); +// obj.pos = pos; +// obj.mid = midArr[m_idx++]; +// obj.fid = fbconf.id; +// this._createList.push(obj); +// } +// } + +// } +// /**方形 队列生成怪物 */ +// private initEnemy(fbconf: JsonModule.IFbconfig) { + +// const mIds = Util.splitNumber(fbconf.monster_id); +// const nums = Util.splitNumber(fbconf.monster_num); +// let midArr: number[] = []; +// for (let i = 0; i < nums.length; i++) { +// let l = nums[i], mid = mIds[i]; +// for (let j = 0; j < l; j++) { +// midArr.push(mid); +// } +// } +// //计算四边平均怪物数量 +// let total = midArr.length; +// let m_idx: number = 0; +// const means = []; +// if (total < 4) { +// for (let i = 0; i < total; i++) { +// means.push(1); +// } +// } else { +// const mean = Math.floor(total / 4); +// for (let i = 0; i < 4; i++) { +// total -= mean; +// means.push(mean); +// } +// for (let i = 0; i < total; i++) { +// means[i] += 1; +// } +// } + +// const point = this._target.node.getPosition(); +// const xMin = point.x - this._wHalf; +// const xMax = point.x + this._wHalf; +// const yMin = point.y - this._hHalf; +// const yMax = point.y + this._hHalf; +// const tmpRects = [ +// new Vec2(xMin, yMin), +// new Vec2(xMin, yMax), +// new Vec2(xMax, yMax), +// new Vec2(xMax, yMin)]; +// for (let i = 0; i < means.length; i++) { +// const num = means[i]; +// let pjs = i % 2 == 0 ? (yMax - yMin) : (xMax - xMin); +// pjs /= num; + +// for (let j = 0; j < num; j++) { +// const val = j * pjs; +// const pos: Vec2 = tmpRects[i].clone(); +// if (i == 0) { +// pos.y += val; +// if (num > 4) { +// pos.x -= Math.abs(Util.randomNumber(pos.x, pos.x - 100)); +// } +// } else if (i == 1) { +// pos.x += val; +// if (num > 4) { +// pos.y += Util.randomNumber(pos.y, pos.y + 100); +// } +// } else if (i == 2) { +// pos.y -= val; +// if (num > 4) { +// pos.x += Util.randomNumber(pos.x, pos.x + 100); +// } +// } else { +// pos.x -= val; +// if (num > 4) { +// pos.y -= Math.abs(Util.randomNumber(pos.y, pos.y - 100)); +// } +// } + +// let obj: IFbMonsterData = Object.create(null); +// obj.pos = pos; +// obj.mid = midArr[m_idx++]; +// obj.fid = fbconf.id; +// this._createList.push(obj); +// } +// } + +// } +// /**创建一个怪物 */ +// private createEnemy() { +// // let cmonster: IFbMonsterData = this._createList.shift(); +// // let mCfg = app.confMgr.conf.monster.getConfById(cmonster.mid); + +// // resLoader.loadRes(BoundNameEnum.subBattle, `monster/${mCfg.model_id}`).then(prefab => { +// // let node: Node = instantiate(prefab); +// // this.node.addChild(node); +// // node.setPosition(cmonster.pos); +// // let enemy: Enemy = node.getComponent(Enemy); + +// // enemy.initial(this.findTarget(cmonster.pos), cmonster); +// // this._enemyList.push(enemy); +// // }) +// } + +// /**找玩家中一个 */ +// findTarget(pos: Vec2) { +// // let p1 = app.gameMgr.player, p2 = app.gameMgr.player2; +// // if (!p2) return p1; +// // return Math.abs(pos.x - p1.node.x) < Math.abs(pos.x - p2.node.x) ? p1 : p2; +// } + +// public getEnemyList() { +// return this._enemyList; +// } + +// /** 怪物回收*/ +// public recycleEnemy(enemy: Enemy) { +// for (let i = this._enemyList.length - 1; i >= 0; i--) { +// const tmpEnemy = this._enemyList[i]; +// if (tmpEnemy == enemy) { +// enemy.node.destroy(); +// this._enemyList.splice(i, 1); +// break; +// } +// } + +// //没有怪物了,但是还未到刷怪时间,强制下一波 +// if (this._enemyList.length == 0 && this._fbArr.length > 0) { +// this._fbArr.sort((fa, fb) => { +// return (fa.tm - fa.curTm) - (fb.tm - fa.curTm); +// }) +// let fb = this._fbArr[0]; +// fb.curTm = fb.tm; +// } +// } +// } + + diff --git a/assets/Scripts/mng/wave.ts.meta b/assets/Scripts/mng/wave.ts.meta new file mode 100644 index 0000000..6a97521 --- /dev/null +++ b/assets/Scripts/mng/wave.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "9786456a-0efa-4c51-9a38-a5715e2597b0", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/Scripts/rolectl.meta b/assets/Scripts/rolectl.meta new file mode 100644 index 0000000..4aa72c3 --- /dev/null +++ b/assets/Scripts/rolectl.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "ad30184e-02c7-41ef-801c-a74d7eca701b", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/assets/Scripts/rolectl/player.ts b/assets/Scripts/rolectl/player.ts new file mode 100644 index 0000000..084c662 --- /dev/null +++ b/assets/Scripts/rolectl/player.ts @@ -0,0 +1,239 @@ +import { Component, instantiate, Node, Prefab, tween, UITransform, v2, v3, Vec2, Vec3, _decorator } from 'cc'; +import WaveMng from '../logics/mng/WaveMng'; +import { monsterCtl } from '../Test/monsterCtl'; +import { snakebody } from './snakebody'; +const { ccclass, property } = _decorator; + +@ccclass('player') +export class player extends Component { + + @property(Prefab) bodyPrefab: Prefab = null + @property(Node) tmpWeapen: Node = null + @property(WaveMng) waveMng: WaveMng = null + + _tmpV2: Vec2 = new Vec2() + _tmpV3: Vec3 = new Vec3(0, 1, 0) + _tmpV32: Vec3 = new Vec3() + dir: Vec3 = new Vec3(0, 1, 0) + bodyNum: number = 8 + sectionLen: number = 38 + speed: number = 3 + snakeArray: Node[]; + + //蛇头走过的点数量 + headPointsNum: number = 0 + // record all points + pointsArray = []; + + _isMove: boolean = false + + monsterList: Array = [] + + + start() { + + this.tmpWeapen.active = false + this.headPointsNum = 0 + this.snakeArray = []; + this.pointsArray = [] + this.snakeArray.push(this.node); + + this.initSnake() + } + + initSnake() { + this.rotateHead() + // return + for (let i = 1; i <= this.bodyNum; i++) { + this.getNewBody(i); + this.recordPoints() + } + console.log("初始化的节点...", this.pointsArray.length, this._recordTimes) + this._recordTimes = 0 + + } + + + rotateHead(headPos: Vec2 = null) { + if (!headPos) { + headPos = new Vec2(this.dir.x, this.dir.y) + } + + let angle = v2(1, 0).signAngle(headPos) * 180 / Math.PI; + this.node.angle = angle - 90; + } + + getNewBody(bodyIdx: number) { + // console.log("this.snakeArray.length ::", this.snakeArray.length) + let newBody = instantiate(this.bodyPrefab); + let snakeCtl = newBody.getComponent(snakebody) + snakeCtl.snakeBodyIdx = 0 + snakeCtl.preSnakeBody = this.snakeArray[this.snakeArray.length - 1] + + // set new body's position //这是第一个蛇身 + if (this.snakeArray.length == 1) { + let dir = this.dir.normalize() + let pos = this.node.getPosition().subtract(dir.multiplyScalar(this.sectionLen)) + newBody.setPosition(pos); + } + else { + let lastBody = this.snakeArray[this.snakeArray.length - 1]; + let lastBOBody = this.snakeArray[this.snakeArray.length - 2]; + lastBody.getPosition(this._tmpV32) + lastBOBody.getPosition(this._tmpV3) + let dir = this._tmpV3.subtract(this._tmpV32).normalize(); + let tmpPos = lastBody.getPosition().subtract(dir.multiplyScalar(this.sectionLen)) + // console.log("tmpPos ::", tmpPos, this.snakeArray.length) + newBody.setPosition(tmpPos); + } + + this.node.parent.insertChild(newBody, 0) + this.snakeArray.push(newBody); + //修改蛇身zidx + // newBody.setSiblingIndex(zIdx) + + + } + + /** + * 记录每两节之间的向量 + */ + _tmpDir: Vec3 = new Vec3() + _recordTimes: number = 0 + recordPoints(idx: number = null) { + // record points between bodies (head is a special body) + if (!idx) { + idx = this.snakeArray.length - 1 + } + let len = 0; + let index = 0; + this._recordTimes++ + let pointNum = Math.ceil(this.sectionLen / this.speed) //当前速度移动完一节身体需要的坐标点数 + let lastBody: Node = this.snakeArray[idx]; + let lastBOBody: Node = this.snakeArray[idx - 1]; + let dir: Vec3 = lastBOBody.getPosition().subtract(lastBody.getPosition()).normalize(); + for (let pIdx = 0; pIdx < pointNum; pIdx++) { + len += this.speed; + this._tmpDir = dir.clone() + let pos: Vec3 = lastBody.getPosition().add(this._tmpDir.multiplyScalar(len)); + this.pointsArray.splice(index, 0, pos); // 每次从数组头部插入(pointNum个)坐标 + index += 1; + } + + } + + changeSpeed(sp: number) { + this.speed = sp + this.pointsArray = [] + this.headPointsNum = 0 + for (let i = 1; i <= this.bodyNum; i++) { + if (this.snakeArray[i].getComponent(snakebody)) + this.snakeArray[i].getComponent(snakebody).reset() + this.recordPoints(i) + } + } + + + _time: number = 0 + _hasChan: boolean = false + update(deltaTime: number) { + // return + this._time += deltaTime + if (this._time > 0.5) { + this.checkAtt() + this._time = 0 + // this.changeSpeed(6) + } + + this._tmpV2.set(this.dir.x, this.dir.y) + this.rotateHead(this._tmpV2) + if (this.dir && this._isMove) { + this.move() + } + + } + + getTmpAttBox(){ + let rect = this.node.getComponent(UITransform).getBoundingBoxToWorld() + //稍微扩大点 + let biger:number = 100 + rect.x -= biger + rect.y -= biger + rect.width += 2 * biger + rect.height += 2 * biger + return rect + } + + /** + * 临时攻击怪物 + */ + checkAtt() { + this.tmpWeapen.setPosition(this.node.getPosition()) + + this.tmpWeapen.scale = Vec3.ZERO + this.tmpWeapen.active = true + tween(this.tmpWeapen).to(0.2, { scale: v3(1, 1, 1) }).call(() => { + this.tmpWeapen.active = false + }).start() + + let killArray = [] + // console.log("this.monsterList::", this.monsterList.length) + + let checkRect = this.getTmpAttBox() //this.node.getComponent(UITransform).getBoundingBoxToWorld() + let checkList = this.waveMng.getTreeColliderList(checkRect) + // console.log("checkList::", checkList) + for (let searchIdx = 0; searchIdx < checkList.length; searchIdx++) { + if (this.node.getPosition().subtract(checkList[searchIdx].collider.getPosition()).lengthSqr() < 22500) { + killArray.push(checkList[searchIdx].collider) + } + } + + for (let rmIdx = killArray.length - 1; rmIdx >= 0; rmIdx--) { + let tMonsterCtl: monsterCtl = killArray[rmIdx].getComponent(monsterCtl) + let uuid = tMonsterCtl.node.uuid + if (tMonsterCtl.hurt()) { + for (let idx = 0; idx < this.monsterList.length; idx++) { + if (this.monsterList[idx].uuid == uuid) { + this.monsterList.splice(idx, 1) + } + } + } + } + } + + setDir(dir) { + // return + this.dir = dir + } + + move(dir: Vec3 = null) { + // return + if (!dir) { + dir = this.dir + } + + let moveV2 = dir.normalize().multiplyScalar(this.speed) + // console.log("蛇头移动距离...", moveV2.length()) + + + //最后动蛇头 + // this.node.getPosition(this._tmpV3) + this.node.setPosition(this.node.getPosition().add(moveV2)) + this.pointsArray.push(this.node.getPosition()); + this.headPointsNum += 1; + + //从第一个蛇身开始运动 + let lastPosIdx = -1 + for (let i = 1; i < this.snakeArray.length; i++) { + let num = Math.floor((this.pointsArray.length - this.headPointsNum) / (this.snakeArray.length - 1) * (this.snakeArray.length - 1 - i)); + let posIdx = num + this.snakeArray[i].getComponent(snakebody).snakeBodyIdx + this.snakeArray[i].setPosition(this.pointsArray[posIdx]); + this.snakeArray[i].getComponent(snakebody).addIdx(); + lastPosIdx = posIdx + // console.log("use idx :: ", num + this.snakeArray[i].getComponent(snakebody).snakeBodyIdx) + } + // console.log("this.pointsArray::", this.pointsArray) + + } +} + diff --git a/assets/Scripts/rolectl/player.ts.meta b/assets/Scripts/rolectl/player.ts.meta new file mode 100644 index 0000000..6dbac53 --- /dev/null +++ b/assets/Scripts/rolectl/player.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "39b2efb2-9835-4908-b520-6d72d1e9a275", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/Scripts/rolectl/rolejoystick.ts b/assets/Scripts/rolectl/rolejoystick.ts new file mode 100644 index 0000000..7d87e81 --- /dev/null +++ b/assets/Scripts/rolectl/rolejoystick.ts @@ -0,0 +1,136 @@ +import { Component, EventTouch, Input, Node, Vec2, Vec3, _decorator } from 'cc'; +import Game from '../Test/Test2'; +const { ccclass, property } = _decorator; + + +const TOUCH_RADIUS = 180; +const ROLE_MOVE_FRAME = 0.2; +const _tempPos = new Vec3(); +const _tempDelta = new Vec2(); +const Horizontal = new Vec2(1, 0); +const MOVE_DELTA = 0.2; + +@ccclass('rolejoystick') +export class rolejoystick extends Component { + + @property(Node) + ctrlSprite: Node = null!; + @property(Node) + moveTagSp: Node = null!; + @property(Node) + role: Node = null!; + @property(Vec3) + originPos = new Vec3(); + + private _isTouch = false; + private _touchPos = new Vec2(); + private _startPos = new Vec2(); + private _movePos = new Vec2(); + private _animComp: Animation = null!; + private _animState = 'idle'; + + // _tempPos: Vec3 = new Vec3() + start() { + this.ctrlSprite.setPosition(this.originPos); + // _tempPos.set(0, 90, 0); + // this.role.eulerAngles = _tempPos; + // this._animComp = this.role.getComponentInChildren(Animation)!; + this.node.on(Input.EventType.TOUCH_START, this.touchStart, this); + this.node.on(Input.EventType.TOUCH_MOVE, this.touchMove, this); + this.node.on(Input.EventType.TOUCH_END, this.touchEnd, this); + } + + onDestroy() { + this.node.off(Input.EventType.TOUCH_START, this.touchStart, this); + this.node.off(Input.EventType.TOUCH_MOVE, this.touchMove, this); + this.node.off(Input.EventType.TOUCH_END, this.touchEnd, this); + } + + touchStart(touch: EventTouch) { + // this.changeState('cocos_anim_run'); + // touch.getUI + touch.getUILocation(this._startPos); + const distance = this._startPos.length(); + console.error("joystick::", touch, distance) + // if (distance < TOUCH_RADIUS) { + this._touchPos.set(this._startPos); + this._movePos.set(this._startPos); + _tempPos.set(this.ctrlSprite.position); + this.ctrlSprite.setWorldPosition(this._startPos.x, this._startPos.y, _tempPos.z); + this._isTouch = true; + // } + } + + touchMove(touch: EventTouch) { + if (!this._isTouch) { + return; + } + + touch.getUILocation(this._movePos); + Vec2.subtract(_tempDelta, this._movePos, this._startPos); + // 计算角色的整体旋转值 + // const deltaRadian = _tempDelta.angle(Horizontal); + // const angle = deltaRadian * 180 / Math.PI; + // const rot = this.role.eulerAngles; + // _tempPos.set(rot.x, 90 + (Math.sign(_tempDelta.y)) * angle, rot.z); + // this.role.eulerAngles = _tempPos; + + // 重新规划移动方向值 + // _tempDelta.multiply2f(MOVE_DELTA, MOVE_DELTA); + // Vec2.add(this._movePos, this._startPos, _tempDelta); + const distance = _tempDelta.length(); + + // 是否超出限制半径 + if (distance > TOUCH_RADIUS) { + + const radian = _tempDelta.angle(Horizontal); + // console.log("radian::", radian) + const x = Math.cos(radian) * TOUCH_RADIUS; + let y = Math.sin(radian) * TOUCH_RADIUS; + if (this._startPos.y >= this._movePos.y) { + y = -y + } + this._movePos.set(x, y).add(this._startPos); + } + + // this.ctrlSprite.setWorldPosition(this._movePos.x, this._movePos.y, 0); + this.moveTagSp.setWorldPosition(this._movePos.x, this._movePos.y, 0); + this._touchPos.set(this._movePos); + } + + touchEnd(touch: EventTouch) { + this._isTouch = false; + // this.changeState('cocos_anim_idle'); + // this.ctrlSprite.setPosition(this.originPos); + // this.moveTagSp.setPosition(this.originPos) + } + + changeState(name: string) { + if (this._animState === name) { + return; + } + + // this._animComp.play(name); + // this._animState = name; + } + + update() { + if (!this._isTouch) { + Game.Instance.Player._isMove = false + return; + } + + // _tempPos.set(0, 0, ROLE_MOVE_FRAME); + // this.role.translate(_tempPos); + if (Game.Instance.Player) { + Game.Instance.Player._isMove = true + Game.Instance.Player.setDir(this.moveTagSp.getPosition().subtract(this.ctrlSprite.getPosition()).normalize()) + } + // Game.Instance.Player.move(this.moveTagSp.getPosition().subtract(this.ctrlSprite.getPosition()).normalize()) + // Game. + } +} + + + + diff --git a/assets/Scripts/rolectl/rolejoystick.ts.meta b/assets/Scripts/rolectl/rolejoystick.ts.meta new file mode 100644 index 0000000..dfb8bb0 --- /dev/null +++ b/assets/Scripts/rolectl/rolejoystick.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "dd6eec7f-57ad-46f6-b5fc-7a4907cdc2e1", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/Scripts/rolectl/snakebody.ts b/assets/Scripts/rolectl/snakebody.ts new file mode 100644 index 0000000..61c76df --- /dev/null +++ b/assets/Scripts/rolectl/snakebody.ts @@ -0,0 +1,66 @@ +import { Component, Node, Vec3, _decorator } from 'cc'; +const { ccclass, property } = _decorator; + +@ccclass('snakebody') +export class snakebody extends Component { + + speed: number = 3 + + private _preSnakeBody: Node = null; + public get preSnakeBody(): Node { + return this._preSnakeBody; + } + public set preSnakeBody(value: Node) { + this._preSnakeBody = value; + } + + private _snakeBodyIdx: number = 0; + public get snakeBodyIdx(): number { + return this._snakeBodyIdx; + } + public set snakeBodyIdx(value: number) { + this._snakeBodyIdx = value; + } + + reset() { + this.snakeBodyIdx = 0 + } + + addIdx() { + this.snakeBodyIdx++ + } + + /** + * 获取当前蛇身指向前一个蛇身的dir + */ + _tmpVec: Vec3 = new Vec3(0, 1, 0) + getPreDir() { + // return this.preSnakeBody.getPosition().subtract(this.node.getPosition()).normalize() + // return this.preSnakeBody.getPosition().subtract(this.node.getPosition()) + console.log("this.preSnakeBody.getPosition() ::", this.preSnakeBody.getPosition()) + return this.node.getPosition().subtract(this.preSnakeBody.getPosition()) + } + + + start() { + + } + + update(deltaTime: number) { + + } + + _tmpV3: Vec3 = new Vec3() + move(length: number = null) { + let moveV2 = this.getPreDir()//.multiplyScalar(1 / this.speed) + + + // console.log("蛇身移动的距离...", moveV2.length()) + Vec3.lerp(this._tmpV3, this.node.getPosition(), this.preSnakeBody.getPosition().add(moveV2), 0.5) + console.log("........:", moveV2, this._tmpV3) + this.node.setPosition(this._tmpV3) + // this.node.setPosition(this.node.getPosition().add(moveV2)) + } +} + + diff --git a/assets/Scripts/rolectl/snakebody.ts.meta b/assets/Scripts/rolectl/snakebody.ts.meta new file mode 100644 index 0000000..3e16f43 --- /dev/null +++ b/assets/Scripts/rolectl/snakebody.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "285cabaf-7adc-4f7c-9950-771d5e8abc2d", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/Scripts/ui.meta b/assets/Scripts/ui.meta new file mode 100644 index 0000000..0f94975 --- /dev/null +++ b/assets/Scripts/ui.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "69be3a35-cbac-416c-9ed9-30a19ee1a670", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/assets/animation.meta b/assets/animation.meta new file mode 100644 index 0000000..309a231 --- /dev/null +++ b/assets/animation.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "ee1ea724-146d-41c2-bfb1-0987716e332e", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/assets/animation/monster_0.anim b/assets/animation/monster_0.anim new file mode 100644 index 0000000..4f40320 --- /dev/null +++ b/assets/animation/monster_0.anim @@ -0,0 +1,88 @@ +[ + { + "__type__": "cc.AnimationClip", + "_name": "monster_0", + "_objFlags": 0, + "__editorExtras__": { + "embeddedPlayerGroups": [] + }, + "_native": "", + "sample": 4, + "speed": 1, + "wrapMode": 2, + "enableTrsBlending": false, + "_duration": 1.25, + "_hash": 500763545, + "_tracks": [ + { + "__id__": 1 + } + ], + "_exoticAnimation": null, + "_events": [], + "_embeddedPlayers": [] + }, + { + "__type__": "cc.animation.ObjectTrack", + "_binding": { + "__type__": "cc.animation.TrackBinding", + "path": { + "__id__": 2 + } + }, + "_channel": { + "__id__": 4 + } + }, + { + "__type__": "cc.animation.TrackPath", + "_paths": [ + { + "__id__": 3 + }, + "spriteFrame" + ] + }, + { + "__type__": "cc.animation.ComponentPath", + "component": "cc.Sprite" + }, + { + "__type__": "cc.animation.Channel", + "_curve": { + "__id__": 5 + } + }, + { + "__type__": "cc.ObjectCurve", + "_times": [ + 0, + 0.25, + 0.5, + 0.75, + 1 + ], + "_values": [ + { + "__uuid__": "3b94c7fc-ac9b-47d7-9aca-37fc7683996a@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + { + "__uuid__": "c0d07a24-a091-4225-8876-c69d520ef479@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + { + "__uuid__": "8b8e7ea8-69ee-44ce-831b-ab570e83a271@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + { + "__uuid__": "11127c25-31b7-49c5-9bf5-9ac030ca13eb@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + { + "__uuid__": "c2706816-4f7f-43d5-bf5f-c5f42328efc0@f9941", + "__expectedType__": "cc.SpriteFrame" + } + ] + } +] \ No newline at end of file diff --git a/assets/animation/monster_0.anim.meta b/assets/animation/monster_0.anim.meta new file mode 100644 index 0000000..01105b6 --- /dev/null +++ b/assets/animation/monster_0.anim.meta @@ -0,0 +1,13 @@ +{ + "ver": "2.0.3", + "importer": "animation-clip", + "imported": true, + "uuid": "3732ff9b-e2c3-49ce-90e9-ada8be3cb96f", + "files": [ + ".cconb" + ], + "subMetas": {}, + "userData": { + "name": "monster_0" + } +} diff --git a/assets/animation/monster_1.anim b/assets/animation/monster_1.anim new file mode 100644 index 0000000..032009a --- /dev/null +++ b/assets/animation/monster_1.anim @@ -0,0 +1,88 @@ +[ + { + "__type__": "cc.AnimationClip", + "_name": "monster_1", + "_objFlags": 0, + "__editorExtras__": { + "embeddedPlayerGroups": [] + }, + "_native": "", + "sample": 4, + "speed": 1, + "wrapMode": 2, + "enableTrsBlending": false, + "_duration": 1.25, + "_hash": 500763545, + "_tracks": [ + { + "__id__": 1 + } + ], + "_exoticAnimation": null, + "_events": [], + "_embeddedPlayers": [] + }, + { + "__type__": "cc.animation.ObjectTrack", + "_binding": { + "__type__": "cc.animation.TrackBinding", + "path": { + "__id__": 2 + } + }, + "_channel": { + "__id__": 4 + } + }, + { + "__type__": "cc.animation.TrackPath", + "_paths": [ + { + "__id__": 3 + }, + "spriteFrame" + ] + }, + { + "__type__": "cc.animation.ComponentPath", + "component": "cc.Sprite" + }, + { + "__type__": "cc.animation.Channel", + "_curve": { + "__id__": 5 + } + }, + { + "__type__": "cc.ObjectCurve", + "_times": [ + 0, + 0.25, + 0.5, + 0.75, + 1 + ], + "_values": [ + { + "__uuid__": "fd098eb2-c17a-44f9-b3b5-84e4de3a0a24@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + { + "__uuid__": "35e74055-4977-4ab5-9fd2-cd5032652ef1@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + { + "__uuid__": "67783030-db2f-449e-bc2b-ed77d4655024@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + { + "__uuid__": "1267c1fd-bfa8-49ac-b628-27b56bcbe2da@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + { + "__uuid__": "cd61c842-1375-4520-88e9-57082fb22906@f9941", + "__expectedType__": "cc.SpriteFrame" + } + ] + } +] \ No newline at end of file diff --git a/assets/animation/monster_1.anim.meta b/assets/animation/monster_1.anim.meta new file mode 100644 index 0000000..fc3d714 --- /dev/null +++ b/assets/animation/monster_1.anim.meta @@ -0,0 +1,13 @@ +{ + "ver": "2.0.3", + "importer": "animation-clip", + "imported": true, + "uuid": "b56c7e2b-40cd-4383-b119-1923658d8346", + "files": [ + ".cconb" + ], + "subMetas": {}, + "userData": { + "name": "monster_1" + } +} diff --git a/assets/animation/nvwushen.anim b/assets/animation/nvwushen.anim new file mode 100644 index 0000000..4d96d35 --- /dev/null +++ b/assets/animation/nvwushen.anim @@ -0,0 +1,93 @@ +[ + { + "__type__": "cc.AnimationClip", + "_name": "nvwushen", + "_objFlags": 0, + "__editorExtras__": { + "embeddedPlayerGroups": [] + }, + "_native": "", + "sample": 4, + "speed": 1, + "wrapMode": 2, + "enableTrsBlending": false, + "_duration": 1.5, + "_hash": 500763545, + "_tracks": [ + { + "__id__": 1 + } + ], + "_exoticAnimation": null, + "_events": [], + "_embeddedPlayers": [] + }, + { + "__type__": "cc.animation.ObjectTrack", + "_binding": { + "__type__": "cc.animation.TrackBinding", + "path": { + "__id__": 2 + } + }, + "_channel": { + "__id__": 4 + } + }, + { + "__type__": "cc.animation.TrackPath", + "_paths": [ + { + "__id__": 3 + }, + "spriteFrame" + ] + }, + { + "__type__": "cc.animation.ComponentPath", + "component": "cc.Sprite" + }, + { + "__type__": "cc.animation.Channel", + "_curve": { + "__id__": 5 + } + }, + { + "__type__": "cc.ObjectCurve", + "_times": [ + 0, + 0.25, + 0.5, + 0.75, + 1, + 1.25 + ], + "_values": [ + { + "__uuid__": "9692ee99-e3c7-4f0c-880d-a032db0e6b67@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + { + "__uuid__": "2c08ba63-fa76-4d1d-8fdb-a35c63ff0496@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + { + "__uuid__": "3ef20986-f554-4baf-86e2-d0b932033888@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + { + "__uuid__": "1faee88b-b515-42df-8125-81a93776030e@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + { + "__uuid__": "7124ab51-3354-481b-b436-7aa7a308b6c0@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + { + "__uuid__": "8d901387-39c2-4630-a746-acebb4a6d7b1@f9941", + "__expectedType__": "cc.SpriteFrame" + } + ] + } +] \ No newline at end of file diff --git a/assets/animation/nvwushen.anim.meta b/assets/animation/nvwushen.anim.meta new file mode 100644 index 0000000..130c83b --- /dev/null +++ b/assets/animation/nvwushen.anim.meta @@ -0,0 +1,13 @@ +{ + "ver": "2.0.3", + "importer": "animation-clip", + "imported": true, + "uuid": "9ed9e8c3-7532-447e-97d3-bc1ae4e19f22", + "files": [ + ".cconb" + ], + "subMetas": {}, + "userData": { + "name": "nvwushen" + } +} diff --git a/assets/res.meta b/assets/res.meta new file mode 100644 index 0000000..98be512 --- /dev/null +++ b/assets/res.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "be13c1c7-cbfa-4c9e-a904-fa1cb22f01ae", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/assets/res/shader.meta b/assets/res/shader.meta new file mode 100644 index 0000000..c1e86ae --- /dev/null +++ b/assets/res/shader.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "a4806935-3922-4d1a-b5e4-061a8719221b", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/assets/resources.meta b/assets/resources.meta new file mode 100644 index 0000000..cc02853 --- /dev/null +++ b/assets/resources.meta @@ -0,0 +1,15 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "ef14c052-6303-4e90-b227-5eb038495010", + "files": [], + "subMetas": {}, + "userData": { + "isBundle": true, + "bundleName": "resources", + "priority": 8, + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/assets/resources/Image.meta b/assets/resources/Image.meta new file mode 100644 index 0000000..dbd4eab --- /dev/null +++ b/assets/resources/Image.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "5dccb540-29c6-4f42-ab7e-be8d6ea855bc", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/assets/resources/Image/role.meta b/assets/resources/Image/role.meta new file mode 100644 index 0000000..a447235 --- /dev/null +++ b/assets/resources/Image/role.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "810304bb-6659-4736-b0a4-484b1e72dabe", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/assets/resources/Image/role/女武神.meta b/assets/resources/Image/role/女武神.meta new file mode 100644 index 0000000..1dea0f0 --- /dev/null +++ b/assets/resources/Image/role/女武神.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "2ad25d4a-d6d6-4a16-bd14-28825d065813", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/assets/resources/Image/role/女武神/nws-move_0.png b/assets/resources/Image/role/女武神/nws-move_0.png new file mode 100644 index 0000000000000000000000000000000000000000..792ee3178b47c734ead653197457f3eadb1b0d21 GIT binary patch literal 16860 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 XIwB?n)Yu2@00000NkvXXu0mjfqx9yR literal 0 HcmV?d00001 diff --git a/assets/resources/Image/role/女武神/nws-move_12.png.meta b/assets/resources/Image/role/女武神/nws-move_12.png.meta new file mode 100644 index 0000000..f558c19 --- /dev/null +++ b/assets/resources/Image/role/女武神/nws-move_12.png.meta @@ -0,0 +1,162 @@ +{ + "ver": "1.0.25", + "importer": "image", + "imported": true, + "uuid": "2c08ba63-fa76-4d1d-8fdb-a35c63ff0496", + "files": [ + ".json", + ".png" + ], + "subMetas": { + "nws-move_12": { + "ver": "1.0.4", + "uuid": "a1fedad8-7b9d-4cfe-9932-28a657e172da", + "rawTextureUuid": "2c08ba63-fa76-4d1d-8fdb-a35c63ff0496", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 4, + "offsetY": -2.5, + "trimX": 9, + "trimY": 5, + "width": 117, + "height": 147, + "rawWidth": 127, + "rawHeight": 152, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "subMetas": {}, + "importer": "*", + "imported": false, + "files": [], + "userData": {}, + "displayName": "", + "id": "", + "name": "" + }, + "6c48a": { + "importer": "texture", + "uuid": "2c08ba63-fa76-4d1d-8fdb-a35c63ff0496@6c48a", + "displayName": "nws-move_12", + "id": "6c48a", + "name": "texture", + "userData": { + "wrapModeS": "clamp-to-edge", + "wrapModeT": "clamp-to-edge", + "imageUuidOrDatabaseUri": "2c08ba63-fa76-4d1d-8fdb-a35c63ff0496", + "isUuid": true, + "visible": false, + "minfilter": "linear", + "magfilter": "linear", + "mipfilter": "none", + "anisotropy": 0 + }, + "ver": "1.0.22", + "imported": true, + "files": [ + ".json" + ], + "subMetas": {} + }, + "f9941": { + "importer": "sprite-frame", + "uuid": "2c08ba63-fa76-4d1d-8fdb-a35c63ff0496@f9941", + "displayName": "nws-move_12", + "id": "f9941", + "name": "spriteFrame", + "userData": { + "trimType": "none", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 0, + "width": 127, + "height": 152, + "rawWidth": 127, + "rawHeight": 152, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "packable": true, + "pixelsToUnit": 100, + "pivotX": 0.5, + "pivotY": 0.5, + "meshType": 0, + "vertices": { + "rawPosition": [ + -63.5, + -76, + 0, + 63.5, + -76, + 0, + -63.5, + 76, + 0, + 63.5, + 76, + 0 + ], + "indexes": [ + 0, + 1, + 2, + 2, + 1, + 3 + ], + "uv": [ + 0, + 152, + 127, + 152, + 0, + 0, + 127, + 0 + ], + "nuv": [ + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 1 + ], + "minPos": [ + -63.5, + -76, + 0 + ], + "maxPos": [ + 63.5, + 76, + 0 + ] + }, + "isUuid": true, + "imageUuidOrDatabaseUri": "2c08ba63-fa76-4d1d-8fdb-a35c63ff0496@6c48a", + "atlasUuid": "" + }, + "ver": "1.0.11", + "imported": true, + "files": [ + ".json" + ], + "subMetas": {} + } + }, + "userData": { + "type": "sprite-frame", + "fixAlphaTransparencyArtifacts": true, + "hasAlpha": true, + "redirect": "2c08ba63-fa76-4d1d-8fdb-a35c63ff0496@f9941" + } +} diff --git a/assets/resources/Image/role/女武神/nws-move_16.png b/assets/resources/Image/role/女武神/nws-move_16.png new file mode 100644 index 0000000000000000000000000000000000000000..a439056809cfe8b612de10f8932552c00e990424 GIT binary patch literal 17004 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 P00000NkvXXu0mjfMme_X literal 0 HcmV?d00001 diff --git a/assets/resources/Image/role/女武神/nws-move_16.png.meta b/assets/resources/Image/role/女武神/nws-move_16.png.meta new file mode 100644 index 0000000..af84322 --- /dev/null +++ b/assets/resources/Image/role/女武神/nws-move_16.png.meta @@ -0,0 +1,162 @@ +{ + "ver": "1.0.25", + "importer": "image", + "imported": true, + "uuid": "3ef20986-f554-4baf-86e2-d0b932033888", + "files": [ + ".json", + ".png" + ], + "subMetas": { + "nws-move_16": { + "ver": "1.0.4", + "uuid": "dd5dab88-cbab-4001-864c-8ff5a4d3ab49", + "rawTextureUuid": "3ef20986-f554-4baf-86e2-d0b932033888", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 3, + "offsetY": -2, + "trimX": 11, + "trimY": 5, + "width": 111, + "height": 146, + "rawWidth": 127, + "rawHeight": 152, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "subMetas": {}, + "importer": "*", + "imported": false, + "files": [], + "userData": {}, + "displayName": "", + "id": "", + "name": "" + }, + "6c48a": { + "importer": "texture", + "uuid": "3ef20986-f554-4baf-86e2-d0b932033888@6c48a", + "displayName": "nws-move_16", + "id": "6c48a", + "name": "texture", + "userData": { + "wrapModeS": "clamp-to-edge", + "wrapModeT": "clamp-to-edge", + "imageUuidOrDatabaseUri": "3ef20986-f554-4baf-86e2-d0b932033888", + "isUuid": true, + "visible": false, + "minfilter": "linear", + "magfilter": "linear", + "mipfilter": "none", + "anisotropy": 0 + }, + "ver": "1.0.22", + "imported": true, + "files": [ + ".json" + ], + "subMetas": {} + }, + "f9941": { + "importer": "sprite-frame", + "uuid": "3ef20986-f554-4baf-86e2-d0b932033888@f9941", + "displayName": "nws-move_16", + "id": "f9941", + "name": "spriteFrame", + "userData": { + "trimType": "none", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 0, + "width": 127, + "height": 152, + "rawWidth": 127, + "rawHeight": 152, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "packable": true, + "pixelsToUnit": 100, + "pivotX": 0.5, + "pivotY": 0.5, + "meshType": 0, + "vertices": { + "rawPosition": [ + -63.5, + -76, + 0, + 63.5, + -76, + 0, + -63.5, + 76, + 0, + 63.5, + 76, + 0 + ], + "indexes": [ + 0, + 1, + 2, + 2, + 1, + 3 + ], + "uv": [ + 0, + 152, + 127, + 152, + 0, + 0, + 127, + 0 + ], + "nuv": [ + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 1 + ], + "minPos": [ + -63.5, + -76, + 0 + ], + "maxPos": [ + 63.5, + 76, + 0 + ] + }, + "isUuid": true, + "imageUuidOrDatabaseUri": "3ef20986-f554-4baf-86e2-d0b932033888@6c48a", + "atlasUuid": "" + }, + "ver": "1.0.11", + "imported": true, + "files": [ + ".json" + ], + "subMetas": {} + } + }, + "userData": { + "type": "sprite-frame", + "fixAlphaTransparencyArtifacts": true, + "hasAlpha": true, + "redirect": "3ef20986-f554-4baf-86e2-d0b932033888@f9941" + } +} diff --git a/assets/resources/Image/role/女武神/nws-move_20.png b/assets/resources/Image/role/女武神/nws-move_20.png new file mode 100644 index 0000000000000000000000000000000000000000..a74217b587f036b984a04c4bc9341c5fdeaa75e8 GIT binary patch literal 16797 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 literal 0 HcmV?d00001 diff --git a/assets/resources/Image/role/女武神/nws-move_4.png.meta b/assets/resources/Image/role/女武神/nws-move_4.png.meta new file mode 100644 index 0000000..ef6b1d6 --- /dev/null +++ b/assets/resources/Image/role/女武神/nws-move_4.png.meta @@ -0,0 +1,162 @@ +{ + "ver": "1.0.25", + "importer": "image", + "imported": true, + "uuid": "7124ab51-3354-481b-b436-7aa7a308b6c0", + "files": [ + ".json", + ".png" + ], + "subMetas": { + "nws-move_4": { + "ver": "1.0.4", + "uuid": "34e741ac-4bbd-4088-ba83-7a2c5d7a86f8", + "rawTextureUuid": "7124ab51-3354-481b-b436-7aa7a308b6c0", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": -3, + "offsetY": -4, + "trimX": 2, + "trimY": 9, + "width": 117, + "height": 142, + "rawWidth": 127, + "rawHeight": 152, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "subMetas": {}, + "importer": "*", + "imported": false, + "files": [], + "userData": {}, + "displayName": "", + "id": "", + "name": "" + }, + "6c48a": { + "importer": "texture", + "uuid": "7124ab51-3354-481b-b436-7aa7a308b6c0@6c48a", + "displayName": "nws-move_4", + "id": "6c48a", + "name": "texture", + "userData": { + "wrapModeS": "clamp-to-edge", + "wrapModeT": "clamp-to-edge", + "imageUuidOrDatabaseUri": "7124ab51-3354-481b-b436-7aa7a308b6c0", + "isUuid": true, + "visible": false, + "minfilter": "linear", + "magfilter": "linear", + "mipfilter": "none", + "anisotropy": 0 + }, + "ver": "1.0.22", + "imported": true, + "files": [ + ".json" + ], + "subMetas": {} + }, + "f9941": { + "importer": "sprite-frame", + "uuid": "7124ab51-3354-481b-b436-7aa7a308b6c0@f9941", + "displayName": "nws-move_4", + "id": "f9941", + "name": "spriteFrame", + "userData": { + "trimType": "none", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 0, + "width": 127, + "height": 152, + "rawWidth": 127, + "rawHeight": 152, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "packable": true, + "pixelsToUnit": 100, + "pivotX": 0.5, + "pivotY": 0.5, + "meshType": 0, + "vertices": { + "rawPosition": [ + -63.5, + -76, + 0, + 63.5, + -76, + 0, + -63.5, + 76, + 0, + 63.5, + 76, + 0 + ], + "indexes": [ + 0, + 1, + 2, + 2, + 1, + 3 + ], + "uv": [ + 0, + 152, + 127, + 152, + 0, + 0, + 127, + 0 + ], + "nuv": [ + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 1 + ], + "minPos": [ + -63.5, + -76, + 0 + ], + "maxPos": [ + 63.5, + 76, + 0 + ] + }, + "isUuid": true, + "imageUuidOrDatabaseUri": "7124ab51-3354-481b-b436-7aa7a308b6c0@6c48a", + "atlasUuid": "" + }, + "ver": "1.0.11", + "imported": true, + "files": [ + ".json" + ], + "subMetas": {} + } + }, + "userData": { + "type": "sprite-frame", + "fixAlphaTransparencyArtifacts": true, + "hasAlpha": true, + "redirect": "7124ab51-3354-481b-b436-7aa7a308b6c0@f9941" + } +} diff --git a/assets/resources/Image/role/女武神/nws-move_8.png b/assets/resources/Image/role/女武神/nws-move_8.png new file mode 100644 index 0000000000000000000000000000000000000000..f521fcc02de6832a206ee328c4016b861323cd5b GIT binary patch literal 16840 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

46d_>xl{$x`VVCKFs<6BR2gw}xGIqbUU57_K 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 Uzj;vMjsO4v07*qoM6N<$f>|UdUjP6A literal 0 HcmV?d00001 diff --git a/assets/resources/Image/role/鹰怪物/棕色/ygw-animation_0.png.meta b/assets/resources/Image/role/鹰怪物/棕色/ygw-animation_0.png.meta new file mode 100644 index 0000000..9d69197 --- /dev/null +++ b/assets/resources/Image/role/鹰怪物/棕色/ygw-animation_0.png.meta @@ -0,0 +1,162 @@ +{ + "ver": "1.0.25", + "importer": "image", + "imported": true, + "uuid": "3b94c7fc-ac9b-47d7-9aca-37fc7683996a", + "files": [ + ".json", + ".png" + ], + "subMetas": { + "ygw-animation_0": { + "ver": "1.0.4", + "uuid": "8717716c-bf93-4cfb-bfaf-f157b1cfaf90", + "rawTextureUuid": "3b94c7fc-ac9b-47d7-9aca-37fc7683996a", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": -1.5, + "offsetY": -14.5, + "trimX": 3, + "trimY": 29, + "width": 105, + "height": 81, + "rawWidth": 114, + "rawHeight": 110, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "subMetas": {}, + "importer": "*", + "imported": false, + "files": [], + "userData": {}, + "displayName": "", + "id": "", + "name": "" + }, + "6c48a": { + "importer": "texture", + "uuid": "3b94c7fc-ac9b-47d7-9aca-37fc7683996a@6c48a", + "displayName": "ygw-animation_0", + "id": "6c48a", + "name": "texture", + "userData": { + "wrapModeS": "clamp-to-edge", + "wrapModeT": "clamp-to-edge", + "imageUuidOrDatabaseUri": "3b94c7fc-ac9b-47d7-9aca-37fc7683996a", + "isUuid": true, + "visible": false, + "minfilter": "linear", + "magfilter": "linear", + "mipfilter": "none", + "anisotropy": 0 + }, + "ver": "1.0.22", + "imported": true, + "files": [ + ".json" + ], + "subMetas": {} + }, + "f9941": { + "importer": "sprite-frame", + "uuid": "3b94c7fc-ac9b-47d7-9aca-37fc7683996a@f9941", + "displayName": "ygw-animation_0", + "id": "f9941", + "name": "spriteFrame", + "userData": { + "trimType": "none", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 0, + "width": 114, + "height": 110, + "rawWidth": 114, + "rawHeight": 110, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "packable": true, + "pixelsToUnit": 100, + "pivotX": 0.5, + "pivotY": 0.5, + "meshType": 0, + "vertices": { + "rawPosition": [ + -57, + -55, + 0, + 57, + -55, + 0, + -57, + 55, + 0, + 57, + 55, + 0 + ], + "indexes": [ + 0, + 1, + 2, + 2, + 1, + 3 + ], + "uv": [ + 0, + 110, + 114, + 110, + 0, + 0, + 114, + 0 + ], + "nuv": [ + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 1 + ], + "minPos": [ + -57, + -55, + 0 + ], + "maxPos": [ + 57, + 55, + 0 + ] + }, + "isUuid": true, + "imageUuidOrDatabaseUri": "3b94c7fc-ac9b-47d7-9aca-37fc7683996a@6c48a", + "atlasUuid": "" + }, + "ver": "1.0.11", + "imported": true, + "files": [ + ".json" + ], + "subMetas": {} + } + }, + "userData": { + "type": "sprite-frame", + "fixAlphaTransparencyArtifacts": true, + "hasAlpha": true, + "redirect": "3b94c7fc-ac9b-47d7-9aca-37fc7683996a@f9941" + } +} diff --git a/assets/resources/Image/role/鹰怪物/棕色/ygw-animation_12.png b/assets/resources/Image/role/鹰怪物/棕色/ygw-animation_12.png new file mode 100644 index 0000000000000000000000000000000000000000..94acbcdf619a841e26b2c13079d44df35ffc72dd GIT binary patch literal 8595 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 a!wYCaH+K1b&Hf9jz^N!`%Gb+Uh5rwR&>VjN literal 0 HcmV?d00001 diff --git a/assets/resources/Image/role/鹰怪物/棕色/ygw-animation_9.png.meta b/assets/resources/Image/role/鹰怪物/棕色/ygw-animation_9.png.meta new file mode 100644 index 0000000..ae46fb1 --- /dev/null +++ b/assets/resources/Image/role/鹰怪物/棕色/ygw-animation_9.png.meta @@ -0,0 +1,162 @@ +{ + "ver": "1.0.25", + "importer": "image", + "imported": true, + "uuid": "c2706816-4f7f-43d5-bf5f-c5f42328efc0", + "files": [ + ".json", + ".png" + ], + "subMetas": { + "ygw-animation_9": { + "ver": "1.0.4", + "uuid": "e35051ca-a1fa-45a8-9e9f-9fe6c2a0dd7f", + "rawTextureUuid": "c2706816-4f7f-43d5-bf5f-c5f42328efc0", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": -4.5, + "offsetY": -17, + "trimX": 10, + "trimY": 35, + "width": 85, + "height": 74, + "rawWidth": 114, + "rawHeight": 110, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "subMetas": {}, + "importer": "*", + "imported": false, + "files": [], + "userData": {}, + "displayName": "", + "id": "", + "name": "" + }, + "6c48a": { + "importer": "texture", + "uuid": "c2706816-4f7f-43d5-bf5f-c5f42328efc0@6c48a", + "displayName": "ygw-animation_9", + "id": "6c48a", + "name": "texture", + "userData": { + "wrapModeS": "clamp-to-edge", + "wrapModeT": "clamp-to-edge", + "imageUuidOrDatabaseUri": "c2706816-4f7f-43d5-bf5f-c5f42328efc0", + "isUuid": true, + "visible": false, + "minfilter": "linear", + "magfilter": "linear", + "mipfilter": "none", + "anisotropy": 0 + }, + "ver": "1.0.22", + "imported": true, + "files": [ + ".json" + ], + "subMetas": {} + }, + "f9941": { + "importer": "sprite-frame", + "uuid": "c2706816-4f7f-43d5-bf5f-c5f42328efc0@f9941", + "displayName": "ygw-animation_9", + "id": "f9941", + "name": "spriteFrame", + "userData": { + "trimType": "none", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 0, + "width": 114, + "height": 110, + "rawWidth": 114, + "rawHeight": 110, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "packable": true, + "pixelsToUnit": 100, + "pivotX": 0.5, + "pivotY": 0.5, + "meshType": 0, + "vertices": { + "rawPosition": [ + -57, + -55, + 0, + 57, + -55, + 0, + -57, + 55, + 0, + 57, + 55, + 0 + ], + "indexes": [ + 0, + 1, + 2, + 2, + 1, + 3 + ], + "uv": [ + 0, + 110, + 114, + 110, + 0, + 0, + 114, + 0 + ], + "nuv": [ + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 1 + ], + "minPos": [ + -57, + -55, + 0 + ], + "maxPos": [ + 57, + 55, + 0 + ] + }, + "isUuid": true, + "imageUuidOrDatabaseUri": "c2706816-4f7f-43d5-bf5f-c5f42328efc0@6c48a", + "atlasUuid": "" + }, + "ver": "1.0.11", + "imported": true, + "files": [ + ".json" + ], + "subMetas": {} + } + }, + "userData": { + "type": "sprite-frame", + "fixAlphaTransparencyArtifacts": true, + "hasAlpha": true, + "redirect": "c2706816-4f7f-43d5-bf5f-c5f42328efc0@f9941" + } +} diff --git a/assets/resources/Image/role/鹰怪物/蓝色.meta b/assets/resources/Image/role/鹰怪物/蓝色.meta new file mode 100644 index 0000000..9997137 --- /dev/null +++ b/assets/resources/Image/role/鹰怪物/蓝色.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "98edaa8d-9631-4092-b3e7-03dd9567b86c", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/assets/resources/Image/role/鹰怪物/蓝色/ygw-animation_0.png b/assets/resources/Image/role/鹰怪物/蓝色/ygw-animation_0.png new file mode 100644 index 0000000000000000000000000000000000000000..425286257fc9cc55240f204f53425dbee03a0f25 GIT binary patch literal 9313 zcmV-nB%a%eP)gW7)cXf4j z&;R}RyWhS4{Yw@w+Xc}q<`9@bn#}~#Y$lLqGl4XLG@A*e*-RkKW&&vfX*Lr`vzb7e z%>>eHCXgnOW;1~_n+c@ZOdw4l&1M2=HWNs*nLwIAn#}~#Y$lLqGl4Xl38V?6+0IWO zw{PEWz2}~LJmGLytQ^v@7qFMGtJwKU=djzbi{)#KEST9M^H9RlWiJ}NR&nrAw1~|boE%Jh-X{uAv6(@nGs!AJv zCg^f{Euz(C{1U{J;|YEK4dc$S*N8|q1%*<+a^{=-hEqPHX*#HCS=Kb|0KVLVefk0d zl&=_xj>bdJ-Dp6;q?G!RRj_|Z5CkZe3cwY)PnMwc(7OVX<2V|izruct)9DuL>zcq} zcY~&D3<{17y$*`1;2^6NJLDi#-wJNGkG;kTz`Ak1P8Y3Qn+G2I*GX$cw!a``5b-cqxkv}eCsvrv5J+J&o}hY;#$$-{5TaIO~IyQAP|T@ z@W2C2UESRmJDt9(95&zD>Y4@+MH@^^4keSxM83rS+;{IIU%ic&fW5)D3Ac@8@F`g5op=PJkXp?l$~lc3F?C-4>!1Q9HPg?)#B zkE*6Yxm<$b(PNNF$6;!ESGKn-huWGDWV1;a7(P5Ja<=;=DfajuD|YV3K9@*D@7%TfspURz z6<=Ll&%4m#MA6E?Fs!cPCJ{v5A|ME2#a?*^485%=W!A}hi6%AOu(H=*Yxp^VU6;BA zCkss)o7Dk!n+u;ip{rv#SaEiaPMm;DCQ*g`mdWriJ%0k{!MD4+yZ80>_Lj~;@Mt)! z2w)?}sdXB!e$y`6FQ*CH7;J-VE(3BQcUiflT-MRL0=%AToV+^BMkZl$x^FU_ihrwI zEdS))iXHNK9uhAePmSH-u!pmm)SRLzYQ7+IQ{fQ?j%c+a)w;m%uK_FiM6$$rDuh#% zk;Q@*hDer5C1zE03R#)WYG0{i44PS?z#*^-$oV2jNV^(-z-D#gcX^PCT=+*; zL9ng`TACKJ^Xf*A!?ELgKAO*GbK~RVKgF-ySE1UoZh1{jO}1<{Ym*f@g!H*k1NEyo z5jQw+a<(-u0l&8z-9!oho(^!i{OE23bTvshKDaj$PlOXVo+TXXZ?rbIJ~1>j^sZIw z6>g{ZYSCtEwObu^_yzukV0)-kl0`)=a>ZhS`8SJ2L@Ti|8q_OOj^`|lB6T`~0H82| zVxd4H1zb)))YrA4bvc;DIqXgZOPyL2W|d+4Eugj_BsKKtxJ>*G)VN4>71C3*3pp=jIT+G>$>RZu9=M#^3VmaCj(! zuD|?tAifolH~ajxf7aQ))I!wea5#ZOD?$3g!80a00g3-(mdSzP%M5GePFf~)MJX~d zL(Pg7NFdV;Bw(pCU5dalR@MwR%L^7}v2J%2zP2EhI_VE(=1sumkcQ~GcBI-ePJlAL z*BI)ciC{T=R9PC0PJIW(kc-9^d%8jl@1b6?htS`7zx~~Bd+O?%YqFVa3$O8?#R<7w zMYa*FA~c7(psu=Aw~7wVVzEO$FGG0xD2li6SRy^0DXT@^?ezTIE_z=~r(;7UIiATR z<9~7-DZ~>qd{bjPR0XO*mL(j>Jc4CmRz?2M@O$_uSXn3`qmq;`lqlkPDhZ#8?Wjn7 zL>E<6^^681(J@A^M3>yWdd2IIWeQB#2<(`J0qH~Vo!}+2v~eavD^<3=W!P zNVP;sG(oDXgRpAl#c-@=Ps7aY`1jEtQ~Y%w_9S-Yzd1~yaI8h+v^JGfZ@2K44Wq;3 z#fgz=4qb-muz9%#^nK(843%!dNvCPa)C`x&#P~>j6h)#mj_2N16)ldWwhMnoFZQVlpnp^oUE<1esVoYbun_rXBM5Mv z%i(UJ-|R*9sPfg?s{Hlf!-*&GA|z6?IB}=Y`f?CY&CcZunHYV-P?P3Bc*u5p`s&SBu2QXG>*SGQwc>7fMk( zS_zRNXEH_iua(EYK_LDI`pGW4!zKE>ezX8LS`E>m&7eij2t82KG5|HCJvvSTCZ8`L z;ANIHAZ6-yd01>jAkyn(D#qxN-X}{`6%|+piBv6#DWq19%LhhgqsZP@RFz$md1MvP z&qNS>9sz7*=Tip6jaIsR=|#*B<78Cu*yj;!;<^8eeYD~`3vUHnr8i-3#C`+*No$-Q z4>UBiG}fcl&xc1=^mn?(GlrU;8H2&0Lo)uJ6Ge1#7+U=pKf4!u>JNO^8B3b~3Ww{8 z1zjt;T3Z&fbXpeWak*T?ffSiCNWD&;1$t*%}0N5dW^nuoLCV^P&ZN19m_5f5*O> z4munzw0k(YYy_y%=K#7|0mTplGRKmK%#t zvs4?-S_I7xK2H#VKyYx9c-<~Q8p1)7@mPTk8u>$_&W2zMOA*qsN(vFJUtx5uDmuuy zJW_iaeW)G571_`8;dd@syiO$H6rGzv>yK|i6}?4KO6%|vcU97RBr@u;-{x|8Hlqr) zP}0GTzh%{`55VS4mq2G{H}v)O!3#To566!mK}KnWCRC!)*dz=L9aK}Pcm&7fKkyp= zhJE~8T*jgq`@KkH(uEXwz1!_|xLrOT1qC;+=}FNlrJ}@J_$;c|YK$|TwY3d65MB^C zLHGIUpeE43k*b}Z8DTzCun0KF0R+a+tS*-`fQ>}LMhr?op@0!l6;t|;d@uo5DwY_% z5`EKg6f;cGk_JwvQ;JQH=ysl z3nz#VukA;%#H*^xU4Gd|__b@-L32|xtY5bdT3VVgz7QZUYp`%nkE_qeNcucwA13k}Zl zW&vYZU0?u~&|j7bK-~yoD1ksenw%yNRyMihdX=}e4yTDQwDG=^H>BiCF9H{5g$3KuV0xQd@CLoQ3cAD`z-DAN3J{dL#E$F98^ z#Z(X6eeb`(?%gl7Nm|D25SC@#(B(&$rVob_(-p!HD9Nt`I6&?%Ns&1T~)WoJRHPl3OR zRH~K{v@*vOt*$HV$7os^!M3pLkZ7VwLLmVq_vaJwM9&lw&_r3#wG2WHtvI>HFfbn$ zs;e8|;~%>TR;*YF*>nl=$R3pcwOTFU3)q3>EaDskGm(@qzIMSCTh_tGO+Q2Hd;)&_ zCC>E{E(qIpU-Ea+Sb&5aAu>M}4kJ_^TrjzYexgT=cp6k$Zs zu3ZWGA%QlAvKKY4-osA31tp3I3E<&NRio7sXd6OA(eWTf2K; zpyzMLC;Aswd~1!xBD$KJJD{$n5h(R%6|H&^{bV{b$AWtjKNS1f1oBM=h%D3~K+0K0 zx0Fby_))LaDHw~>v=+*-wNHUJRznMgQe_>q#MVD42~jBJSi-%^*KjiJxPRXP^p{>} zZEZqIMX+&HY&I)n2P!wA+%O%(2n!DN^+58O-@rA|3HU@+34Zpwd*LUd3jY7|6Y0R4 zHkUkU>6uK5t=KqS9%gZrt8H&@gH@|nvZb_WB#DAbVTpcPV=ooU?3ymO9VeL;+QeFr z0=3YiZ-66-G}yal;d)7iz9VC>@8w^BG}njcd7QW0@?G)nyFXXHkbs()ZbzXbAP!%}=O09BbmL=JsaWz$nJkOlFqqd;sVGNlj*ShiItJ^Us#4hj zS!&T(Ss|0f*Ir)@%i$8`7K<{5EGf36*Hqt$fLI|qH^CACv^Z|H8q04Krg#v<`C>1t zO@NWn0XTYW4~TfqrI%a@!TJVcahy>$&(v}b)pK}y5>n{|3xg8LI808CBBKn0uRH`B zgISPEF8KV_9>_kGy!Nqu&r`|CTqS9KK>-P;EFs-N|EsF1TAIyf|8ZpW#HBcJl_F@4 zw_zYjX|-T|ha$_eSWxqVUMVOM1q=l&JQFY!8c+s^!nSmFj#U!)5nQE=>M}Kr;e~|a z#mN%x1PoQHiRd#0{2XV@4V(a3CW!0~j2j)aknLp&_?g*R2n9pn@wnm0vBU7{?w!!v zdk|vrS&BucDht+n#bq>ZY6Q>j!#Pe+Ik>3PSGD^@@rRit%jG_FAp-e^mPjO`2}^VN&MzrI`q8Sxw&g4dPB~cem#h#B!6LdOT4q&xM!`0P zu_$yLtaD5pX)HNFy^Qf;39XZ=5Xe&Pc8%5N=8&4>@oAQX2!)zq|AGDR!p^5o1@Uv( zpFZtxn5Z20CuO*q%d0SzvOrSe-d8~Wmu9stnH0sbAC#2*FPARu=8qja_7|B<{7MW% ztW-?^s3wc09P^P3D4PRSZHcA*jP+5zQewih_)lSFB}TAG2?a`~OIf1^h$xkmEv>Io zE?2133Q^r|Z|`9}7MoQg(J8v%E1Q4xrz6{eyq@%^6Wf5gkVHcHd z&VyH3&}5*KMbc`Ck%ZSNL4jb)Fg$XcOQ#c3Wx?Qoy$y)ezK4BLQH86cDHx9z;IH4o zXD(bI-=xuM`|a4XNUt9*8NBJvL#~R7q^kmTtU{eEP_I>}yW` zcm&L-4U*aF1OY~=I8w4CXb2brj^anE{xkgJe8v0xYMf@&1Qm-6cv|>QrQ+Z z>v=K2*BgRO`ld}=xOhAPQ&VFYM#!x60z((J@yAG%Ys}w~za$zapr~Ag3aZQKQ%Nk5 zZzLsbP_e>dO}0%C;O_GU#IptD*RbD;0NH4nis($&-&kNx%TQGQfetV3ar@=ky83Dy zY^N0k&a$Oz)TK+7>!DDirN4gw#>dCmJdouaTRe6;-7F+20+;i!rIn zj#MhGiBe*nR4=`zmcjT@lG5`)9)Ds!q3@cBI8aP#Q1$}k;{ft1PW`Fugg0p@bK94F&|&&6U$r&Icx)$4SmPwx1M z9u8e5v$`w;aRx<8iIt78S^=CKZkG$GRb|2^nbg@58rAa5H=@_3=1xYfR2O?XOPE0Z zSO53`s?4Qh;{#XU`?GstXm}C=Rn_RX3?SV|jpPo=lH6`L3oTSl z8{^12Ze(PHZAYLA09v=Cq;?S%C)*grGC4+QLIq*0rib}Uky-BR$pe8U0w_kM?F^_| z%f+IsQHdnHx4XH{TOfB}XmE2wFq9B1mSP|fun!FMav3SZL>lniHExM@3qUQti9*OG0Nb>SrOFae~ZC^GV_ zGNWa?&CZsz=sA^_G&XipvOP}AT{qnD50*2zrg&aaYkhqa-0`(<1UfqwX;dGROr~IR za*Bx_3JVOM=Z16|BkN;Fn2>2}ZAJg(Wk80*Q%J)yt(*WURw*m7Vk%di8|Kh28bZYg z`srG20g~mm+2qWoDv^hIF1F!9U1<#8j=t1c2UW&BnVnO{FD%4au3AHtK2wDt% zu%*9qGP<&86)a&)Z=8c!Zs+Fr5y`Jdr zXCT(p)If7ns{vv>#!_jt!;3(ny&Y)f(AnM%yZ1cLD(VOr0-6%)9wun4Ea9HbrkFaV z%|>*L>R;(KO#lpcSZJbYB?Zo-cBX;+Qsr^m*m%F6g81ryv5D61a6(t-VpzU(75d0V z%D2Ft*LK6u$PlY}?d<4=01A;vBnt6F3}$A=S?owYl_-^BKoT}&;SvHt!GB#{6U)7( zQZZI=%xYlqbzZLAQU(kuqZ@kGYnwwko2Os=T*UFVEb0&~)4Q8t>XK$u~ zzy9N&g!c9>HlS2XlT0Mw;Guo!9}luHVnNqp_~6BtF+nplGz_Us66tr6fz!Qk1+(N> zJi>N=kyQplk5U@Lj}?qkPxKvTn}XWgI^p2KS7Cg7h=E8=mL*M=Ju1?#NC|^nF3UhK z6pI|&jElM`m5v=nk+YG)5AxCJOoA1BjgC%#1w)&}vSkFFy^v#}A;2W%`7WB*n?=n#L1zrjiNf`y5^`*STUX4D}v_NO+7T z$D?yoDGY!7RPW<Q<~B)C03CV=LUW)tWe8-mR^^0N%Uk-xyZiBm66 z=k)^c;qvO59}Sh?E35P+xggIDHF)k+QSb&OlpJH7@xvUKyHIm)*8nr23xV) zkUka44W_!+s^~m8$-+g)(2zxUMk|cJn0#;u>FDFkqXDb-@%X|7Xi)WUJ zmNuA3Mw)%KA!O-Vn3@=486Vnxl}!k&wboMsuaVWS@gT5_&6-} zm%tMYLhrP+V>XrFku9h%I=#L%v?JQ<@q@-&AvU;|Ti2pQ26kuRBTOLc5i<{bXQBxHgV#`%I^^nVN z2^=_ZfHLwXkneT-;SYDvJ35=+7_?(*gYNGk@x^_7h}*-Tj4xSOGgYkh&&<%x5`$c* z)9c8j;*gT2p&``#d_&`c@4vR|sXedX?%M?NjDk7dx9?NI_N8@tpu_fZBuxAIK++vB zn#g3**_>U|S&b^)ORhgXH+5B2eM_r9*z9j;YJ~-E5A+>+730szt?~G)`zoQ+oC)Mv z0FzR7Gb6p*3OUJERo@B+B@KLTC)BqGWC%|P1v&Sx`Fw6~B|iNUhK)P0Zj;WFUU@j+7>14kNDi ztI%miGw>|%4+E4XD zD^{)v*48&_FF*I&yC%j4{$44UX}kP=r&{Oi#NgGMT5gHXPWe`>z6d^g)2*<3=abua zJ^%adl9Zuy?tu&R9s=h)n3?$Ow*4iQbRWI_11FArHZSLhYF|9X zI=>zbk9`xuW1lJHvi|s76mHyl6WBx%o_X@uJ7hUW`xzcGfjmoK7P850L%sX`#k>qH zZJn@W)d#K&R0nsD3?BX8sbt~@2=bRv)!tpPw!g(*o*C==F!q+%?4*Co6lNzIge@k9=Y)3?A==#~!-xuKW}$<+=M5s{IQ2+P))u zwqT#XR>}nOEQ5LI(4l|Wu;BxDV#x6qf*|-;t-lx=8!v~ht`6uux)0`N!*?l4dF&MG zq+ILYnc>Gd)+%L?w_z`h_Z{9=kh6Z;s&Mnx8{zURuZFRqL6{gDI%j^b3FJGZ+Q`Jv zw%e=7^5~!bPA7}#k-=91q%O9e=( zq6@!YfTVv8r}MO9b>}&d^IPrcpTr2gUx1{4q2_>T#OFVdw0r68Zqi4aY3k2|aeE2g z_|NSo-cLYMhWW#9bI!xqKXD!ac`F#V$2P-{w`eZ_oLl=2-=dv!H;DNESHmOo6oT_L P00000NkvXXu0mjfFtgH2 literal 0 HcmV?d00001 diff --git a/assets/resources/Image/role/鹰怪物/蓝色/ygw-animation_0.png.meta b/assets/resources/Image/role/鹰怪物/蓝色/ygw-animation_0.png.meta new file mode 100644 index 0000000..f7ce20d --- /dev/null +++ b/assets/resources/Image/role/鹰怪物/蓝色/ygw-animation_0.png.meta @@ -0,0 +1,162 @@ +{ + "ver": "1.0.25", + "importer": "image", + "imported": true, + "uuid": "fd098eb2-c17a-44f9-b3b5-84e4de3a0a24", + "files": [ + ".json", + ".png" + ], + "subMetas": { + "ygw-animation_0": { + "ver": "1.0.4", + "uuid": "2321e67b-2872-4a21-b800-0fa31d285dbe", + "rawTextureUuid": "fd098eb2-c17a-44f9-b3b5-84e4de3a0a24", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": -1, + "offsetY": -14.5, + "trimX": 4, + "trimY": 29, + "width": 104, + "height": 81, + "rawWidth": 114, + "rawHeight": 110, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "subMetas": {}, + "importer": "*", + "imported": false, + "files": [], + "userData": {}, + "displayName": "", + "id": "", + "name": "" + }, + "6c48a": { + "importer": "texture", + "uuid": "fd098eb2-c17a-44f9-b3b5-84e4de3a0a24@6c48a", + "displayName": "ygw-animation_0", + "id": "6c48a", + "name": "texture", + "userData": { + "wrapModeS": "clamp-to-edge", + "wrapModeT": "clamp-to-edge", + "imageUuidOrDatabaseUri": "fd098eb2-c17a-44f9-b3b5-84e4de3a0a24", + "isUuid": true, + "visible": false, + "minfilter": "linear", + "magfilter": "linear", + "mipfilter": "none", + "anisotropy": 0 + }, + "ver": "1.0.22", + "imported": true, + "files": [ + ".json" + ], + "subMetas": {} + }, + "f9941": { + "importer": "sprite-frame", + "uuid": "fd098eb2-c17a-44f9-b3b5-84e4de3a0a24@f9941", + "displayName": "ygw-animation_0", + "id": "f9941", + "name": "spriteFrame", + "userData": { + "trimType": "none", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 0, + "width": 114, + "height": 110, + "rawWidth": 114, + "rawHeight": 110, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "packable": true, + "pixelsToUnit": 100, + "pivotX": 0.5, + "pivotY": 0.5, + "meshType": 0, + "vertices": { + "rawPosition": [ + -57, + -55, + 0, + 57, + -55, + 0, + -57, + 55, + 0, + 57, + 55, + 0 + ], + "indexes": [ + 0, + 1, + 2, + 2, + 1, + 3 + ], + "uv": [ + 0, + 110, + 114, + 110, + 0, + 0, + 114, + 0 + ], + "nuv": [ + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 1 + ], + "minPos": [ + -57, + -55, + 0 + ], + "maxPos": [ + 57, + 55, + 0 + ] + }, + "isUuid": true, + "imageUuidOrDatabaseUri": "fd098eb2-c17a-44f9-b3b5-84e4de3a0a24@6c48a", + "atlasUuid": "" + }, + "ver": "1.0.11", + "imported": true, + "files": [ + ".json" + ], + "subMetas": {} + } + }, + "userData": { + "type": "sprite-frame", + "fixAlphaTransparencyArtifacts": true, + "hasAlpha": true, + "redirect": "fd098eb2-c17a-44f9-b3b5-84e4de3a0a24@f9941" + } +} diff --git a/assets/resources/Image/role/鹰怪物/蓝色/ygw-animation_12.png b/assets/resources/Image/role/鹰怪物/蓝色/ygw-animation_12.png new file mode 100644 index 0000000000000000000000000000000000000000..f4e5ce40eacd9a7de896b3e539969ad9b67cf873 GIT binary patch literal 8493 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 bVcP!zz7Co3DtC#000000NkvXXu0mjfHpxl& literal 0 HcmV?d00001 diff --git a/assets/resources/Image/role/鹰怪物/蓝色/ygw-animation_12.png.meta b/assets/resources/Image/role/鹰怪物/蓝色/ygw-animation_12.png.meta new file mode 100644 index 0000000..ad6f2bf --- /dev/null +++ b/assets/resources/Image/role/鹰怪物/蓝色/ygw-animation_12.png.meta @@ -0,0 +1,162 @@ +{ + "ver": "1.0.25", + "importer": "image", + "imported": true, + "uuid": "35e74055-4977-4ab5-9fd2-cd5032652ef1", + "files": [ + ".json", + ".png" + ], + "subMetas": { + "ygw-animation_12": { + "ver": "1.0.4", + "uuid": "f60ea1e2-4f41-42de-b041-66ef2365d2c4", + "rawTextureUuid": "35e74055-4977-4ab5-9fd2-cd5032652ef1", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": -13.5, + "trimX": 20, + "trimY": 28, + "width": 74, + "height": 81, + "rawWidth": 114, + "rawHeight": 110, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "subMetas": {}, + "importer": "*", + "imported": false, + "files": [], + "userData": {}, + "displayName": "", + "id": "", + "name": "" + }, + "6c48a": { + "importer": "texture", + "uuid": "35e74055-4977-4ab5-9fd2-cd5032652ef1@6c48a", + "displayName": "ygw-animation_12", + "id": "6c48a", + "name": "texture", + "userData": { + "wrapModeS": "clamp-to-edge", + "wrapModeT": "clamp-to-edge", + "imageUuidOrDatabaseUri": "35e74055-4977-4ab5-9fd2-cd5032652ef1", + "isUuid": true, + "visible": false, + "minfilter": "linear", + "magfilter": "linear", + "mipfilter": "none", + "anisotropy": 0 + }, + "ver": "1.0.22", + "imported": true, + "files": [ + ".json" + ], + "subMetas": {} + }, + "f9941": { + "importer": "sprite-frame", + "uuid": "35e74055-4977-4ab5-9fd2-cd5032652ef1@f9941", + "displayName": "ygw-animation_12", + "id": "f9941", + "name": "spriteFrame", + "userData": { + "trimType": "none", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 0, + "width": 114, + "height": 110, + "rawWidth": 114, + "rawHeight": 110, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "packable": true, + "pixelsToUnit": 100, + "pivotX": 0.5, + "pivotY": 0.5, + "meshType": 0, + "vertices": { + "rawPosition": [ + -57, + -55, + 0, + 57, + -55, + 0, + -57, + 55, + 0, + 57, + 55, + 0 + ], + "indexes": [ + 0, + 1, + 2, + 2, + 1, + 3 + ], + "uv": [ + 0, + 110, + 114, + 110, + 0, + 0, + 114, + 0 + ], + "nuv": [ + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 1 + ], + "minPos": [ + -57, + -55, + 0 + ], + "maxPos": [ + 57, + 55, + 0 + ] + }, + "isUuid": true, + "imageUuidOrDatabaseUri": "35e74055-4977-4ab5-9fd2-cd5032652ef1@6c48a", + "atlasUuid": "" + }, + "ver": "1.0.11", + "imported": true, + "files": [ + ".json" + ], + "subMetas": {} + } + }, + "userData": { + "type": "sprite-frame", + "fixAlphaTransparencyArtifacts": true, + "hasAlpha": true, + "redirect": "35e74055-4977-4ab5-9fd2-cd5032652ef1@f9941" + } +} diff --git a/assets/resources/Image/role/鹰怪物/蓝色/ygw-animation_3.png b/assets/resources/Image/role/鹰怪物/蓝色/ygw-animation_3.png new file mode 100644 index 0000000000000000000000000000000000000000..749f2bb2f841f77377ac4a74020ed478e96a76f7 GIT binary patch literal 10139 zcmV;MCuG=(P))zt zO;9u0?ley*J+@G#t)4ifUKMbuglLhHFm(*ct3dDe#qsral6IyWKPZq z__$VFgSdX-Sg}T}nsaRAX5}N>}AcM%3A}pQt2=hRRu)R47Gt~ zsPQ*IG&V^D2gB;59uAFq@i9MlINS+UDR>pNFkrHZjdjlE*=CcqJ0*wm`Aq)*;eEy{ zK%Q75Z_4A!m4UpTfmjs)-OwPDOEJx%>v%_B1IYOd6g33_jzc<=;0ub(VJ_9rSiI7^ zcq* zz@tvoiZWQtPC(HQiYh}Un?f)Za5!Ah-Z2x}T4ut!XCHxNDnUAPLqS#t?N)IllSzET zC|?2c-Sxz?aeaE$%tcL_R)nG9K0Tk$s@2{=&h7G57YYcX zAVRUIA_e8xgRB-OBvK&;qKYJ_si^~6n|feia1VvqHMv~+$9T8Bbl;n9`uvVx{^plk zhR62Jb-VnSVe>dU9_@4371IS;+zHO9ix*z;D=aeh;M zS5s4c_a#Fkdw1jC|Fr_-yJHK=Wwy44hIYg4_VMUV;B>kn5}m^E80Fn=H|9bOM8S+X z61`H@m@-j|dB~xblq55_TwbX5)-N;tgeRSvrwrhjS8!#zb! zoeP+Jd4a|f4#!`uqBAbO+d=fF?0ZA!_)&LA1-b+&CK@6+=@i{Yp^m0Zt9;&vQZL z1dG)I*<1ob;ZYvzuZbGzQ!kbcW z@!FiAOTR!ydz;y0mNdNxik53x``p?~@U{mkKpvktah;EgF5ZQLAlOo=SV`m~XbuN5 z)~R9ebl0HRw=+gcU}7!@&N>kYj5dgqZ&H;meW~9~^i(^pjo(P$8;ne6rW znPxy^X3|x%}xbt^e6}BI6vyg0+_@sdSwi9*)*7uQ8IZE9EIxYS|%@27<#FB+|t~G z;Sh-r&!b1XF(k(!5}rIH2+*&+jS6(RYO2Dq;pKuTag(7z$Yc{6G*vq=9Y8#lfIJIH zV;ky5jtC4fM)V5Sy&z&rr8TojVLH-mc7fCGgLEnhi9`$>b|>WX8R}-RDv#G2z;GO6 z4dqR*tVxE#<5U>$f1B6mlG$LhAeuhhRNo2XW1~ot#17S>jzE6egsfA-JS07krf}JO z8sfl?XT?v?=NSt__EGhr$$yoewUO{WUUbT*sc?{7#X65U8fOjJ@E9qUIqVK6D- z@zfY3@Cjf_an${%`e`Fh_fqP85vs@dbN!jLMk z5Q!ie=#iWib0r57M_Q4pJgEAqIRVkcBgs^4si~dXMvS0PccYM(IVuK7qM3Odg~c3{_q~q|+%Vpl;MNI;)pbNsh)i2xzm}hB-9J+Eg`xdXyU}){oTL zFqM_b5t1M-7s(bG7A-s%4jtZeK|CJ5?T=nQfKlKgj^k$5*0jRh*~^jr#$or~%|-ms z&<3Bu3Xt#6WI3zg#mvMLF`v!mWdsMKB=a&uHJA>JCnBuELNbFwDD@qwT*pK|f=RVi znglROHUv&#a)p>H6$}cBg0GPQm$Ui|1oAp4?Z_fCOBU%itIhtInO#eu+S`B;pg`V; z%s6#WQF4)KD72@qp%)#-A4wuFOnK;B$+JWY>j#n%p}}0qau?m^ar+Qx6XY?>R(tC} zQB(vl&18zkywU>Ijv7`8qDqegKLAvJMO#<~l14YKz*k>M`PYZf!E+`?vi9xYqULg$ zZFu{x3XsQV2XQ5`IT}|i7?NP(G@WMPNOG7MIJ}^;Au1}j>AHrj6vM4#g={W^KxM&$ z3^ga4(DMqcbfYRVBTO~!dKPMjNBhYuX{_Vr^7Z(LWEF4kXq{tjZJx}N$fPQWHGc_z>Po_ zk+~AUbiXv}Oqa`ZL_-pxBBo2gjF@cF7Mt1G);(js2vXV9EJ3csbwEFe>mOsHIu}8|xsj1i=Jun;Si`ngLN{ z;~g4%jH=3*Uq$rLQXz*54EqmkC$JyTRQ(dS+oRzJMWESMni^nQ7Q=KfJj@CUqFLOp z6cwldd7KuFPPqh5X!H34l7Vm}Q!$aMGooN+-F`xl7%TM`3E0x`0A^4_f@~(om@By_ zu~?4N(bJshrL_!ryUhWw?c87}s=NlBZjLCL=T%kJAaN4PbLhalk_z+`S`qBLVp5-+ zuGeZhdnA(376qB6YBt-AKux_KPlk$yp$P>g%SoaQ!KB&J(wHNw+F+=}YzW1yiX=!X z^&B~o5FzKJTUgr*KOB&iQv?o|$)wM$t`1n*T6-A#rNJ$+?2Yt6p!V3op&e8N{1GG| zQ33K#uw2fVGMS{+`MkW?Y;s_(vK1rIaUq{iGSA}?Ac2$E1i7v&Oea!Nps13E<{^_# zF;H0L2SMj}4WBa!Zl@nZr^H4>(45Fhg9u^+Jty@ukIEk;NfVR(G^~~53~poD<<$z1 z$7#vrNZjvl+JyP>_oJhO=Xk5C4NID$7Z%!CWkA3;+zpEc~hn zsH$P^aXRkCUSG$>vTHcijQ3aAG`Eo=sz?7&pp5P!dG8?1w-+!g~P*#z73_L&x{I?Z*A6C zEPhZFvnw46hDKi_m{5X{ZY+7HjcG#4c|=$Y1ek!a5A(hBOGM$~qo3GY+^GA_&60iMrmNK_;WgKmcpjtD-E!+a=M z7{Ot_i42xNA~|BU;(guTqf_SuA{ET(R1adbcAE#zegEG;G98Dh&=kbuF&G*WSjMAP zn5s!EkJ96uP8-{vV3I^o6@y8g8C~sg!;RNLdwW~kefK^1`OU9vaAdQ|e>vG@yi;ke zbrMCtg%~Ft>R>ThS<#znsDMDK#SHszy6DucphAIO)FGA1AWI!%IgoNC$CWm=TCAul zc?IvoVXoz%tGf%Dn*9i90t6F+omau-aaIvq)Et;C7Itm`X~cM9iq%YM+MvF! z9julrq(LI9{;Yp)J@f`!;L0mM4v9n#z0u0Tw1yEt-Zd>y!_;M-%udH7Kr!T!o+_rr~1CpeZx@YoK0+MLHVwBtvG(?Z`9EW0G=QZ&8 z8&UL&2tttU=g@T(LuD8628LJ!HW(d2Fmlk;Fav6Q4Q#rg$O_;(sD_0#plbuQC{c7) z8KUt?0?%X?7@?9x18jCPc<~K<c`G0s${?63SKZsAgx*Sa^K)%6V#dV*eUs8ysj5b zc_q)=Y)+BHMm!N_9!j^<)&bi0L6sbb-HzUAW34YLrrR85*t73-=sWNVdZ`7@T(TVK zNEa&g$$6QT_jFBQgejg5Lo6Ppstybf55U0S0T>xQjLLBet~p(SJ$rdB9tQZ(9C!7h z3GLh4W314Adj-h( zW^PDR5{NYRL3>81*j{Qli|A=d^jd|8FN%E*^IL!oY6U}KWU(G_yIe3fJ`Ouxe-&QY z@&fet@4?5&)Y96Ciw%h3n*Z?Yu&k#>hfC~vsIh5Mz`@dE<6lE)wf+fJ5GqvPfnd!r zo7Gn&!L&D%OJ8R;TbzboD!oxb+$f))!xAPK<Q=`bUq1R(xHCt#V) zW)?<|9LHidSr{>*f_pL*X8My>HlJVz@;<%pcNjjyaOp>{g~LOK;nCF(z@bC?N)rbF zw?JuZGWdq~lrF!2=iw;aeCrwmdaDYMl!1-`J@l6jWDl+}j^jRy`R%iKp`R@S`pb9l zSh{eTWGpnFhRgL0zb{Ep!dbth~-!Q(t*4X zJ!PfC;n7W!iBBYBD`h#m690Z%`C|PPR}7b{T<)3+e;5qDg20R=!{6pb0c!m9%+si+ z$dv&z*x;3lIk5=X?cd@A5Vz)WDd+xp;UVCjT{OsNz z!-4+3PQ2|u%Io2Bb%g#_SI#%j;X0QR9~!UGP%;afrIrkDE;9D)bBiFYI|x>c&(4ak|RKkD)iSvjJ#ZIk8hKN)E&sHD7_1@2K`#8gAAY zSux5v)L=wNVd$!g%A`g*o1~LI%HbFsxPI~uKzw5kKk4>f0Qm`DbuE1R_B-sGHg8gQ z@7`_f*}Ieb`TZ)iwa$Q+<`%f+Yq!Bqetb7<-?1ImJoPNH$k)BdQq_1OVvWb5Y^)JA zqdlEY!^)Kx!{ERnHeW-N=H!8-Ey=5>!K?_St?5)SC#gYRdlX23qpdAEB`cjuu!(hI zrX*p?ADGWW>3sBQZ6_PZ_u)mGEtv#Zv|usJ=$s`|J#*uxm*J(CoS`ZJ3nPg-o3eY6v@hK1Ot? zv__qbY$na70BCza>9ph`=(vc*7V>#^8*l>qUDM!5kH1g`@t#vbT%T+pH=-x38yxKa z;FVWj0asu3X|B7w2fAnUumg;iy>BJ#Kd=Xeh6gaTO);-wr#IT2h7Cc$5Xza&R?hA6 zaJsJZ`w+mFUwIJ$vOy}HhfId12kP;6D+zXFrxB2IG8;~InB6G)GqgdLwYQSVC>WGW zDR=56rb~}W#3Kl_dZcZ3N`UxYh1Q2~osD2w?|<-Ku;4}SZ0~~Jp4l*K)?8K^Bcbke zIau-9;jj|{;b|`;SDqS=<#G@V1`&*;e%{It!J&bEerQ->BH!(R!eeakN|YoN z`z}ya6>`~ZiRe&H&1Kj*=4MOaXqYXHj!*@N@s#0HsoeEm07*x3SaZ1yD|FNGnp@Ee z_Vw+8r`A3O^>q!bpq)n$YHJ%<$ZV*uXWe=Nfj06;tW6Yv-rgQAl}f_FfdlLeR+FSc zJRXF2B33>LQUZ2TBz`c=Ce)PH(x4WdgjG=T?C^*qM!D1Hs|Byu2YdHzKjrF{Cml#6 zB!PTBFMGXy>-*1M0bN~lVBfx-Fcq9&TgWwyb_P$v>8CBii!Y%(5TVLj#pDEe*i>+e z?KG~htAnYjAV)P&IhSYO96;yq7j~7~M`s zXDf=#c0XscDWd}9G3>I-E_>{uhaUPKig#;UTN8Zf{FUHxI#DiIp@{T9hvcKKwie>C z81ulU#wKL1ud^m_EFNc~pJq;@(HM+ROt3LUI?01%NDS|j%ay+z2g4;v5%M(J<4E8T zh@=^*G)GhD;qWAz3U6v`W5<$(!c)-P+`&MlZhj&WVJCXfTq--u97Cyu zWQZ3tP?S}+(Uqz{^jrico$NvVN&0Ff(wYhqr9?7hG&FRnhY!apK)y{)lG;1eTf7<9 z<+v`Q?{OR&J_OILUk4rS-RzKDs>;xXrf@hk($5%YV|@#>xA!238I&G$e2nNfyiDaxyk|h4V`|j7z zK6`!z$ae_n1LZ}9<{QSx58p90HOjTMbwguAE6ZUdRj4>lCv?o{oQ3Sx4UJnBYjB-`Vb47{c%X57Y%m~-CLhhDHa50HRcjA=R2HZ| zNO>?&Q_mX52M+9_mJ@^n#BoRN8}>{_jFFq-WLju{jjE{ zk%e3OAkZ<_sZ?r()9Jj&Z5otu-TBdn4548p)*9|2ZktfdYGktt6}R+vO;B-7cgu}Bb#oX$C_e2}9Ju^Bee z|GKIc5~*~Nd85x)$7Xw6u7HtDMTKN4et{0cj1?;`_~s4IKKbYs9H&))JU+{my>ktM zNFlcg^I5&rxb0Vc~i2X!sVM!Qq*K_kmgJpn1k@ zSg`C|=1N#p_RiFXVNybLYCnq}}5d@_@m5SXQjZR{S9)aF@OX1U>`x1Kn1poVI z)^!dK?z-cvx86CmI{-V^-gHx;0_2}(RL$N|29az}c~K#rz8dhz{}XLGy_UY%CD76h zuBrfx3=bk%azK4U9XP%IBVoL3>6pjk|IctZ?3ij-E zx-ZiC`m;a#cR|k`2)Hd`fy;k2F^x|7_)Gkq8Ac*wEX5UbY%JSy+t`?eq-MaM^=-XpO%1#@b_ZBx#va=6aw z@^xylRQjx~qq^QXcfsF3`Q&3SRDe7IcE=sh^ndxwAD}O+TBaitr2;y!-TvL%L5&`U zMw<#TFx7@r%JonhGTu^t=$Go6I{mqH24>7W9Y!aoAbxNYx4hTJ&2FuOyh>#}&D<4m zLfj$E93DTcZ{PUhPg+_!ZX6mq^a4kX&kB(5p51W6LMn8Jkb#cIgX2xrb*&H$he66s z!IB0EdU{)7IGS6uYb3TPn9M&jnatl+4z)jzgvMrZJioGk&uerVBs9BtsH<{=s&lYo zG^vF$MRj(aokxNs`MoAy+lPg@FtqZ0;G$XbJOXsh$n z6f3j`Trj)A1-nNRS8W-Lr4Y1L2;x8BT(9{8qZQYWb%Uty8`o}ltH^Ku0MW@DC{hiKrv~GxOu|+Eva>%Px}p=UE>h%NO-vphN`}X8$|R%E zF>@iPnhM=rGvT7kKhgE_3u}KhK0f?kpzC{&=-LX9C&uWzkS~)n$>)M2{q-q_8){p7 zK@tEKzOMuN`}XjW;P}I`oZbBvk0($2vZfUWB9o)v&u7z6-`WGO@7xBbowfkJc+3BH z{Okv}f4zSn?OHZyi^KQeBp%W7*90UP9bY|*3@v#wj|A#LJyVCdTKDYU1@Bw79Of@s7JPaA+8-#2OyBE4+x*_@ z^s1-mUqw}!gFn_B+_kwWn~K_p2liX$&RYy!Ju_kU+|#aj^ueFO@ZrH3cpv&sk*yUV z-+dz>NH2Is4(|T0swlkGW`hr$e{okb9vwQ^xAO@kFN;-G9fD(jbrN~+VqDV1Q2%$x z+jHrJ|6m_}FqWSKmt1}gJoD7**?s$Vw^x8XaYoY#KO)bZ9Pa<;7oN^RHkXAJ7hKlb z+TN|L{oO;ask93gZ!eRjw=%W7XrIV|$i&b>T(csRBlBu%0x&trPG_mBgw_*lv<2>V z#Iz<68oPe;^K04nh|F8CKnRCJdf(2Me;f&iX~U}J9X{Xp%btEtG&C_6*F@QC_f~*B z@kUMTTajs2W#ggCcfR@}q?2)IZ0X>enp$prcI~ep4o!_`%CcnEJM{GD%BvzjPO=fX z`A0+7r1024Q*>%%zIxUN(KDA=F2Ck;pR8}JgGcYbw|nRIjRek$>G(fT0rC$v^2=Z9 zmwoG7r!UyMZ`Xr+x4$%lc8Z;|;#~OfhgU*878MZ4v+#buz;#sx$Z2d>T)~E`=$MtO zvx&&#+g^AoK(+9Orbak>*_rS}?>uvV-;U;rM;^cZ@I8F(S96)<`L8_txTK_0aMd-} z!VO>e9Q@#IRmf0^fdJC+{Cu_LFsUa3XsRJv!-iUpuy!t z{Aicz@d}WCF#2fMpQ5SsKg$c?=<)b}y+G2=m`xRWb?O62n@4Xu#_b<{hvNHW8XaW# zPzA{UZM56wUygBm$20`;(A&J{3fXxRqZ1YXb(+1W>~s#T{{v5mds1)Jo_zoS002ov JPDHLkV1i}dZ8rb_ literal 0 HcmV?d00001 diff --git a/assets/resources/Image/role/鹰怪物/蓝色/ygw-animation_3.png.meta b/assets/resources/Image/role/鹰怪物/蓝色/ygw-animation_3.png.meta new file mode 100644 index 0000000..7d87c63 --- /dev/null +++ b/assets/resources/Image/role/鹰怪物/蓝色/ygw-animation_3.png.meta @@ -0,0 +1,162 @@ +{ + "ver": "1.0.25", + "importer": "image", + "imported": true, + "uuid": "67783030-db2f-449e-bc2b-ed77d4655024", + "files": [ + ".json", + ".png" + ], + "subMetas": { + "ygw-animation_3": { + "ver": "1.0.4", + "uuid": "3ae705fa-3def-4c00-bb1e-831f91ad9b77", + "rawTextureUuid": "67783030-db2f-449e-bc2b-ed77d4655024", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 1.5, + "offsetY": -3.5, + "trimX": 27, + "trimY": 7, + "width": 63, + "height": 103, + "rawWidth": 114, + "rawHeight": 110, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "subMetas": {}, + "importer": "*", + "imported": false, + "files": [], + "userData": {}, + "displayName": "", + "id": "", + "name": "" + }, + "6c48a": { + "importer": "texture", + "uuid": "67783030-db2f-449e-bc2b-ed77d4655024@6c48a", + "displayName": "ygw-animation_3", + "id": "6c48a", + "name": "texture", + "userData": { + "wrapModeS": "clamp-to-edge", + "wrapModeT": "clamp-to-edge", + "imageUuidOrDatabaseUri": "67783030-db2f-449e-bc2b-ed77d4655024", + "isUuid": true, + "visible": false, + "minfilter": "linear", + "magfilter": "linear", + "mipfilter": "none", + "anisotropy": 0 + }, + "ver": "1.0.22", + "imported": true, + "files": [ + ".json" + ], + "subMetas": {} + }, + "f9941": { + "importer": "sprite-frame", + "uuid": "67783030-db2f-449e-bc2b-ed77d4655024@f9941", + "displayName": "ygw-animation_3", + "id": "f9941", + "name": "spriteFrame", + "userData": { + "trimType": "none", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 0, + "width": 114, + "height": 110, + "rawWidth": 114, + "rawHeight": 110, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "packable": true, + "pixelsToUnit": 100, + "pivotX": 0.5, + "pivotY": 0.5, + "meshType": 0, + "vertices": { + "rawPosition": [ + -57, + -55, + 0, + 57, + -55, + 0, + -57, + 55, + 0, + 57, + 55, + 0 + ], + "indexes": [ + 0, + 1, + 2, + 2, + 1, + 3 + ], + "uv": [ + 0, + 110, + 114, + 110, + 0, + 0, + 114, + 0 + ], + "nuv": [ + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 1 + ], + "minPos": [ + -57, + -55, + 0 + ], + "maxPos": [ + 57, + 55, + 0 + ] + }, + "isUuid": true, + "imageUuidOrDatabaseUri": "67783030-db2f-449e-bc2b-ed77d4655024@6c48a", + "atlasUuid": "" + }, + "ver": "1.0.11", + "imported": true, + "files": [ + ".json" + ], + "subMetas": {} + } + }, + "userData": { + "type": "sprite-frame", + "fixAlphaTransparencyArtifacts": true, + "hasAlpha": true, + "redirect": "67783030-db2f-449e-bc2b-ed77d4655024@f9941" + } +} diff --git a/assets/resources/Image/role/鹰怪物/蓝色/ygw-animation_6.png b/assets/resources/Image/role/鹰怪物/蓝色/ygw-animation_6.png new file mode 100644 index 0000000000000000000000000000000000000000..4b5f7ae90dcdb3e17a7e06666ab0b2e5ec2b45fc GIT binary patch literal 8842 zcmZ{KRZtv2v-RRmaEIW*Ex5b8ySuw5KyVB03j_k-e-TkQx#$paVP*CODgrvLh4X`^+7DixHc6FBU`SA;yzcI6pt|{j_rS)* zo~V$TE+{MR(XQAK#}U)tu(@c=Qc-Wp+akCMxQY+t@?Q?ckEM__ku*OFCO`cb_W56f z|AYV6;Q!$Nm;Vp`FaIC>|Kb()>kyQ8$U2LE(0rct9W&Rv7ci z)u`X|+=VBn7*o9EX%f4Fbm5kyu!y+`J=Ng+2_XTaa-?2BJ8q&nKBH<^9UbKR(%Q*o z@8vR5`@KK&>GHG=*X$o(ci!N_Lo}EOdZ6yV-s|*PRQZadUwi|Ppa2w`IiTu6>t(2j zZDWmf>uO_VG3}h;S&nDBCy@s846=dYKrY;^!Vjs?gj0dS^IvCaD}mb9A}P?$+QE>Kj)YDdr*jNlOi~8TAJ^I2}ZIY zSHwemo_Tz(ZBZc84>kHW#;cJ`WxO{l~8Uz#c9IcHF7eGu)fGH7-j?=BHQIj$2I9XwN_JE;=wuB!=WES61{Agq z&25H!-|>0o7>Q`-nJax=ChQiE&z#JxvLp6>0oSeKcYRd?Cq@#Q!1zo?DqwVZt*G-|CXlsoAT< z7qAOe>c#z+^FyHbE#EZRR0r2hO=vMfl|8+%V$g?|TqebwN=b#U5uecvl9R^i(Z06e zlouJQP(`n+5X6&5Mf_l-sHdlxcW&5e3j?aM^YHl*nJdE@3jtcQPZ6bYjFh~hGnFG5 za}u&=a(*e*_EI|Kc4;#$Rq6z|$gmOXbQZ3xb~x+~W28>lmLJ8koDWs}lr=3(94A1c z+m-oaql8>feD$2)bXSbuwErUHFqUa|SR3*-Lh1|s+Lt3Q?dAm8<8#VZNj;MK8gh;A z6_hpm00Bds_59r3-`PXzy5G+aJsHS$y4uu}z=XzE3E6dF2sP_ZJK~e}Z7A zZaK1LAyMGcV!FjR4?a!+*i*PYdsoN-yn~JhUSXdQU{A0cV7a+`(|s{qsjx@}?P6z+ z_$!c2WW#fS-+BG@VvE}qH0Mx>X;C)zqOcz?J7H;HA|tD4>=%w=Bjk|UGU8aiwr0Ed zBht`_?>VNJB~tj|qFe9^udCU#8-)%`)8(lsogTeVq)o?N7?gEA`@wNzc-{8zvih6$ zT*y{oT&E^Le1+WI=*0oHw(j)PEP7EN0LYWKwvbAxm z+j%me5~jKexj|vdxMl}O&OvfQgM0Y?-nklh-k`~r#qs$ldCUgj zK%KTsyF~VJHXCa1v(JWq&2EO*BF@VYlffX#?#Tk@JRDS``>EeO3n1~$g5#Gc8r;?} z4?ax7vMpWbfD})2EmHS~U!oa`GBCB7swopYcoh0k)Xa(s{(Nm1;y1`iUOPJ9EGpXA z(@GqhHEgtPX0{ae6k#@?;U4(zA3vwINz%}iK(1FMN)0*9LY=abd6#}v@{6gZY1v@0 z5Jzd1rc6@_zVu@XdfWh-Z$JEPHhaS`>V*;}2r$hpxgPEeJg1v2A3M0%e zhe5#0@SPgy7Er*WgQG!360gC{DVcA=IyWtfMyHPbLr}&V8ykUwo!DJ${I>U!#@qXv zrpfk{$Yf8)ezq^|reyUqCe~=^Qk)V zqqH@-cbqo)A6e#pF8{D$hIKzydScVK>M{bdz|sw;G(sa}`(av|jj)YP@=GPz$vWn% zFj*P-l!%&0<5OuaN08?W5}-*Rn3<@l;v|{g(M7kU>Ok}~gFvXsz#orzFUB)_T-d6S z`{#_fY+A2|#x0VYFz)d~KAGTBq2f@Nib@T2($c9ahvWyzBn5vXg7!-I;$Ge2Pq zOynTU_x|1nq~~BN3GJC2A{#HnZIdHqV~EORIYFa=e@sF$)m6nZ15w@jet5JX_Dtn1 z1Hc`>`8?$m9Q@^uqx<8Zj~2#cfjL_oDBEkf@)I$meH-BRC3tgYYg!Ls z2K3m(FpQF#=5PXbQ{?^A;-d=weLei)txEy;K1JFqs;)PD!bnjI8+V{WuQhxc?d4q1Awv&SP+({Pl6$nR-Al%U2))aw&$fA5M0<79E73WtjnQSSm3 z5#nyQ{Kb*OvtiS0WJ)OT7OQp)fd~AX4MlV0E%d$CyITagmA`&bX^rmkI!5WNT40Ua z4{S58l`Hc^m`?^^MoR&PsdO0n1`Bk{tVX_@tHwy%5(Y@@C$!nttM~EPco<_B0ZYWm zNs3ubZI9@6X-OHFeMBG_$7V zV--aN=y+Gl&GWe+3SCPHYvdN*dv%V#jG9UEPN|XoDbq9@{X$odFH&5I<)&_S(KWQ_ zk5qWwZ6zg(PTbVM+=OC?xeYNoZ_3zlC^6Ot7FhWLeCBT_BD|YSAlQ22-x99$zxC?< znp&F|Em<`_>AZ&$GdO(YjMD|G_;F~VIB?Kj>0>R=*P1HWk zbwfH`Ij=i#SMPnbBaSJ^#dpMbCgEEbA73lY`|UP``JgUg?HL{h_FR!8@!tK?9F=g6 zZ{5JkOQZ1Ku3M?Y*X)$AMfpbCTU0tDK+3<>MUU;EDGBSr&k;W)qLeMWEI{vh9 ztRNhg43QMpJ{GD%T?|R^cwc&)B3POP(Y{{*wYjM&UL80wb5U?Y2OPgD-m6Q1%X zAcZnpdD)panX8ARx1vHpL(SLM`|tQTy358D!`VtR{^=c2Z-z%VT$BaD@Wj+m{(G2z z#?G=ZtATy#5INH;J@og@J)406BGQ&XqbO~y)FntaUJiUP6D3V;D{p%@(5nUHeiO)u zwRTcGbH(aR8=X5QJ#JnIDqG2{zbx^>T3G87mv?eF-eF+I15-6r{z1+{=ra-6#8;|h z*a_e&_Oay*-=}fwi^~B;=TEp?@_T7_a#OOV;)|F)b>#dNzFIT4z8Jjxv%*|q*15bMku9*LHA+!pZl zy_v1V|2QnXV(vW4%_AcHjOkkLUnCvk0V7OglcHb)yN`P$sZeFvO?Q~+L#&dZW;tm} zl$PhkPl}gteZrP^Fj6MTIHNxlu&(m3iA4MF9L4n&s(44F!QG*KCoZyy&Kdd&^hH>A z363y4b}Aa&2aua=DvH9N2J5d7NqyYXA=gix^B4#S<^jCQ-q~EsL;_elpaLv($;d21 z>1^IyXXI!Ji~8y<>pc#{PEIz85zFnHb32eQ&=PU1nf1L3us6nEz%NRJ?qhx~xe~HPDRTD^&duv9 zDJ-Wq0sw*HG09eCjS55bjp5L{92*5D{1-G;>7Uh!tfzkcwO$fW8TI#ZQ<>NSIvB8u z#vhHDvStfsMM@ml%#3l86+~e1}GVtd4jiPp@`c$>f2xrZ06fG~3= z1u4RE;y#)JJ2y6u{EEB+Tf_x$LqDVYrq|TvuG=H>CtAAXt+$gfXEV7&w2PD5!0grg z*Nkt}^G}sC1_t{3J}o{V%MWEuMHjA81S%lkap#u6swrpe_Uvm_6zT9zu5n?Ni#A0b zB+43X4NvO2oUNj@C04x8#pByf-_&D%!kFPsOF~Q=+`9~?V$qS6tia!oEmW}4JL!)t zYTd{$An4=*9deR?%tg4RL`|9S3#wb!EA6gG*gCA_XYZrq(}~7r?k}HJ#>qF%$zcU7 z*!}rO`(zoCN$LotsNlYQi9Z6`5F*<&5{e7pq~&Wf(f=!@)HGN4d{qIr-_U&YKlK~v z`s4Ez<)phG^)`_fU|8Z4TBtgB`*KfErcV?U|IvZ@4GV2D5V0osLG8B_80hnOnJG=&cl>CA2t(VRU^6z0YTd-)Pf;g{4^KPysH0&~ zd|fN%mR!1;hubL$`Y`QB`AzdBzAI7%qQgaVuE|8tgM;q#j*U*po%GF>L|n_XDv@%d zNINrgWIN50Fw(Sw-`CQ@{rtC!R8!noZENLRiu-yeqR9G9MGlsw1uV?B@5m(^!M%x| zK?9i)XQ7G1Lo0M?jM0r!p}P|H-akOaLjQD01dXY89lH6^ZmEnLi3CONMy3RzO zD`WuK4FMZc!ZXJhSpF;6!!5}iq*%s;tlHck!N6`9xh7jWTWi3AFLRO%9eB)%6q3il zYDfOirHZxLoL9#y)e_bbO<6d$H|sCzo@IJe zmsOZRj7;4UM(i#`Yx$h0gR|PxVZ_Tx@GUEpbs{CZTREYv~cJ+v%};W-xnybN(@HrL?t+OtkU|m1jOnaFc8!1 z!{){BX(a;N(!woQhgf+U57VxEldZX^m#*z<-@M%Mz#M|SwEfhZG*OxiWI5G*_{ny! zqJM8-GT18;BlJKYNvo36r@8fKgQn`HbKJ6DD( zEJhp}sM=K-c^I;djhZ#=T-UXs%AyJ-yCVq6FnCZ9$<&zQmH_pdN6hZEXCy7FQJ|>I zfQJUiOa46nbC&3r+d}(wldhS%!d0dYInYyIO^Y)xt6_*`vuwK3oIYeh`a|}|c$(0J zwe^{qORn%eC;f5VdWOGCz}tjF~d^xvabhx;LNuZ$()YIenvZMcJUQq6y?kNCe_6vs#`4 zuUeP9MkLVUz$%6P6LDFOQa?OOF;Ydow!Cc%n%%>OAGU6Z$xS63Zollc$P5Cmff@0* zsM!rIXwk`_m)o-NbwO-~ZK>2LvAb2eHDsIZUgek&C^3kk<0OjI)&J;co@;I-@R9FQ zf6i|{%4tghJ3=cqHI_j>*@z*dlfzh(#mJZ93Wx$=!#TJbWerm^i6GzpL;yt5>I-W|`664hv?hv)0GY17s}9*6>Du!ZSSm zw30IyCVYJ-I`7*0jul}C;92{09HK<2{YUE>W`tOSj19I%Me~ z`1LAc$%Qa}B1V`1oj3k&Wp0k>@dd^aHEJnu^uUQ)&gs5FHEpSYnxJ$@(z|Q$7muKj zWx)4)YZ&i4^K-7H>hBkm`9_X`_Fry`G8D^DKyR#gkMTJdg9jJaGUc8+US7F?r}M@IsS4umW60`GW9?^?XS5t3~DjO(r$ zJHq#|>`ulh7(vg``+V$ElKW4Rty{HmI!)Dr&(3lFw&n^QtZCg~sx#{`MY{6AG@T6i zO(m?0uk^Tj_i?HD;qSJ@KXI~idbg%-;o9*JD9mOwma5O)4^En%V@&YbKM4Lc@R=P! zqY?_zBAtK_w}*O(vf`r|3Z`w{%P0PRQl~03F>hX4bXVQy7(2N3jc;lB`|x;BSa(SA zIE>Ue*CS2BWYacFA0mMC+UQcezN?i$jh@4G{O0hFRi0S8_iRY41OC$Y1z zE2NEqC0Cw$qOAEXrQUvQg>OirBTzR244=DUZLTx7zNx5&4N#@3ZK?Wl0+}i$VbJ3$y`S(Y<ZMF!lYqRY!M$gdU z#7xJ1GEg1B~P&hX8c}i44L`q6KXG6{l4iUOlve~J?C9ek$+%Ex3-tv-M(Y^g^>-{*&c?+`~JnF>25I?(?HP91>ix zf5ToJj&wIOcRo^O4}Dct)0*m@K3v4`^nJhDgDOFn8?PPyxk4(PVUVFu z{aj+Q{v{rq%`i(FvM{()y4PsLu+{YURY)#GQ$FiK%RWCjOY!m4EQw-sOo-gD;~S=& zmKx!u;f;5tHYwSdE~25y9AT6G<1UA(m4&Gw*Ih+lU!PfF(0RMgf9|8-_L;o!F|)2L zjjV-UkoaSn`VVP3uK4*3b~E0>yYGX-_ab7K_x$%yh%mV>J^?*M%uIeR8)7m?!C_o< zGJ?DX3zo!Lg4?axB}X7^Q&$fIr=R8*WN-Xgm=FVscR8KPleFz=gs9qpmTBPpQkHxQ zhVxyoe_UX0{!Mqg%f7e4^WkpLr^g^qe?7P>>nOftjU|d=y8+)yFoJ?7e06=XabBDp zT{xH*;@yF?&NG`PA_7IndT)dS@6H}A-Tas!=gtoIa#%ey?Qri^i4BglT()#!GT==ijSyn0owwQCoM67{~WgE0(i?$#xld{?Cz-xZ|Z zEgjEtr5X>|%e|?E*@<&D#BZUEt0i!c3+Sd4LFzTSY~*53I}I(%*A?w0S;iDPEyI@W z%7Q~dasPsj+2tu+nQ@gxHDNV!XEMmlS|E;g%gP^(WBRV+sH2;9i5$|h8}Ki)ZGSIb zP|SC0Tlep|p-%VjF}qYPfy6u;lZtt`8+gejJt*7U0|Owx zS4G>QW%>KkEHAiEE>K;hE0!d;#`O5dlGuv}alv)9f5qo#=KjLk;NR(6X_C5#1mJep zOHJycjaIz?j>5Z8T7u7Y!K#;@*=YPcDWaeAI_21&*sy?D`Q}%fU;hbl2x$({*PWO# zH8?baSvoyebj*)pzv(lSzr@Jz?KOTro82bs5J`(8VUXDru;qaFAL*Ofb7CM!q;!*g z<4IGjPP2JDYDF8rCrM_PJkKK&e8`zd5|#gGdhc;idCkt&)3&<|rN^BPI&AKdzIU~4 zng(wRAja0Bs3jRKemz7rY;k5>f4b)r<`kd@cGOHi&4vlbhxd^0eo~Zq>s^Y4GYLX8 z!cfYrwr9#3TWR_9aqlemo$$)cv`RE`X#jTsbhdmL5Ug z4)WwMF>1Fk%v#@PMQ(=JU+N!g5HGt>OGh(uf4*vX2R2#VPr5XjA2AuW9QW&F#DTn= zArJU*ntM}Kr~c&Trhg{jb#z)@ueLuvQoV43T5YthgYGtE{JS>p^OQ5y(8-s-G_I4D zUbBNn8+Je+y#1z*Og=xn+?{yl%mMW*8tPayo>Y69Fd;_#TshNHB98>fNBMH{KnV8_)|^>}*N~slx>5`3ubmMEi~s4! zaLHkMWY2x87i1u=E4#$PM=81w{~os^!#v6CAh-e=|6CaIe@)}e;;YPIQy1Lrpv`Cn z)HT(cGUVM~4B{{|(n%rzmWApxb)-@;cNqxoHn_VJBm{R2?he5T5;V9=*lhh(|L#L~ zKb&*kx^8#f`$em%$fBcwP+(wS(B8JAURcxqNm-agkL)THS8r_IpU zywsl$GK`A_)Jdy9;W3Ks*OxQ)4(PIuWcNP{XbUcbYWl|o7+ST`>Fb?ZR;!*D?Vth~ zdlYF3cG;lyHQ)66=2a4}%&ZT6vzKGM$zu?DQcTR9dkWxaBjbi(5Y>Zq|5`Zr=k@}D z8b*e7tVH)T$Ig1AggbyXt2XDdbsg!E&F58Sg&$M4B2EewyBo{Q1z-;^&ycB;po0nD zek;yU@KCTCIAn$wUeK$j$#>;E!zi8l*UXd;(!gEom7dG>irV2lf3nkFlRKU1 zPw-Eq(oij(dM^K=29XI@6l_>V`n0ML^3-%2E`jh6jpZXxnaXiJji?dHVThSg*#amx zguH`ewKNJQy9v}iO5cVE)n8$Z8Zu+RZ#?zHP-9rE^SR-v?J2_8og*$y2IK<-@^Ip; z&@DKm0WC0y-LO2)9cVn?deQE?d~;67-jDx&P9XJ7M4c`*Dk0=Xo7WYiQ&x{5EoKgqxc5}bVLS?gh`{3b zelC+J>+@WbV6T9V{4i;Rh*u}|o!12iTH%zJ=k{6qV4+a987u|mgh5PaVBka} z>uV5WSrZ}-2*`56Qogm@D1%$}IcZkw}ZZa8^| zR*tKGyKg(~kJ>3rGu=BB3x}!(;iLGVWh;1iY7g5t6~oZPS=tn-iIHET>d0N?&Y8e} zQ;7{5nhqNI`GFq*?ytl`77ocC*o$W4;tFGF!aX@T2~s`0%$1=dK&^qtixC*z6~Q^L z9>xeG!-D3BTh9h9RfV6Ikz5XSo`uP&go6R?d@JLth4v^>E)7IaGK`o>1%M4w%LyHA|z+I zxy56B?IWwCn5LSP{QzMENTR<6P97~}fPLqPY#ad~69l0IWHG_U5me3vYum##&Q0%T zNklJ?MB`r~w8TZLymIBJ;UbQRf9Iwg)dwh}Pv{r`6w^HQFJEn5 zP~yHbAOOs<`7Xy%XCIeU+LW35R3bl+{;fyp@-z<3-|{NcuIBvh2E@#_d)|YguJ0o9 z5Eu~FR>VJaTas8WwzNUF;6}jPWk)Ps_+{$Em7O^xLu0;+rBBnS;MO>%NeIhKX@eqH zCe2oeFW*K18}2|Lu93*jVR9tc@L7(Uij7k+n4>spXw|O;8KV`qqa&m6Bb!7YS%g{7 zU|;J`v^MmSphcUdHX~GYPop{`9}*8{Bed>g^BqDFbkP9+PiJf07zDh{3g}Q0;ZN}w zF9m}&tRCcJy^aHqx4amgIh~Lx?KoL&g20#|O8ZL=F&cnaaL{k;Qocr}7)u+!HiHl0 zLditzk@tFL`;y_c=^It#ctGSPR#>^m1!q#j8^2M^ECaZzv!zMP1@<&Mgj1mb$qLgo z(cpAP#Ok5ozM_4x_9W>-C?c~HRs9X$Bq32}hl#})m@rE(LE)b5c5+f&AU`rR5~)on z0+tDvERxWteavFLuC2Mk?yA^GOd^zkBN}RHW%aAuq0_5hif zNG5i^$eMQee!Iz@YI~KISL`WMCWkn>8qshK+mIMfT5kO>-$+(nWd&XSkgz>02V9bT z!R072#JWq^>FGG8^i4$tj`}(jDkHBwTM8GLpq9UtSn>z)#!sO%x{K6h=9%>6t2$wa z5)OZ&p=(C5a>Rj+oQS^ss-;h7HsE$<%)hCSN1mo2uBh?Jq$cFo9PHO>JwTE!OoC+I zk0^(wpl$r0t})2IF+(QIEGx$zJ8m7BsaX;ndmaM)8iwe5DJg91>~QYlqA8-&Rd!ul zlwm)_<*w=34o1Yezo3b{9~Wzm+O!8R#@tWG$L6XEU8y}vAh>Z3fA@p zg8yQ?4qFcanAKx>#WS_TP4rfRwumX)Rk&n~v)yF4moqB&{;gr!{2gn>^URb5qMERh?f zjc%eg6G}m&@d&r+Ok^!(2#Wv3zQi+Yen8J3M60xOd`EzFsq4oR?8=J@AKKU^ zgq~s8@!`JvjzH+?wgfABl5Ms3g^v>k;Yp?xWfZ0LM{9fpK zks2DWX&fcy#6iS-+L2Ks^O1YZi~_}a(N@lG*73yC3K6eeg?nNx@y!TVYWxaS1 zvefvr+>y%75Z6K|C=CNvmQmv%>o?Uz+~6Cb@e&r=)Q+nsQx6CY@prb5$bBSgv5LeQ zPl2jA(_~{<@KP0Q>=JD6_7&Wu*;%|)NL5?AH?`*EJ-^>5(i zyu(ax5Rypb93|mFzvd1-uaFmo{=Q7?YR}fGqutl4>%QZp&`A&-K}S{MZpm*dM(U7a zu@G~fb;4Cs?XW@ud>R?0DDK~LZjDb3%bY~j*t!V%#>B9V!DBWNeH(NE`i!eY(ZOQ% z3GBM^&wFYpf3;1mDKe&zaaW0JE8?-B5vG^>6zL|jc6W6R&bSk;$$nRm6Ovz-8??8- zb2J5(BEYpxNZ!KXU8uitVUiM&Um`QDNP1_3Y9!uU$ASPACI0+MPpTz5GZe@?9{x*5 z1kEi?mS(C9_6P2zKu+Gc!8ItGIWV&QX$;Oc6}>GpC^y=2XXgffzN(}L4&cMnxD(Pi%6N8P3)hmW~$$ri}lQCv!|y&u>Ko2$3ln=A&&uWQhT$cP!Zd z`HGz~`6KQ~guc^!Hs_KL!7Ay%AwI;?L(ZOqe7i;Il{%K-DwnHDd|lf7X4H4jfty6J zg#9mj!PnM?SEeH9l{TNSUzinHmu7v>2cgNTD*zw__$csqD}VxawPFFtQ{vTGTH?r` z3lf?1?QX6@*{lT3)7_?2(&-mPw=2WxM?z&`z@IrYV%IgsfwM zFAgUiP?>6Bk`Y;;)TSEo;l*WeW}{ridGHM~%+)9tWdm$i7HAC;)0o6h?8dp7JiMv7 zVME17NdKWoT|5~QOT%Mx#WvjcHure;Z8VPeCsXaSO&2NwFRQh@4_wNIyZI)LTkn1J zSg@l4^jf)y{Pj8n4qP(lQMhDiq_N(W1a|JTmn5Ol9hC7`mW{?K1!#Fga` zH=6jRjL&j$J##4wic!wq*v@4y)W9;{4BlI~u99#LlFFOjM)c2!JfBPME3 z9KT9TMuWs_3Pil@7gmi=MKlL7Ce)PHamrizci^rbiPtz+p`T3aGI%InFWMXPal65E ztgRGRFG*H*g@cpar8`R@R*mk1v0@|Z zk~C)5no?o0P-Zm6<{Cf=BYp8sF*THVF~Kirj&odUZh*joN6EXGN1elzP1CZD8&P^Q(Ej}pON)oL~22N{y97$)E zjD3gT%8%mogT$#z%8sY0F^hbwC20PN*ooLm4QFQU*YCz%(YGeV%t^ZRcfOHRQ^Oea z)spq25|YvmRnqzG0-fEUF=*ZxRx;6`3_Vo)?|!BVwPIgXf+;tEqRJ|m0F z&Nmx;4JN3}=@Id*A=Ct0v1~d?3{J{bFLb1J)c`p+0(MNMeF~#tGBuImPvPU!r*W1u zUCDL>D+|c&=*P>gTq2fE(qwcB8imRh>w=d%Y2IzWo3r~r>rXcXa^lPetE=rNZYg7S zg%L_O@-h~5845M*ISTbj7?xSUVnpf&j#zZX^h9yCGaC|?a#&lr7&(+7$Wf#%#7CpQqHCKl_whWFW=)~H-I$)JJ^v0}yU zu6EZkg3hT`$64S+Xxl0tJb9$1u(%Uy7A;f+i@peG3*bpl;Oa3)N;rEi5?cn|MAo%E2XwnQ2Itx?Sh>Q6)>d z2aRf|F(e{pMXT9zt+lOhMvJ$-zir+3QjS#u^Z2&DEtz^tdkcTOa+I+b-dJ30a&~j$ z@Xm*=w3o?iZLV#3a*GkZ+83e*V|!$M_&qMgqbg|z4&tKZrlYAGWBAHWA1dJ{DX$YI zRgpN!_V6`*{M6kiiKb@>#GQhM5|<)Xh)kXBVafB^AYM$uz`y#L{-wnvXZ=E z-BZ+WEbbP9**&hRx?x^7fLpH+dAcra)v)t8DpQVnTSo9_ zu51Uv?I43_c2|;)<}xlj>`W4KcZaX7r*~G`@?THq?vk|9HuI{4u4fEBSLT+9Hx>f; z^pMJq6eMt%C*VjWNm2)ehFA$nNrQ$Xgv>JsrSeoTz3_;L1-c#*dWy^rq>|0z9B6c7 zz7PJsW`ok1p8cl7Rw4P8JBB@{f7pnGLHxyksVbkd`#nUTg1EH3NywK-$CDYd;fdb= z)Yq*R@X8V>0%I$#ej!m==P55sMr2;9x0wo8GKoS1Gb(UL_)%VG<-({p685n91jk@Kikd_nKVl$Ie9o|f3z+AXss%|_Yhn$85ffBx$)sUn_Zi8} zl$a^a@slev<2S0cor7xA?8Tky>j2NEyz%BvV2Is|O zuRBQVJ7}5Hy=7-&3&?PUkstZbSjH^sT$47=yqjf~4sZNyMk`4*xsmu&|!F@|AJ4>950{_KK2^-5xQ$QFDuQPQ@bN^}M)ecMRH!vyv3v6rW z8>e`~Z%dp2Exc)ad#LZn#J(GO7G>ZlEC*l6wEQewKJ43d5x2fzIQrZkp?6{5>D`6C ztEQ|xRb8)pHs{B3^X>X;YzP%)sT3nin!RG!FQ z@DlQLFU8OTTKV(FW_T6|kV`T8ej$eXeBF>gF>CibQ?ZOt>TJQTk^xf`KX&pPPPF_r zJ1w`>VR_;BFGM6B9=-U1^MldmX$1crt;N0i5NcJGU4GI6Oava8;+s?KI3(;r*=_cd zzxH&Zrb=jsN8egS3coxbUw9l|w+mJieQcaWFMBgfVuRS*_y73@pVJ81{k5~l$;k=a z@RY08N_Z}pB~ULe3{XcRio!rVs zfs7wSU%V@aRY*=>kMAo$J2kXGMR-3RuOFhkO^Z%#@hwqyfJ`(CTV;P>x#136; z|Lbc5merXO) zvC=~cy39Z9x=Vd>68e}|u8NixNxM@inp1YD3-&TnkSeB84Gl$%we52EC?vzU@W=Ku zA4nyCR30ks)U^APFxgU--*TQNH;l7`sU&Hr5o^(;rD#_46Bje0V;XT(Lgo>wQX!H) zR^D?_0Bo=7b_}1_JAehaH4hgCR439KHK_$TXjW?K=uO@`Dt4~)9se3&fUh7Bej#mjuspg!{pzO>)J2~m_f!yA{ z7B3sov_G|^lP+C8UZtUqQMNLqolMd3E8S4^dVCE`hzij^_UP!hXbBRxwt~wyqbloD zqUBW7wO4n-yB?Z9%VnLoka==kp;qLcb1>xEUmnPlO!ke(<@1}FN z;~UB(cv;Mp7>}K4KWJuYCP>YfaZYEEiumy*5M(mqHGs111v%H=y(&sGbf`ta#ht*-RpFJmn8aS#eV)vQ^`n$N) zxkRj}bAXf*&@g(h$|jbLs+DeL6iFO~6ROe@r4vQ{n9!BMKU~wy)TF^f=kq#2}HB;x<`K{|$;5IC(^nvgkAH)&lYK z&D&l@Le14OYsl&&z{6ZfJ4b1DVL$lEqn;|67e4WvFN@8b9-cA&%zBVy=6 zP;m~1dtkW#U-(oqkGH~t<_ewCTsfK0KRn){^!oGFX7r@HJ{T%9!=^sn=uC|EzkUhh z-dZK{hMNUA%BYF;vSL_40b|5+k=C*NuuU5ZmMW@LMMFPp%v}au5K@g{Z+cLDYZs1; z_>(CoI#>=6RW3RYgONxfr1pMAb<3vDGY(waHnTa;O1>#9I61Jbov*&>k2)`hZBOfa&{jitz$#m~0spHvl|&=rnaLpElh?NLx}-*gA$XrbHSNwK%Sg zS#wwMvPF!pS9kLUIQ4W@j&*G%Q=cqrGhzBhxDx{wDoWz39M$T)eg2y1Mb)o8&o#!` z5B}clciK0%z1i8|jq823fBL6*R6XwRl*D|}l$=fNtuN6jK7%jy6d)yK04p;q@d%&( z+tj8*(>5w3nld7AA_9tw|%tp1->a(ixm{C0@>goWk4SP-o5K)zvR_QDdzj6Hj zMr|XIHFCbX+W*_Gwdl*3XWH~6D>8Xn;n@u&N5HK;jwMgw-)Ioql;udr>;fY@j$q;J ztcfCn2(0w1qCuHEeY1oT1(%z1O-zRAoKGrT?!n6%?x6Ak$O7UQ0&<}};#N7RL*QEZ zwN~#Nhy0c^&=5#nJimuLmk$-r+TfdqzV$QK_8jN`8t8=oPAc%spud+j(yAr`BlCfB z4tVLCjn~+?_n8}U$vj-?_!$AV6h>m0jL;r^`el`v$RmfUm`+6TJS+l=ad**UTrzh~ zk9W;QMqI%%FrT3Q~nD;(e;|!_q zw}6%PWTxKxb@DOaKaMo#MVjW93jyqU0q0kx)`U2+fVS2b@bsypn>3F5Izh6%|A+og zlv8-MfQen|osEya_!X^*Go;be%B-L7qNfZD|NU5IFI`-3 zEku)`=I>5l+&mMeR1^G5ipp@A!SK~9hUkL0y=|ZHV`oQ)h^&1`lJ%@#Et!C|qWm5^ zJuSfr9=6BN_IyOeHQ+t8v2T6Y$6|@1N;zr+BMB^$P$cV_gNJYZNCdd}i zf`ynSCGzZ98>TuB%ZJH{KMXuG>vW9BBG%#nuHqkDMi?J8ciZ*0N4d3g;GeZ?G;1-Y z90cl|XL8!kt*yUMtU4@{A;)c*aAi9ujhFDC;*5qH#yB1t~f1*g}4_?T7dUi-Y+^GR3{2<6VQ#En*}EgyZsL;+OPR{VO|Pf z&sPw%L|DYmWetyU-Td~>;>i9@^3t4~9ZQ`3j(SVh{dvjhqXPwT%2t#52Oj1Z=8T`$ zyiJY<`-fEj?k3G((TBLd-pc|<-HMXZvMd~WTx|*q&>KBHzRN}Yh8GY?D{ggv-Q5&o zT6QkoOFDhSrE*L?GODlXtg3H62z;R(&ciokg7>MNIN!u2`rcmtQ1FH;Sx{|%95nn~ zj+jyXyO~L}0YB@+X2|mIi$wdu1yY5qGvq+;z2kh^S;E|$kvy?fGVsZ(3XFJ7oQ_VE z?XFOEO@rOmi#GN2=k5+YJLm6n{AY}_^|GI>Ut|?oGTM)XbuTdGsZh)2JGMn`_zaqS zxz9Em&Fv_HAM4?gElU8w`_gNo0pnY9-Nb(vn%D7&qg;yLcR&C)+|*CF?|~ttr_KmP zO&*s&gHP)MK!Lq&v*&;I?vV_R)PqJiDhJ=(Vab$~rX>8$Ny0)n0R-K7=9pdHERaI* z@m-z_a5SOEPq5(Nf>5Yy+x2x;+=bt9=bPiM6?}>nI`5!K+N!a_$8$ z)q8V?Th>3m;{WIhcpsJt5Z$|DV(Wyl+1vNSM-Wff-V5pf!VA4W)}FDA2hPVom0jR* zBwoA=Y-RNt$f1w)lYLTj>switch": { + "zs_version": "1", + "zs_switch": "1", + "zs_click_award_num": "-1", + "zs_button_delay_time": "2500", + "zs_start_game_video_switch": "1", + "zs_banner_vertical_enable": "1", + "zs_ready_click_num": "-1", + "zs_full_screen_button_switch": "1", + "zs_jump_switch": "1", + "zs_full_screen1_jump": "1", + "zs_full_screen2_jump": "1", + "zs_finish_jump": "1", + "zs_history_list_jump": "1", + "zs_auto_jump_switch": "1", + "zs_friends_playing_switch": "1", + "zs_reminder_switch": "1", + "zs_false_news_switch": "0", + "zs_false_news_child": "", + "zs_slide_jump_switch": "1", + "zs_full_screen_jump": "1", + "zs_before_finsh_jump_switch": "1", + "zs_Fakerjump": "1", + "zs_finish_full_screen_switch": "1", + "zs_game_start_jump_switch": "1", + "zs_auto_full_screen_jump_switch": "1", + "zs_skip_settle": "1", + "zs_share_title": "", + "zs_share_img": "", + "zs_banner_adunit": "adunit-eddfa67d96aa6916", + "zs_banner_adunit2": "adunit-1c0ab0fc598dc582", + "zs_banner_adunit3": "adunit-16a1339a3b507983", + "zs_video_adunit": "adunit-f2d0381ed3c281de", + "zs_full_screen_adunit": "", + "zs_gridAd_id": "", + "zs_revive_way": "", + "zs_revive_num": "", + "zs_scene_value": "1005|1006|1011|1012|1013|1014|1017|1019|1020|1023|1024|1025|1030|1031|1032|1036|1042|1047|1048|1049|1053|1102|1129|1106", + "zs_click_award_since": "", + "zs_banner_banner_time": "2000", + "zs_full_screen_banner_time": "3000", + "zs_banner_refresh_time": "7000", + "zs_full_screen_ad": "0", + "zs_native_adunit": "", + "zs_jump_time": "4000", + "zs_native_adunit_icon": "", + "zs_start_video_switch(city)": "广州市|北京市|上海市|成都市|杭州市|苏州市|深圳市|东莞市", + "zs_native_adunit2": "", + "zs_recommend_id4": "", + "zs_recommend_id3": "", + "zs_recommend_id2": "", + "zs_recommend_id1": "", + "zs_banner_show_number": "5000", + "zs_game_banner_show_switch": "1", + "zs_share": "0", + "zs_jump_time_switch(city)": "广州市|北京市|上海市|成都市|杭州市|苏州市|深圳市|东莞市", + "zs_jump_time_switch(time)": "", + "zs_finish_switch(city)": "广州市|北京市|上海市|成都市|杭州市|苏州市|深圳市|东莞市", + "zs_finish_switch(time)": "", + "zs_game_start_jump_switch(time)": "", + "zs_game_start_jump_switch(city)": "广州市|北京市|上海市|成都市|杭州市|苏州市|深圳市|东莞市", + "zs_start_game_video_switch(time)": "", + "zs_start_game_video_switch(city)": "广州市|北京市|上海市|成都市|杭州市|苏州市|深圳市|东莞市", + "zs_ready_click_num(time)": "", + "zs_ready_click_num(city)": "广州市|北京市|上海市|成都市|杭州市|苏州市|深圳市|东莞市", + "zs_click_award_num(time)": "", + "zs_click_award_num(city)": "广州市|北京市|上海市|成都市|杭州市|苏州市|深圳市|东莞市", + "zs_switch(time)": "", + "zs_switch(city)": "广州市|北京市|上海市|成都市|杭州市|苏州市|深圳市|东莞市", + "zs_history_list_jump(city)": "广州市|北京市|上海市|成都市|杭州市|苏州市|深圳市|东莞市", + "zs_unmiss_text_time": "", + "zs_Video_Display_Time": "500", + "zs_Screen_video_switch": "10", + "zs_banner_cache_num": "3", + "zs_banner_create_interval": "45000" + }, + "download>>LevelInfo": { + "level": 0 + } + }, + "subpackages": { + "*3dres": "3dres/" + }, + "resources": { + "configs": {}, + "prefabs": { + "ball": "3dres/Conventional/Ball.lh" + } + } +} \ No newline at end of file diff --git a/assets/resources/config/gameCfg.json.meta b/assets/resources/config/gameCfg.json.meta new file mode 100644 index 0000000..9318298 --- /dev/null +++ b/assets/resources/config/gameCfg.json.meta @@ -0,0 +1,11 @@ +{ + "ver": "1.0.0", + "importer": "json", + "imported": true, + "uuid": "5204d398-bbdf-434e-a43e-86816aecc383", + "files": [ + ".json" + ], + "subMetas": {}, + "userData": {} +} diff --git a/assets/resources/config/productCfg.json b/assets/resources/config/productCfg.json new file mode 100644 index 0000000..df9af17 --- /dev/null +++ b/assets/resources/config/productCfg.json @@ -0,0 +1,98 @@ +{ + "PRODUCT_START": { + "event": { + "event_start_video": { + "switch": "zs_start_video_switch" + } + } + }, + "PRODUCT_BEGIN": { + "switch": "!" + }, + "GAME_HOME": { + "base": [ + { + "type": "btn_more_game", + "switch": "zs_jump_switch", + "window": { + "align": "left", + "alignoffsetx": 30, + "scale": [ + 1, + 1 + ] + } + }, + { + "type": "add_btn_deskTopIcon", + "window": { + "align": "right", + "scale": [ + 1.2, + 1.2 + ], + "alignoffsetx": 0 + } + } + ] + }, + "PRODUCT_HOME_PLAY": { + "check": { + "event_check_egg": false + }, + "base": { + "type": "knock_video_egg", + "window": { + "align": "topleft", + "fit": true, + "block": true + }, + "base": { + "awardevent": null, + "btnignoreoffset": true + } + } + }, + "GAME_PLAY": { + "states": [ + "PLAY", + "SHARE", + "SETTLE" + ] + }, + "GAME_PLAY.PLAY": { + "event": "event_game_play" + }, + "GAME_PLAY.SHARE": { + "base": [ + { + "type": "share_record", + "window": { + "align": "center", + "fit": true, + "block": true + }, + "base": { + "event": "event_share_record_reward", + "closeEvent": "event_childnext" + } + } + ] + }, + "GAME_PLAY.SETTLE": { + "banner": { + "auto": true + } + }, + "PRODUCT_PLAY_END": { + "switch": "!" + }, + "GAME_END": { + "event": { + "event_show_insert": {} + } + }, + "PRODUCT_FINISH": { + "switch": "!" + } +} \ No newline at end of file diff --git a/assets/resources/config/productCfg.json.meta b/assets/resources/config/productCfg.json.meta new file mode 100644 index 0000000..5f0ef39 --- /dev/null +++ b/assets/resources/config/productCfg.json.meta @@ -0,0 +1,11 @@ +{ + "ver": "1.0.0", + "importer": "json", + "imported": true, + "uuid": "3ab0a18d-a389-4c17-9331-acf973154661", + "files": [ + ".json" + ], + "subMetas": {}, + "userData": {} +} diff --git a/assets/resources/config/uiCfg.json b/assets/resources/config/uiCfg.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/assets/resources/config/uiCfg.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/assets/resources/config/uiCfg.json.meta b/assets/resources/config/uiCfg.json.meta new file mode 100644 index 0000000..8f653fa --- /dev/null +++ b/assets/resources/config/uiCfg.json.meta @@ -0,0 +1,11 @@ +{ + "ver": "1.0.0", + "importer": "json", + "imported": true, + "uuid": "9a912e18-754a-43dd-8bfd-78cfb982e1f5", + "files": [ + ".json" + ], + "subMetas": {}, + "userData": {} +} diff --git a/assets/resources/fgui.meta b/assets/resources/fgui.meta new file mode 100644 index 0000000..1d89b2f --- /dev/null +++ b/assets/resources/fgui.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "61b1fe89-38b2-412f-b1dd-9fd2c07d41ee", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/assets/resources/img_rankBg_2.png b/assets/resources/img_rankBg_2.png new file mode 100644 index 0000000000000000000000000000000000000000..38b4092f64900c6542f8ade3e0da4e5abaae8fe6 GIT binary patch literal 137 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFq0iG_7Arez-&oAU{Fko=G=zdvY z7vrYICI3Y|CgcP-ayU8|I_%$5|0qvm>6sZD9u^21B=w#spRng7<5y>stONHn-z-#~ mZ@BUC + #if USE_LOCAL + #include + #endif + + in vec3 a_position; + in vec2 a_texCoord; + in vec4 a_color; + + out vec4 v_color; + out vec2 v_uv0; + + #if USE_TEXTURE + in vec2 a_uv0; + #endif + + vec4 vert (){ + vec4 pos = vec4(a_position, 1); + + #if USE_LOCAL + pos = cc_matWorld * pos; + #endif + + #if USE_PIXEL_ALIGNMENT + pos = cc_matView * pos; + pos.xyz = floor(pos.xyz); + pos = cc_matProj * pos; + #else + pos = cc_matViewProj * pos; + #endif + + #if USE_TEXTURE + v_uv0 = a_uv0; + #endif + + v_color = a_color; + + v_uv0 = a_texCoord; + + return pos; + } +}% + + +CCProgram sprite-fs %{ + precision highp float; + #include + #include + + in vec4 v_color; + + #if USE_TEXTURE + in vec2 v_uv0; + #pragma builtin(local) + layout(set = 2, binding = 11) uniform sampler2D cc_spriteTexture; + #endif + + uniform sampler2D noiceTx; + + // 定义向周边搜索的圈数 + #pragma define range 5.0 + + #if SHOW_INNER_GLOW + + uniform glow { + + // 闪白进度 + float hitwhit; + + // 发光阈值 + float glowThreshold; + + // 特别地,必须是 vec4 先于 float 声明 + }; + + vec4 getTextureColor(sampler2D mainTexture, vec2 v_uv0) { + if (v_uv0.x > 1.0 || v_uv0.x < 0.0 || v_uv0.y > 1.0 || v_uv0.y < 0.0) { + return vec4(0.0, 0.0, 0.0, 0.0); + } + return CCSampleWithAlphaSeparated(mainTexture, v_uv0); + } + #endif + + + vec4 frag () { + vec4 o = vec4(1, 1, 1, 1); + vec4 white = vec4(1 , 1 ,1, 1); + vec4 burnColor = vec4(0, 0, 0.8, 1); + float vcolorA = v_color.a; + + #if USE_TEXTURE + o *= CCSampleWithAlphaSeparated(cc_spriteTexture, v_uv0); + #if IS_GRAY + float gray = 0.2126 * o.r + 0.7152 * o.g + 0.0722 * o.b; + o.r = o.g = o.b = gray; + #endif + #if CC_USE_ALPHA_ATLAS_TEXTURE + o.a *= texture2D(cc_spriteTexture, v_uv0 + vec2(0, 0.5)).r; + #endif + #endif + + // o *= v_color; + //废弃a的透明度作用 + // o.rgb *= v_color.rgb; + + #if SHOW_INNER_GLOW + vec4 color_dest = o; + + if(hitwhit > 0.){ + //下面那坨阴影就不闪白了吧 //&& v_uv0.y <= 0.90 + if(color_dest.a > 0.02 ){ + o = white * hitwhit + color_dest; + }else{ + o = color_dest; + } + } + + //利用v_color.r 实现冰冻减速内发光 r控制蓝色内发光开关 + vec4 innerLightParam = vec4(1,1,1,1); + innerLightParam.r = o.a; + innerLightParam.g = 1. - abs(v_uv0.x - 0.5) * 0.5 ; + innerLightParam.b = 1. - abs(v_uv0.y - 0.5) * 0.5 ; + innerLightParam.a = innerLightParam.g * innerLightParam.b * 0.8; + if(innerLightParam.r < 0.08){ + innerLightParam.a = 0.; + } + vec4 color_src = burnColor * innerLightParam.a; + + // 源颜色(内发光) + if(v_color.r < 0.1){ + o = color_src * color_src.a + color_dest; + } + #endif + + //闪白 + //利用alpha通道 实现不打断合批的 受击闪白 a越接近1.0 白图影响越大 + //弃用了v_color.a的意义 //消融的时候不闪白 + if(v_color.g == 1. && abs(vcolorA) > .01){ + o.rgb = o.rgb * (1.0 - vcolorA) + white.rgb * vcolorA; + } + + //消融 + //v_color.g + if(v_color.g != 1.){ + + //改为step方式 + float disFactor = 1.0; + disFactor *= step(o.b,v_color.g) * step(o.r, v_color.g) * step(o.g,v_color.g); + if(disFactor == 1.){ + discard; + } + + disFactor = 1.0; + disFactor *= step(v_color.g,0.2) * step(o.b,v_color.g+0.2); + o.rgb = mix(o.rgb, vec3(.2,.6,.2), disFactor); + + + + } + + return o; + } +}% diff --git a/assets/resources/mt/monsterEff.effect.meta b/assets/resources/mt/monsterEff.effect.meta new file mode 100644 index 0000000..8901615 --- /dev/null +++ b/assets/resources/mt/monsterEff.effect.meta @@ -0,0 +1,11 @@ +{ + "ver": "1.6.0", + "importer": "effect", + "imported": true, + "uuid": "ba6d3a07-9158-4f5a-a3cd-758eaa54cfa8", + "files": [ + ".json" + ], + "subMetas": {}, + "userData": {} +} diff --git a/assets/resources/mt/monsterEff.mtl b/assets/resources/mt/monsterEff.mtl new file mode 100644 index 0000000..3a5cc5b --- /dev/null +++ b/assets/resources/mt/monsterEff.mtl @@ -0,0 +1,36 @@ +{ + "__type__": "cc.Material", + "_name": "", + "_objFlags": 0, + "_native": "", + "_effectAsset": { + "__uuid__": "ba6d3a07-9158-4f5a-a3cd-758eaa54cfa8", + "__expectedType__": "cc.EffectAsset" + }, + "_techIdx": 0, + "_defines": [ + { + "USE_TEXTURE": true, + "SHOW_INNER_GLOW": true + } + ], + "_states": [ + { + "rasterizerState": {}, + "depthStencilState": {}, + "blendState": { + "targets": [ + {} + ] + } + } + ], + "_props": [ + { + "noiceTx": { + "__uuid__": "47fde87f-ddce-4132-b599-476d6e20a5cd@6c48a", + "__expectedType__": "cc.Texture2D" + } + } + ] +} \ No newline at end of file diff --git a/assets/resources/mt/monsterEff.mtl.meta b/assets/resources/mt/monsterEff.mtl.meta new file mode 100644 index 0000000..c15d708 --- /dev/null +++ b/assets/resources/mt/monsterEff.mtl.meta @@ -0,0 +1,11 @@ +{ + "ver": "1.0.16", + "importer": "material", + "imported": true, + "uuid": "1c1473a5-c219-454f-8787-4872c716e718", + "files": [ + ".json" + ], + "subMetas": {}, + "userData": {} +} diff --git a/assets/resources/mt/noice.png b/assets/resources/mt/noice.png new file mode 100644 index 0000000000000000000000000000000000000000..b8d89764f4e9dd7d624545a22f8c577f62beff39 GIT binary patch literal 9258 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 literal 0 HcmV?d00001 diff --git a/assets/resources/mt/noice.png.meta b/assets/resources/mt/noice.png.meta new file mode 100644 index 0000000..7f206e1 --- /dev/null +++ b/assets/resources/mt/noice.png.meta @@ -0,0 +1,42 @@ +{ + "ver": "1.0.25", + "importer": "image", + "imported": true, + "uuid": "47fde87f-ddce-4132-b599-476d6e20a5cd", + "files": [ + ".json", + ".png" + ], + "subMetas": { + "6c48a": { + "importer": "texture", + "uuid": "47fde87f-ddce-4132-b599-476d6e20a5cd@6c48a", + "displayName": "noice", + "id": "6c48a", + "name": "texture", + "userData": { + "wrapModeS": "clamp-to-edge", + "wrapModeT": "clamp-to-edge", + "imageUuidOrDatabaseUri": "47fde87f-ddce-4132-b599-476d6e20a5cd", + "isUuid": true, + "visible": true, + "minfilter": "linear", + "magfilter": "linear", + "mipfilter": "nearest", + "anisotropy": 0 + }, + "ver": "1.0.22", + "imported": true, + "files": [ + ".json" + ], + "subMetas": {} + } + }, + "userData": { + "type": "texture", + "fixAlphaTransparencyArtifacts": true, + "hasAlpha": false, + "redirect": "47fde87f-ddce-4132-b599-476d6e20a5cd@6c48a" + } +} diff --git a/assets/resources/prefab.meta b/assets/resources/prefab.meta new file mode 100644 index 0000000..4123c40 --- /dev/null +++ b/assets/resources/prefab.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "ef6190b5-8ecf-45e1-8411-1b0641117eb2", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/assets/resources/prefab/monster.meta b/assets/resources/prefab/monster.meta new file mode 100644 index 0000000..c76032f --- /dev/null +++ b/assets/resources/prefab/monster.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "73f66461-1c42-40ea-8e7b-bc8edf2cf24b", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/assets/resources/prefab/monster/A.prefab b/assets/resources/prefab/monster/A.prefab new file mode 100644 index 0000000..23e9187 --- /dev/null +++ b/assets/resources/prefab/monster/A.prefab @@ -0,0 +1,216 @@ +[ + { + "__type__": "cc.Prefab", + "_name": "A", + "_objFlags": 0, + "_native": "", + "data": { + "__id__": 1 + }, + "optimizationPolicy": 0, + "persistent": false, + "asyncLoadAssets": false + }, + { + "__type__": "cc.Node", + "_name": "A", + "_objFlags": 0, + "__editorExtras__": {}, + "_parent": null, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 2 + }, + { + "__id__": 4 + }, + { + "__id__": 6 + }, + { + "__id__": 8 + }, + { + "__id__": 10 + } + ], + "_prefab": { + "__id__": 12 + }, + "_lpos": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 1, + "_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": 127, + "height": 152 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "" + }, + { + "__type__": "cc.CompPrefabInfo", + "fileId": "ccp+eKyTJAD7ulzd4EiFWR" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 1 + }, + "_enabled": true, + "__prefab": { + "__id__": 5 + }, + "_customMaterial": { + "__uuid__": "1c1473a5-c219-454f-8787-4872c716e718", + "__expectedType__": "cc.Material" + }, + "_srcBlendFactor": 2, + "_dstBlendFactor": 4, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 1 + }, + "_spriteFrame": { + "__uuid__": "9692ee99-e3c7-4f0c-880d-a032db0e6b67@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + "_type": 0, + "_fillType": 0, + "_sizeMode": 1, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_useGrayscale": false, + "_atlas": null, + "_id": "" + }, + { + "__type__": "cc.CompPrefabInfo", + "fileId": "b302VZ5qhG644z6wH7r0A3" + }, + { + "__type__": "cc093vah81DFZueF4zZ/meR", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 1 + }, + "_enabled": true, + "__prefab": { + "__id__": 7 + }, + "_id": "" + }, + { + "__type__": "cc.CompPrefabInfo", + "fileId": "64saSQgadKpYuxsUKiOwLB" + }, + { + "__type__": "cc.Animation", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 1 + }, + "_enabled": true, + "__prefab": { + "__id__": 9 + }, + "playOnLoad": true, + "_clips": [ + { + "__uuid__": "9ed9e8c3-7532-447e-97d3-bc1ae4e19f22", + "__expectedType__": "cc.AnimationClip" + } + ], + "_defaultClip": { + "__uuid__": "9ed9e8c3-7532-447e-97d3-bc1ae4e19f22", + "__expectedType__": "cc.AnimationClip" + }, + "_id": "" + }, + { + "__type__": "cc.CompPrefabInfo", + "fileId": "05J1f8wohETJmhJTTTCMxR" + }, + { + "__type__": "eb420oiv5ZLbLLZi6s0vZpY", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 1 + }, + "_enabled": true, + "__prefab": { + "__id__": 11 + }, + "_id": "" + }, + { + "__type__": "cc.CompPrefabInfo", + "fileId": "ffVerLDe9CU7krTM9JMHNN" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "0edn5AOUBLp4BHrbgPBtQ5" + } +] \ No newline at end of file diff --git a/assets/resources/prefab/monster/A.prefab.meta b/assets/resources/prefab/monster/A.prefab.meta new file mode 100644 index 0000000..e068cd4 --- /dev/null +++ b/assets/resources/prefab/monster/A.prefab.meta @@ -0,0 +1,13 @@ +{ + "ver": "1.1.40", + "importer": "prefab", + "imported": true, + "uuid": "e74b3ff7-97ec-4d2f-ad43-8306c1ba9eac", + "files": [ + ".json" + ], + "subMetas": {}, + "userData": { + "syncNodeName": "A" + } +} diff --git a/assets/resources/prefab/monster/B.prefab b/assets/resources/prefab/monster/B.prefab new file mode 100644 index 0000000..6d93061 --- /dev/null +++ b/assets/resources/prefab/monster/B.prefab @@ -0,0 +1,216 @@ +[ + { + "__type__": "cc.Prefab", + "_name": "B", + "_objFlags": 0, + "_native": "", + "data": { + "__id__": 1 + }, + "optimizationPolicy": 0, + "persistent": false, + "asyncLoadAssets": false + }, + { + "__type__": "cc.Node", + "_name": "B", + "_objFlags": 0, + "__editorExtras__": {}, + "_parent": null, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 2 + }, + { + "__id__": 4 + }, + { + "__id__": 6 + }, + { + "__id__": 8 + }, + { + "__id__": 10 + } + ], + "_prefab": { + "__id__": 12 + }, + "_lpos": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 1, + "_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": 114, + "height": 110 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "" + }, + { + "__type__": "cc.CompPrefabInfo", + "fileId": "f1Wx1pvy9OVakeMT8w6icu" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 1 + }, + "_enabled": true, + "__prefab": { + "__id__": 5 + }, + "_customMaterial": { + "__uuid__": "1c1473a5-c219-454f-8787-4872c716e718", + "__expectedType__": "cc.Material" + }, + "_srcBlendFactor": 2, + "_dstBlendFactor": 4, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 1 + }, + "_spriteFrame": { + "__uuid__": "3b94c7fc-ac9b-47d7-9aca-37fc7683996a@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + "_type": 0, + "_fillType": 0, + "_sizeMode": 1, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_useGrayscale": false, + "_atlas": null, + "_id": "" + }, + { + "__type__": "cc.CompPrefabInfo", + "fileId": "b0iGjpLhBJPrY6JonysP5Y" + }, + { + "__type__": "cc093vah81DFZueF4zZ/meR", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 1 + }, + "_enabled": true, + "__prefab": { + "__id__": 7 + }, + "_id": "" + }, + { + "__type__": "cc.CompPrefabInfo", + "fileId": "53oVywNp5PGJUZfQatKx7E" + }, + { + "__type__": "cc.Animation", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 1 + }, + "_enabled": true, + "__prefab": { + "__id__": 9 + }, + "playOnLoad": true, + "_clips": [ + { + "__uuid__": "3732ff9b-e2c3-49ce-90e9-ada8be3cb96f", + "__expectedType__": "cc.AnimationClip" + } + ], + "_defaultClip": { + "__uuid__": "3732ff9b-e2c3-49ce-90e9-ada8be3cb96f", + "__expectedType__": "cc.AnimationClip" + }, + "_id": "" + }, + { + "__type__": "cc.CompPrefabInfo", + "fileId": "c5wHTUGiVIBb2yeZQAEKOM" + }, + { + "__type__": "eb420oiv5ZLbLLZi6s0vZpY", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 1 + }, + "_enabled": true, + "__prefab": { + "__id__": 11 + }, + "_id": "" + }, + { + "__type__": "cc.CompPrefabInfo", + "fileId": "959Ocj8pFGrJLs9oM92a2/" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "a7Z6TTS/NDor38B0qtcQKC" + } +] \ No newline at end of file diff --git a/assets/resources/prefab/monster/B.prefab.meta b/assets/resources/prefab/monster/B.prefab.meta new file mode 100644 index 0000000..81fb612 --- /dev/null +++ b/assets/resources/prefab/monster/B.prefab.meta @@ -0,0 +1,13 @@ +{ + "ver": "1.1.40", + "importer": "prefab", + "imported": true, + "uuid": "1b0198ae-dc91-4673-b3c2-82d38ea24f4c", + "files": [ + ".json" + ], + "subMetas": {}, + "userData": { + "syncNodeName": "B" + } +} diff --git a/assets/resources/prefab/monster/C.prefab b/assets/resources/prefab/monster/C.prefab new file mode 100644 index 0000000..386ebae --- /dev/null +++ b/assets/resources/prefab/monster/C.prefab @@ -0,0 +1,216 @@ +[ + { + "__type__": "cc.Prefab", + "_name": "C", + "_objFlags": 0, + "_native": "", + "data": { + "__id__": 1 + }, + "optimizationPolicy": 0, + "persistent": false, + "asyncLoadAssets": false + }, + { + "__type__": "cc.Node", + "_name": "C", + "_objFlags": 0, + "__editorExtras__": {}, + "_parent": null, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 2 + }, + { + "__id__": 4 + }, + { + "__id__": 6 + }, + { + "__id__": 8 + }, + { + "__id__": 10 + } + ], + "_prefab": { + "__id__": 12 + }, + "_lpos": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 1, + "_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": 114, + "height": 110 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "" + }, + { + "__type__": "cc.CompPrefabInfo", + "fileId": "53iYM7vpJLnINCrAkTRQH/" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 1 + }, + "_enabled": true, + "__prefab": { + "__id__": 5 + }, + "_customMaterial": { + "__uuid__": "1c1473a5-c219-454f-8787-4872c716e718", + "__expectedType__": "cc.Material" + }, + "_srcBlendFactor": 2, + "_dstBlendFactor": 4, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 1 + }, + "_spriteFrame": { + "__uuid__": "fd098eb2-c17a-44f9-b3b5-84e4de3a0a24@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + "_type": 0, + "_fillType": 0, + "_sizeMode": 1, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_useGrayscale": false, + "_atlas": null, + "_id": "" + }, + { + "__type__": "cc.CompPrefabInfo", + "fileId": "50WYqmSpVHz77Hv6S5pTzi" + }, + { + "__type__": "cc093vah81DFZueF4zZ/meR", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 1 + }, + "_enabled": true, + "__prefab": { + "__id__": 7 + }, + "_id": "" + }, + { + "__type__": "cc.CompPrefabInfo", + "fileId": "84pEcHmDBI0J/QXThK3nEJ" + }, + { + "__type__": "cc.Animation", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 1 + }, + "_enabled": true, + "__prefab": { + "__id__": 9 + }, + "playOnLoad": true, + "_clips": [ + { + "__uuid__": "b56c7e2b-40cd-4383-b119-1923658d8346", + "__expectedType__": "cc.AnimationClip" + } + ], + "_defaultClip": { + "__uuid__": "b56c7e2b-40cd-4383-b119-1923658d8346", + "__expectedType__": "cc.AnimationClip" + }, + "_id": "" + }, + { + "__type__": "cc.CompPrefabInfo", + "fileId": "6abu0luyVJzKEGyWttdjVM" + }, + { + "__type__": "eb420oiv5ZLbLLZi6s0vZpY", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 1 + }, + "_enabled": true, + "__prefab": { + "__id__": 11 + }, + "_id": "" + }, + { + "__type__": "cc.CompPrefabInfo", + "fileId": "5eN7kGtstBd6sWI68enYFJ" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "d80OPge6ZADJT7qlS23M6N" + } +] \ No newline at end of file diff --git a/assets/resources/prefab/monster/C.prefab.meta b/assets/resources/prefab/monster/C.prefab.meta new file mode 100644 index 0000000..d68539c --- /dev/null +++ b/assets/resources/prefab/monster/C.prefab.meta @@ -0,0 +1,13 @@ +{ + "ver": "1.1.40", + "importer": "prefab", + "imported": true, + "uuid": "b624dfd7-65a4-4a92-a024-9837b6d85e3c", + "files": [ + ".json" + ], + "subMetas": {}, + "userData": { + "syncNodeName": "C" + } +} diff --git a/assets/resources/prefab/snakeBody.prefab b/assets/resources/prefab/snakeBody.prefab new file mode 100644 index 0000000..9d3a6ea --- /dev/null +++ b/assets/resources/prefab/snakeBody.prefab @@ -0,0 +1,162 @@ +[ + { + "__type__": "cc.Prefab", + "_name": "snakeBody", + "_objFlags": 0, + "_native": "", + "data": { + "__id__": 1 + }, + "optimizationPolicy": 0, + "persistent": false, + "asyncLoadAssets": false + }, + { + "__type__": "cc.Node", + "_name": "snakeBody", + "_objFlags": 0, + "__editorExtras__": {}, + "_parent": null, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 2 + }, + { + "__id__": 4 + }, + { + "__id__": 6 + } + ], + "_prefab": { + "__id__": 8 + }, + "_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": 1, + "_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": 26, + "height": 38 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "" + }, + { + "__type__": "cc.CompPrefabInfo", + "fileId": "8fwvM12x1IPo2dArQF91uV" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 1 + }, + "_enabled": true, + "__prefab": { + "__id__": 5 + }, + "_customMaterial": null, + "_srcBlendFactor": 2, + "_dstBlendFactor": 4, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_spriteFrame": { + "__uuid__": "a432f2c8-d4bd-4121-866f-f0d1d37fc9d7@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + "_type": 0, + "_fillType": 0, + "_sizeMode": 1, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_useGrayscale": false, + "_atlas": null, + "_id": "" + }, + { + "__type__": "cc.CompPrefabInfo", + "fileId": "d07J88MlFNY7mTenCgyzty" + }, + { + "__type__": "285cauvetxPfJlQdx1eirwt", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 1 + }, + "_enabled": true, + "__prefab": { + "__id__": 7 + }, + "_id": "" + }, + { + "__type__": "cc.CompPrefabInfo", + "fileId": "93hL3EiPRPc5zGTV7BHsiU" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "a9hsuA4stDHKZUFKApYrhS" + } +] \ No newline at end of file diff --git a/assets/resources/prefab/snakeBody.prefab.meta b/assets/resources/prefab/snakeBody.prefab.meta new file mode 100644 index 0000000..ac5dba7 --- /dev/null +++ b/assets/resources/prefab/snakeBody.prefab.meta @@ -0,0 +1,13 @@ +{ + "ver": "1.1.40", + "importer": "prefab", + "imported": true, + "uuid": "6ddb05c4-758e-455f-a66a-f04cb11d44ef", + "files": [ + ".json" + ], + "subMetas": {}, + "userData": { + "syncNodeName": "snakeBody" + } +} diff --git a/assets/resources/tmpMonster.meta b/assets/resources/tmpMonster.meta new file mode 100644 index 0000000..cae6aa5 --- /dev/null +++ b/assets/resources/tmpMonster.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "2b275ba3-e1fa-4747-bd21-b6029ad8cef4", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/assets/resources/tmpMonster/jy_01.png b/assets/resources/tmpMonster/jy_01.png new file mode 100644 index 0000000000000000000000000000000000000000..6535cc5b703668c046ffd872d0f16c620754ebc6 GIT binary patch literal 907 zcmV;619bd}P)BHVq^XyE?(K+2sXhoh_*jD(Q%09$U<;F2rq9oWId8IY5MzmOW82I=YliL?}$ zkFiBBIgLJmE}&B}~csvM#~yE61q^kIJut5aAJSBO7ZPD_)(3*Ak2;MB->?BK4V^O20x z&8jz1F&TU1r5V(uJimlTPW1{XSrjGwLxK=^sjQ-`!Sht>EDrr+VEesB^iK~{MQ~N2 zP&U{zj$DnVGJZNg;Ze$6=xgi_Fq#NmTOUaI>MaO?9$-4Nm*o>PynqNxAxK)JhNHG1P!;HPJ^STUS6<_e%nL+O+$6^t*S zd+OWs2zoR|O*_!<_a`2v`%~sq3)EQKLz=lgD=${^%L5g#vXmKWSi_tFY+$>P; z6=j>nRM-WkquP80XmZey-|to?fbOIfYnhjMlbg-6eH3M1uF{&}O~!@0P_32mo{2<4 hc$03`lu^VO`vb|K3m`m0kz4=(002ovPDHLkV1iZVqNe}= literal 0 HcmV?d00001 diff --git a/assets/resources/tmpMonster/jy_01.png.meta b/assets/resources/tmpMonster/jy_01.png.meta new file mode 100644 index 0000000..3080e08 --- /dev/null +++ b/assets/resources/tmpMonster/jy_01.png.meta @@ -0,0 +1,134 @@ +{ + "ver": "1.0.25", + "importer": "image", + "imported": true, + "uuid": "623db2d2-5d31-426c-b781-9e0d48231684", + "files": [ + ".json", + ".png" + ], + "subMetas": { + "6c48a": { + "importer": "texture", + "uuid": "623db2d2-5d31-426c-b781-9e0d48231684@6c48a", + "displayName": "jy_01", + "id": "6c48a", + "name": "texture", + "userData": { + "wrapModeS": "repeat", + "wrapModeT": "repeat", + "minfilter": "linear", + "magfilter": "linear", + "mipfilter": "none", + "anisotropy": 0, + "isUuid": true, + "imageUuidOrDatabaseUri": "623db2d2-5d31-426c-b781-9e0d48231684", + "visible": false + }, + "ver": "1.0.22", + "imported": true, + "files": [ + ".json" + ], + "subMetas": {} + }, + "f9941": { + "importer": "sprite-frame", + "uuid": "623db2d2-5d31-426c-b781-9e0d48231684@f9941", + "displayName": "jy_01", + "id": "f9941", + "name": "spriteFrame", + "userData": { + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 0, + "width": 26, + "height": 34, + "rawWidth": 26, + "rawHeight": 34, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "packable": true, + "isUuid": true, + "imageUuidOrDatabaseUri": "623db2d2-5d31-426c-b781-9e0d48231684@6c48a", + "atlasUuid": "", + "pixelsToUnit": 100, + "pivotX": 0.5, + "pivotY": 0.5, + "meshType": 0, + "vertices": { + "rawPosition": [ + -13, + -17, + 0, + 13, + -17, + 0, + -13, + 17, + 0, + 13, + 17, + 0 + ], + "indexes": [ + 0, + 1, + 2, + 2, + 1, + 3 + ], + "uv": [ + 0, + 34, + 26, + 34, + 0, + 0, + 26, + 0 + ], + "nuv": [ + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 1 + ], + "minPos": [ + -13, + -17, + 0 + ], + "maxPos": [ + 13, + 17, + 0 + ] + } + }, + "ver": "1.0.11", + "imported": true, + "files": [ + ".json" + ], + "subMetas": {} + } + }, + "userData": { + "hasAlpha": true, + "type": "sprite-frame", + "redirect": "623db2d2-5d31-426c-b781-9e0d48231684@f9941", + "fixAlphaTransparencyArtifacts": false + } +} diff --git a/assets/resources/tmpMonster/jy_02.png b/assets/resources/tmpMonster/jy_02.png new file mode 100644 index 0000000000000000000000000000000000000000..ff03ec66bfd768a2059fe819e460a6d678812589 GIT binary patch literal 917 zcmV;G18V$cOBgQx_}K-E33bW_I0mZ?p0JKLrERo@Seu-`P1c=bUfPcg`76nEbNP z6SB*F9#4v5g3yONhxyI7iGOH=8!_X`nyil;SN>5_DJtJfCgQ^*f%(Fu78Z{ER}uYn zj`HN9C1lD-JttS5sLv)_9$rCx=-qRJTQJrUnihCEQAe4ZBUM!uG9C%vBImE)k4PMz zQq-r#G<23#VUSU8%MDUdJXHcB>j{q6QRX5_#>CTPVdb(pw!J%%H+>DBMOa-f}XRR4b}Dq9vFrp{wx?lq89NKfcBzweV8R zow)$^-a9jdLYBRn&~;yzxe?_!)n+QpUa@%vS+Qn2Dr_}n@O{H8SXhwHZ=^YyH2*i) z^YR{4O6EZ$tieE2eJkmZZA(p!C@b6UT26&|J9gv7&w&A$*FVTl#F9YHox&qd@fMd% zmB7-IUDTe5ofy` zJo0=br_j;%0$S{xjcI=ej0O98NW)@#ZE8fKBuy(oAr)&US0A~klApX@JTRqzM{b{5 z!6SEaME=H`FcFDDcL8TvClIHd%A%D(<&7J%FBN zNKT=<@jgsOc^6mILip=5mW>ep+IkL=L~?Cq_6uF zsYUybPSjE6BO1MA=hO>S%=OION2Z)E)P%h)AIbcPT0?dTU9pMU`F|oB{c<&u_GkQp rh%6Kh1LsU|D8O67B$qi634-t&3kM3Dr<(&`00000NkvXXu0mjfDO$4V literal 0 HcmV?d00001 diff --git a/assets/resources/tmpMonster/jy_02.png.meta b/assets/resources/tmpMonster/jy_02.png.meta new file mode 100644 index 0000000..19c51ad --- /dev/null +++ b/assets/resources/tmpMonster/jy_02.png.meta @@ -0,0 +1,134 @@ +{ + "ver": "1.0.25", + "importer": "image", + "imported": true, + "uuid": "6eb8be20-8ce8-4103-8b76-25c536650b04", + "files": [ + ".json", + ".png" + ], + "subMetas": { + "6c48a": { + "importer": "texture", + "uuid": "6eb8be20-8ce8-4103-8b76-25c536650b04@6c48a", + "displayName": "jy_02", + "id": "6c48a", + "name": "texture", + "userData": { + "wrapModeS": "repeat", + "wrapModeT": "repeat", + "minfilter": "linear", + "magfilter": "linear", + "mipfilter": "none", + "anisotropy": 0, + "isUuid": true, + "imageUuidOrDatabaseUri": "6eb8be20-8ce8-4103-8b76-25c536650b04", + "visible": false + }, + "ver": "1.0.22", + "imported": true, + "files": [ + ".json" + ], + "subMetas": {} + }, + "f9941": { + "importer": "sprite-frame", + "uuid": "6eb8be20-8ce8-4103-8b76-25c536650b04@f9941", + "displayName": "jy_02", + "id": "f9941", + "name": "spriteFrame", + "userData": { + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 0, + "width": 26, + "height": 34, + "rawWidth": 26, + "rawHeight": 34, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "packable": true, + "isUuid": true, + "imageUuidOrDatabaseUri": "6eb8be20-8ce8-4103-8b76-25c536650b04@6c48a", + "atlasUuid": "", + "pixelsToUnit": 100, + "pivotX": 0.5, + "pivotY": 0.5, + "meshType": 0, + "vertices": { + "rawPosition": [ + -13, + -17, + 0, + 13, + -17, + 0, + -13, + 17, + 0, + 13, + 17, + 0 + ], + "indexes": [ + 0, + 1, + 2, + 2, + 1, + 3 + ], + "uv": [ + 0, + 34, + 26, + 34, + 0, + 0, + 26, + 0 + ], + "nuv": [ + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 1 + ], + "minPos": [ + -13, + -17, + 0 + ], + "maxPos": [ + 13, + 17, + 0 + ] + } + }, + "ver": "1.0.11", + "imported": true, + "files": [ + ".json" + ], + "subMetas": {} + } + }, + "userData": { + "hasAlpha": true, + "type": "sprite-frame", + "redirect": "6eb8be20-8ce8-4103-8b76-25c536650b04@f9941", + "fixAlphaTransparencyArtifacts": false + } +} diff --git a/assets/resources/tmpMonster/jy_03.png b/assets/resources/tmpMonster/jy_03.png new file mode 100644 index 0000000000000000000000000000000000000000..fa05b04b137ad06709f0aba06b98457eeb93cb44 GIT binary patch literal 954 zcmV;r14aCaP)9h26vyw(n~(Qq-puPX+Ltm#tAx}?f<(m5QizR2gq4M0XJIEnEJ<`BL_$P_t%Z%G zAtXddiclex)}SBy+RjHiAMaD{|C~yjAWbBXyO`g+xp(e6|8vee_q>Q$;4qA~&2pvZ z2~bs?o067gRTi>CbfGu;+wmtwiu_2W%`=j^5R4|(rzI;hYtGS558S!?hOa1>Z95=Y zx1CFpC$?{cgd;`@^CN`ad|ZOwomip7VL=^)rAX;rO}a24sgd0Boj z_4Fah8+&(SqPsc`jt>oiiE0%*^$E!)>Wv22naj~e3fcU^B|aE0S(3>}urpjmX2uNU zmnZv3$+G3k!HK6&K`oIWMcv)>2gd>L^!0)FU%v*I8U|?deD6dNd}b@BLsb;Zvc)YN zi|3qGtJkjwQ)}0P#ok`9JT(P&1aO4dyJ!)3YjhO+JWa99W|}~|P71?QBovf15l_?e z(q-FVskxa}a15&DGWd}dsqr|N&r*fRSQaT^4>fT%`jf+9E8^nN@X6;BtSHWwR|W^c zfyqhwojtIGl_WD6P~~f-R-3nOc7&%WB1lQyqhee0eX`J{>q4mn`kZC$O`J`vTuUaw zXbi`cNOA1iI7Y%HkA$blWy{?fjukQGd7#2sR;}0PDG69vV}`1=U=L`lB+1I6(fJy} zQ{-{BmAD#zXW!>JYZSJu%JVf=xMJf*@FSl~1CJho&8iCKbUKlR?}n_%WuFgLC?*@y zWJz+Ep6DfAU0~rI^$HPIaK67Ee8sgf%@yH0*Sb}a`Rzz}iprjkM|r5`z|^i7#lYfN zB$z&1c#)N9vlW6X!>q-d)~y5YejNi#$8TPk_5g=&||StvOB z6jm}Dle|Ie@*Nb*bNvJ0kTr2#GL;H0gsSLgYUsMzD(MB{3M@>kyCl!7gg{}GsRy_@ zf;LTb zwNQ7SNG9Xa{gS29*x;}B`!C*)FmgE)ZBWAwkVRT7jt0*Oe7rT3%Zt&s3DHOG&TmFI cii8k90K)k^Vn_gAlK=n!07*qoM6N<$g6wU{;s5{u literal 0 HcmV?d00001 diff --git a/assets/resources/tmpMonster/jy_03.png.meta b/assets/resources/tmpMonster/jy_03.png.meta new file mode 100644 index 0000000..1ce0eb4 --- /dev/null +++ b/assets/resources/tmpMonster/jy_03.png.meta @@ -0,0 +1,134 @@ +{ + "ver": "1.0.25", + "importer": "image", + "imported": true, + "uuid": "e2120e7f-6106-41ee-bf8f-2706d9019dba", + "files": [ + ".json", + ".png" + ], + "subMetas": { + "6c48a": { + "importer": "texture", + "uuid": "e2120e7f-6106-41ee-bf8f-2706d9019dba@6c48a", + "displayName": "jy_03", + "id": "6c48a", + "name": "texture", + "userData": { + "wrapModeS": "repeat", + "wrapModeT": "repeat", + "minfilter": "linear", + "magfilter": "linear", + "mipfilter": "none", + "anisotropy": 0, + "isUuid": true, + "imageUuidOrDatabaseUri": "e2120e7f-6106-41ee-bf8f-2706d9019dba", + "visible": false + }, + "ver": "1.0.22", + "imported": true, + "files": [ + ".json" + ], + "subMetas": {} + }, + "f9941": { + "importer": "sprite-frame", + "uuid": "e2120e7f-6106-41ee-bf8f-2706d9019dba@f9941", + "displayName": "jy_03", + "id": "f9941", + "name": "spriteFrame", + "userData": { + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 0, + "width": 26, + "height": 36, + "rawWidth": 26, + "rawHeight": 36, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "packable": true, + "isUuid": true, + "imageUuidOrDatabaseUri": "e2120e7f-6106-41ee-bf8f-2706d9019dba@6c48a", + "atlasUuid": "", + "pixelsToUnit": 100, + "pivotX": 0.5, + "pivotY": 0.5, + "meshType": 0, + "vertices": { + "rawPosition": [ + -13, + -18, + 0, + 13, + -18, + 0, + -13, + 18, + 0, + 13, + 18, + 0 + ], + "indexes": [ + 0, + 1, + 2, + 2, + 1, + 3 + ], + "uv": [ + 0, + 36, + 26, + 36, + 0, + 0, + 26, + 0 + ], + "nuv": [ + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 1 + ], + "minPos": [ + -13, + -18, + 0 + ], + "maxPos": [ + 13, + 18, + 0 + ] + } + }, + "ver": "1.0.11", + "imported": true, + "files": [ + ".json" + ], + "subMetas": {} + } + }, + "userData": { + "hasAlpha": true, + "type": "sprite-frame", + "redirect": "e2120e7f-6106-41ee-bf8f-2706d9019dba@f9941", + "fixAlphaTransparencyArtifacts": false + } +} diff --git a/assets/resources/tmpMonster/jy_04.png b/assets/resources/tmpMonster/jy_04.png new file mode 100644 index 0000000000000000000000000000000000000000..3dc9dd1172404054e1d905c12057462fb7592a60 GIT binary patch literal 1166 zcmV;91abR`P)utXYSRkM4J9Z>s3R;ieIhu)!7sZ{GD(nh1HGl|5KywJ4* zcRaZpN`C#T%)B%cVmdCI6{NM;`K(<_QJ{{I?L_okBdK-TK`W8oS?f_PMcaugzsZZu zDJXg8@a@cq2WQ{`d$#kb|f{yp&Q^}c(UVriT?Gzuke9$RE?>w=#*w?oiIk$lO*+tC#EomqT8(<=e zN}?qK27KD6;dY7;PO%W=JVa#lcwk|BAZ#0+e_vOtLl< zCKoX0$rvU(Wg)tX#Uj(GV7wMeFs&Grxc&rHgOX4*@89DgHWKU+Lq0s zChE~PX2%`)U%l6VnmLj|xb57Ed<;d5YlfPf`tCE>|T9lYIK@7NkkvqfRYdE9n7wGw3H>` zZhtC+T4}#zK)L6*sEI`MxKc7%>m!X6`AzQXPuTga+%gX|7$?`HrjfNOTHT&j9sXhY gV@0(~sMCn(AClE`y>)FsmjD0&07*qoM6N<$g2=f;761SM literal 0 HcmV?d00001 diff --git a/assets/resources/tmpMonster/jy_04.png.meta b/assets/resources/tmpMonster/jy_04.png.meta new file mode 100644 index 0000000..c680a0a --- /dev/null +++ b/assets/resources/tmpMonster/jy_04.png.meta @@ -0,0 +1,134 @@ +{ + "ver": "1.0.25", + "importer": "image", + "imported": true, + "uuid": "a432f2c8-d4bd-4121-866f-f0d1d37fc9d7", + "files": [ + ".json", + ".png" + ], + "subMetas": { + "6c48a": { + "importer": "texture", + "uuid": "a432f2c8-d4bd-4121-866f-f0d1d37fc9d7@6c48a", + "displayName": "jy_04", + "id": "6c48a", + "name": "texture", + "userData": { + "wrapModeS": "repeat", + "wrapModeT": "repeat", + "minfilter": "linear", + "magfilter": "linear", + "mipfilter": "none", + "anisotropy": 0, + "isUuid": true, + "imageUuidOrDatabaseUri": "a432f2c8-d4bd-4121-866f-f0d1d37fc9d7", + "visible": false + }, + "ver": "1.0.22", + "imported": true, + "files": [ + ".json" + ], + "subMetas": {} + }, + "f9941": { + "importer": "sprite-frame", + "uuid": "a432f2c8-d4bd-4121-866f-f0d1d37fc9d7@f9941", + "displayName": "jy_04", + "id": "f9941", + "name": "spriteFrame", + "userData": { + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 0, + "width": 26, + "height": 38, + "rawWidth": 26, + "rawHeight": 38, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "packable": true, + "isUuid": true, + "imageUuidOrDatabaseUri": "a432f2c8-d4bd-4121-866f-f0d1d37fc9d7@6c48a", + "atlasUuid": "", + "pixelsToUnit": 100, + "pivotX": 0.5, + "pivotY": 0.5, + "meshType": 0, + "vertices": { + "rawPosition": [ + -13, + -19, + 0, + 13, + -19, + 0, + -13, + 19, + 0, + 13, + 19, + 0 + ], + "indexes": [ + 0, + 1, + 2, + 2, + 1, + 3 + ], + "uv": [ + 0, + 38, + 26, + 38, + 0, + 0, + 26, + 0 + ], + "nuv": [ + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 1 + ], + "minPos": [ + -13, + -19, + 0 + ], + "maxPos": [ + 13, + 19, + 0 + ] + } + }, + "ver": "1.0.11", + "imported": true, + "files": [ + ".json" + ], + "subMetas": {} + } + }, + "userData": { + "hasAlpha": true, + "type": "sprite-frame", + "redirect": "a432f2c8-d4bd-4121-866f-f0d1d37fc9d7@f9941", + "fixAlphaTransparencyArtifacts": false + } +} diff --git a/assets/resources/摇杆-内圆.png b/assets/resources/摇杆-内圆.png new file mode 100644 index 0000000000000000000000000000000000000000..81a64c80704e52d2517fd8a9afeee6c7efbf54fa GIT binary patch literal 252 zcmeAS@N?(olHy`uVBq!ia0vp^dLYci3?#L#A6^2aSkfJR9T^xl_H+M9WCijWi-X*q z7}lMWc?slj2Ka=y{{R0U$OMvg@B96MEas9RzhDQ3hV+nAc0g{Er;B5V#`&|CZ21}# zcvv5Zn_IMYcP}rzD50L_cTn|Cq|cV+TTb`~O}VT0<#tBAVX@%FgXdcq*m>q}=qdC! zc;I!ThQW2sLig_pmdfkcJC??6;H*lY!Ez;{=Gf5_wjr!q7v$D4{JpPWcWa(|&)s`{ sF-g_em4pPR^#ro$EY6Sjuv{X2b6ZGf&lTG=plcXBUHx3vIVCg!02ex38~^|S literal 0 HcmV?d00001 diff --git a/assets/resources/摇杆-内圆.png.meta b/assets/resources/摇杆-内圆.png.meta new file mode 100644 index 0000000..7defc49 --- /dev/null +++ b/assets/resources/摇杆-内圆.png.meta @@ -0,0 +1,134 @@ +{ + "ver": "1.0.25", + "importer": "image", + "imported": true, + "uuid": "0eb12705-db9c-4680-a0be-ebbc556ce9f3", + "files": [ + ".json", + ".png" + ], + "subMetas": { + "6c48a": { + "importer": "texture", + "uuid": "0eb12705-db9c-4680-a0be-ebbc556ce9f3@6c48a", + "displayName": "摇杆-内圆", + "id": "6c48a", + "name": "texture", + "userData": { + "wrapModeS": "clamp-to-edge", + "wrapModeT": "clamp-to-edge", + "imageUuidOrDatabaseUri": "0eb12705-db9c-4680-a0be-ebbc556ce9f3", + "isUuid": true, + "visible": false, + "minfilter": "linear", + "magfilter": "linear", + "mipfilter": "none", + "anisotropy": 0 + }, + "ver": "1.0.22", + "imported": true, + "files": [ + ".json" + ], + "subMetas": {} + }, + "f9941": { + "importer": "sprite-frame", + "uuid": "0eb12705-db9c-4680-a0be-ebbc556ce9f3@f9941", + "displayName": "摇杆-内圆", + "id": "f9941", + "name": "spriteFrame", + "userData": { + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 0, + "width": 46, + "height": 46, + "rawWidth": 46, + "rawHeight": 46, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "packable": true, + "pixelsToUnit": 100, + "pivotX": 0.5, + "pivotY": 0.5, + "meshType": 0, + "vertices": { + "rawPosition": [ + -23, + -23, + 0, + 23, + -23, + 0, + -23, + 23, + 0, + 23, + 23, + 0 + ], + "indexes": [ + 0, + 1, + 2, + 2, + 1, + 3 + ], + "uv": [ + 0, + 46, + 46, + 46, + 0, + 0, + 46, + 0 + ], + "nuv": [ + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 1 + ], + "minPos": [ + -23, + -23, + 0 + ], + "maxPos": [ + 23, + 23, + 0 + ] + }, + "isUuid": true, + "imageUuidOrDatabaseUri": "0eb12705-db9c-4680-a0be-ebbc556ce9f3@6c48a", + "atlasUuid": "" + }, + "ver": "1.0.11", + "imported": true, + "files": [ + ".json" + ], + "subMetas": {} + } + }, + "userData": { + "type": "sprite-frame", + "fixAlphaTransparencyArtifacts": true, + "hasAlpha": true, + "redirect": "0eb12705-db9c-4680-a0be-ebbc556ce9f3@f9941" + } +} diff --git a/assets/resources/摇杆-外圆.png b/assets/resources/摇杆-外圆.png new file mode 100644 index 0000000000000000000000000000000000000000..b46da08bc30c32a55860250d87f15612be376347 GIT binary patch literal 1070 zcmeAS@N?(olHy`uVBq!ia0vp^(?FPm8Ax*9Z@d7cSkfJR9T^xl_H+M9WCijWi-X*q z7}lMWc?smy1^9%x{>KJ@lGuc)FQ%M!<}T1Ot&$+WU}JVECN=|M219)fIdyp%Ms6ck z9X$>)T{Q_w6$NEp5phmgX-y$PZ2=xf?QB&B24)FQ7srr_TW{}V2H!T2V0o}rS98*P zi|@693;zG-zqUj~L*>Xv#oQV1%4ek8NXlPY?YchlNYu~Mu0K+iuq-k0f0*=g_126Z z`GNoa-Dhj)={{F}oMF7_+^1vO&8rPpZ%pr>x|})WT*Ca@3B8v%^UkQ;Ej`T@(hovg~XLUOOd%7TrRmU{vv$QYITRyBEJnDTTXG+^oA|^yTJBZVaGKin{7uvEz2+s zUe6k4b~(ecYMNwKCyUFU6V zg6~6<%b#^vj|V=FIC#M{TVhV)&jPvs+N&?Ti`@0&P?y7m7slRSBqM4+cDfdByeEJ2 z!OzsWdf^}WPqTae>0fhT!v>!ZjY}Pbzcz|~-tegW8lTI}y&Hqn!hRi_Ww24LKGJf< zr`J=rK2LfZAIYqD?E(L3=Eyz5*=LSP&5zJFyY}jcQI5{%LsE@;izjV;n4IescI0@M zSJ;{3UEb54B%hRH;ZWX?ma=xCL?oA;^6BG~CT=~_G;yoLi4$Cg2`Rh=DJi^)l97`p zFa2m=UccAmwg0>?Y>rjdsaIZf5O8)KGOc1=X5s@@kt)j z?|O)9MousB6hGj(o!i4aJYxGI5A$~(+btu_TRpd5@MPzUIBx9G9_is;AHlvf#<#BC zuSnjxVu^D18s>RR9&cE4`0$d&*VZ(@T$B7~NxNJ`f5#V_Q_QA({qifTZPpyE+S2<) zLE-gAPxf{n`S(9P^jD?_w@>AcMOeB=UvQ63_lW*i zajI{F*5|KRlg@|hoQghtDmtoq*`w`y9=^J!RaeiPetC8|zZm-&V9sLjboFyt=akR{ E04z%wegFUf literal 0 HcmV?d00001 diff --git a/assets/resources/摇杆-外圆.png.meta b/assets/resources/摇杆-外圆.png.meta new file mode 100644 index 0000000..919d5e6 --- /dev/null +++ b/assets/resources/摇杆-外圆.png.meta @@ -0,0 +1,134 @@ +{ + "ver": "1.0.25", + "importer": "image", + "imported": true, + "uuid": "eccd6c88-c8ff-4613-b57c-56b958e45b77", + "files": [ + ".json", + ".png" + ], + "subMetas": { + "6c48a": { + "importer": "texture", + "uuid": "eccd6c88-c8ff-4613-b57c-56b958e45b77@6c48a", + "displayName": "摇杆-外圆", + "id": "6c48a", + "name": "texture", + "userData": { + "wrapModeS": "clamp-to-edge", + "wrapModeT": "clamp-to-edge", + "imageUuidOrDatabaseUri": "eccd6c88-c8ff-4613-b57c-56b958e45b77", + "isUuid": true, + "visible": false, + "minfilter": "linear", + "magfilter": "linear", + "mipfilter": "none", + "anisotropy": 0 + }, + "ver": "1.0.22", + "imported": true, + "files": [ + ".json" + ], + "subMetas": {} + }, + "f9941": { + "importer": "sprite-frame", + "uuid": "eccd6c88-c8ff-4613-b57c-56b958e45b77@f9941", + "displayName": "摇杆-外圆", + "id": "f9941", + "name": "spriteFrame", + "userData": { + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 0, + "width": 150, + "height": 150, + "rawWidth": 150, + "rawHeight": 150, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "packable": true, + "pixelsToUnit": 100, + "pivotX": 0.5, + "pivotY": 0.5, + "meshType": 0, + "vertices": { + "rawPosition": [ + -75, + -75, + 0, + 75, + -75, + 0, + -75, + 75, + 0, + 75, + 75, + 0 + ], + "indexes": [ + 0, + 1, + 2, + 2, + 1, + 3 + ], + "uv": [ + 0, + 150, + 150, + 150, + 0, + 0, + 150, + 0 + ], + "nuv": [ + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 1 + ], + "minPos": [ + -75, + -75, + 0 + ], + "maxPos": [ + 75, + 75, + 0 + ] + }, + "isUuid": true, + "imageUuidOrDatabaseUri": "eccd6c88-c8ff-4613-b57c-56b958e45b77@6c48a", + "atlasUuid": "" + }, + "ver": "1.0.11", + "imported": true, + "files": [ + ".json" + ], + "subMetas": {} + } + }, + "userData": { + "type": "sprite-frame", + "fixAlphaTransparencyArtifacts": true, + "hasAlpha": true, + "redirect": "eccd6c88-c8ff-4613-b57c-56b958e45b77@f9941" + } +} diff --git a/assets/template.meta b/assets/template.meta new file mode 100644 index 0000000..8893033 --- /dev/null +++ b/assets/template.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "f0f2a619-0f33-49f9-8af2-778a07fa9dd1", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/assets/test.scene b/assets/test.scene new file mode 100644 index 0000000..5861fb6 --- /dev/null +++ b/assets/test.scene @@ -0,0 +1,1550 @@ +[ + { + "__type__": "cc.SceneAsset", + "_name": "", + "_objFlags": 0, + "_native": "", + "scene": { + "__id__": 1 + } + }, + { + "__type__": "cc.Scene", + "_name": "test", + "_objFlags": 0, + "_parent": null, + "_children": [ + { + "__id__": 2 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 44 + }, + "autoReleaseAssets": false, + "_globals": { + "__id__": 45 + }, + "_id": "e20ccbf8-c106-4c2c-87a0-c0c5350ef8f8" + }, + { + "__type__": "cc.Node", + "_name": "Canvas", + "_objFlags": 0, + "_parent": { + "__id__": 1 + }, + "_children": [ + { + "__id__": 3 + }, + { + "__id__": 5 + }, + { + "__id__": 8 + }, + { + "__id__": 11 + }, + { + "__id__": 14 + }, + { + "__id__": 16 + }, + { + "__id__": 26 + }, + { + "__id__": 37 + } + ], + "_active": true, + "_components": [ + { + "__id__": 40 + }, + { + "__id__": 41 + }, + { + "__id__": 42 + }, + { + "__id__": 43 + }, + { + "__id__": 24 + } + ], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": 375.00000000000006, + "y": 667, + "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": 667, + "_near": 0, + "_far": 2000, + "_color": { + "__type__": "cc.Color", + "r": 0, + "g": 0, + "b": 0, + "a": 255 + }, + "_depth": 1, + "_stencil": 0, + "_clearFlags": 6, + "_rect": { + "__type__": "cc.Rect", + "x": 0, + "y": 0, + "width": 1, + "height": 1 + }, + "_aperture": 19, + "_shutter": 7, + "_iso": 0, + "_screenScale": 1, + "_visibility": 1107296256, + "_targetTexture": null, + "_cameraType": -1, + "_trackingType": 0, + "_id": "63WIch3o5BEYRlXzTT0oWc" + }, + { + "__type__": "cc.Node", + "_name": "map", + "_objFlags": 0, + "_parent": { + "__id__": 2 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 6 + }, + { + "__id__": 7 + } + ], + "_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": 1, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "665dGV6M1MlIhPkkKTsfPD" + }, + { + "__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": "b5TdFvjbVEabuX6y3ocWQI" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 5 + }, + "_enabled": true, + "__prefab": null, + "_customMaterial": null, + "_srcBlendFactor": 2, + "_dstBlendFactor": 4, + "_color": { + "__type__": "cc.Color", + "r": 167, + "g": 160, + "b": 160, + "a": 255 + }, + "_spriteFrame": { + "__uuid__": "7d8f9b89-4fd1-4c9f-a3ab-38ec7cded7ca@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + "_type": 0, + "_fillType": 0, + "_sizeMode": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_useGrayscale": false, + "_atlas": null, + "_id": "2f5jTn6CtNRLHaPAT/dKfX" + }, + { + "__type__": "cc.Node", + "_name": "drop", + "_objFlags": 0, + "_parent": { + "__id__": 2 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 9 + }, + { + "__id__": 10 + } + ], + "_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": "b3TxoSo5BFzId8FTD5DYoK" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 8 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 0, + "height": 0 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "e35n6D4O1E7Z+K5fHvz2Iq" + }, + { + "__type__": "b52c9VSpp5JDpV+6w5vCAh6", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 8 + }, + "_enabled": true, + "__prefab": null, + "_id": "a7TlknoHxHM6IFmA2o7QEc" + }, + { + "__type__": "cc.Node", + "_name": "monster", + "_objFlags": 0, + "_parent": { + "__id__": 2 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 12 + }, + { + "__id__": 13 + } + ], + "_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": 1, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "f9LcNcM/FAb5T6wZC5cQbx" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 11 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 0, + "height": 0 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "54PH/z2NhIX7ZGe79NXqLZ" + }, + { + "__type__": "b52c9VSpp5JDpV+6w5vCAh6", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 11 + }, + "_enabled": true, + "__prefab": null, + "_id": "e4wLf225BA3JwY6y4Bz/1y" + }, + { + "__type__": "cc.Node", + "_name": "effect", + "_objFlags": 0, + "_parent": { + "__id__": 2 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 15 + } + ], + "_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": 1, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "2dF/90WkBAyJ01qY11vblE" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 14 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 0, + "height": 0 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "71T4oDCRFMoIztY2sC+VGf" + }, + { + "__type__": "cc.Node", + "_name": "role", + "_objFlags": 0, + "_parent": { + "__id__": 2 + }, + "_children": [ + { + "__id__": 17 + }, + { + "__id__": 20 + } + ], + "_active": true, + "_components": [ + { + "__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": 1, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "7b8NpN8VBMIa5m2JpJ9jaa" + }, + { + "__type__": "cc.Node", + "_name": "tmpWeapon", + "_objFlags": 0, + "_parent": { + "__id__": 16 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__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": 1, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "0dHT0Ny3RDwqU0Fg81ynuA" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 17 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 300, + "height": 300 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "85HqwLkEBM4pTfqP8J+OV4" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 17 + }, + "_enabled": true, + "__prefab": null, + "_customMaterial": null, + "_srcBlendFactor": 2, + "_dstBlendFactor": 4, + "_color": { + "__type__": "cc.Color", + "r": 243, + "g": 16, + "b": 62, + "a": 255 + }, + "_spriteFrame": { + "__uuid__": "eccd6c88-c8ff-4613-b57c-56b958e45b77@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + "_type": 0, + "_fillType": 0, + "_sizeMode": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_useGrayscale": false, + "_atlas": null, + "_id": "495jtEXt5DQrbmhOZK1bWA" + }, + { + "__type__": "cc.Node", + "_name": "player", + "_objFlags": 0, + "_parent": { + "__id__": 16 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 21 + }, + { + "__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": 1, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "36gSafe61Nb4T83i4oiU8l" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 20 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 26, + "height": 36 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "2a3kC+BnZIILxBdD85QGou" + }, + { + "__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__": "e2120e7f-6106-41ee-bf8f-2706d9019dba@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + "_type": 0, + "_fillType": 0, + "_sizeMode": 1, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_useGrayscale": false, + "_atlas": null, + "_id": "c5vOu73K9J06uz8+JkTwIl" + }, + { + "__type__": "39b2e+ymDVJCLUgbXLR6aJ1", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 20 + }, + "_enabled": true, + "__prefab": null, + "bodyPrefab": { + "__uuid__": "6ddb05c4-758e-455f-a66a-f04cb11d44ef", + "__expectedType__": "cc.Prefab" + }, + "tmpWeapen": { + "__id__": 17 + }, + "waveMng": { + "__id__": 24 + }, + "_id": "60Ao2UAYlBo7y4zCJ40TSE" + }, + { + "__type__": "04495S1BVZChLvd8DYuwJp9", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 2 + }, + "_enabled": true, + "__prefab": null, + "_id": "355dZ9BFRHqprjrZ7NG2d3" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 16 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 0, + "height": 0 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "8cXrYDOfpKc6Ig+9kvoZiI" + }, + { + "__type__": "cc.Node", + "_name": "UIRoot", + "_objFlags": 0, + "_parent": { + "__id__": 2 + }, + "_children": [ + { + "__id__": 27 + } + ], + "_active": true, + "_components": [ + { + "__id__": 36 + } + ], + "_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": "del1JZNwZFZJgq0jlyV6PF" + }, + { + "__type__": "cc.Node", + "_name": "control", + "_objFlags": 0, + "_parent": { + "__id__": 26 + }, + "_children": [ + { + "__id__": 28 + }, + { + "__id__": 31 + } + ], + "_active": true, + "_components": [ + { + "__id__": 34 + }, + { + "__id__": 35 + } + ], + "_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": "bcGSU8RKJAu50cCFjD2l3n" + }, + { + "__type__": "cc.Node", + "_name": "bg", + "_objFlags": 0, + "_parent": { + "__id__": 27 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 29 + }, + { + "__id__": 30 + } + ], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": -127.37, + "y": -108.639, + "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": "11cKsRzz1MW46MHILml1nl" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 28 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 150, + "height": 150 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "25xZsIUQ9HfIjWASg4jAZZ" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 28 + }, + "_enabled": true, + "__prefab": null, + "_customMaterial": null, + "_srcBlendFactor": 2, + "_dstBlendFactor": 4, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_spriteFrame": { + "__uuid__": "eccd6c88-c8ff-4613-b57c-56b958e45b77@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + "_type": 0, + "_fillType": 0, + "_sizeMode": 1, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_useGrayscale": false, + "_atlas": null, + "_id": "c282zInRRHhq9HoZm0N3Sr" + }, + { + "__type__": "cc.Node", + "_name": "Sprite", + "_objFlags": 0, + "_parent": { + "__id__": 27 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 32 + }, + { + "__id__": 33 + } + ], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": -127.37, + "y": -108.639, + "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": "4d/WRNIYxAv4Q1l6yV0RmR" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 31 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 46, + "height": 46 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "8a+UPbSY5DhqHRWe1Bsti4" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 31 + }, + "_enabled": true, + "__prefab": null, + "_customMaterial": null, + "_srcBlendFactor": 2, + "_dstBlendFactor": 4, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_spriteFrame": { + "__uuid__": "0eb12705-db9c-4680-a0be-ebbc556ce9f3@f9941", + "__expectedType__": "cc.SpriteFrame" + }, + "_type": 0, + "_fillType": 0, + "_sizeMode": 1, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_useGrayscale": false, + "_atlas": null, + "_id": "c7iS5hYx5L3btzthiiz3M1" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 27 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 960, + "height": 640 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "f7nQu0fKpLPLfL3uGgLlfz" + }, + { + "__type__": "dd6eex/V61G9rX8ekkHzcLh", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 27 + }, + "_enabled": true, + "__prefab": null, + "ctrlSprite": { + "__id__": 28 + }, + "moveTagSp": { + "__id__": 31 + }, + "role": null, + "originPos": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "0cciIy2T5HX48g9pD/GMpc" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 26 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 960, + "height": 640 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "d0itEg72pBoI4wfTZEBLaQ" + }, + { + "__type__": "cc.Node", + "_name": "CameraGame", + "_objFlags": 0, + "__editorExtras__": {}, + "_parent": { + "__id__": 2 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 38 + }, + { + "__id__": 39 + } + ], + "_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": "c0ylhrHlVApKaEwDfFz5ez" + }, + { + "__type__": "cc.Camera", + "_name": "Camera", + "_objFlags": 0, + "node": { + "__id__": 37 + }, + "_enabled": true, + "__prefab": null, + "_projection": 0, + "_priority": 0, + "_fov": 45, + "_fovAxis": 0, + "_orthoHeight": 320, + "_near": 0, + "_far": 2000, + "_color": { + "__type__": "cc.Color", + "r": 51, + "g": 76, + "b": 120, + "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": 1, + "_targetTexture": null, + "_cameraType": -1, + "_trackingType": 0, + "_id": "66Hg/0CVZB7bMGiLOq8J2C" + }, + { + "__type__": "ff6d3bopRJBUJvYopKAM5qo", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 37 + }, + "_enabled": true, + "__prefab": null, + "folNode": { + "__id__": 20 + }, + "_id": "d9pfYGSzxCrZi7pHjJ8vxl" + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 2 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 750, + "height": 1334 + }, + "_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": 5.684341886080802e-14, + "_right": 5.684341886080802e-14, + "_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__": "1928eb6Wr9EfpJ2e3hOp58d", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 2 + }, + "_enabled": true, + "__prefab": null, + "camera": { + "__id__": 4 + }, + "avatarLayer": { + "__id__": 11 + }, + "player": { + "__id__": 23 + }, + "_id": "d1IwuzWGdL4Y1WlghtTW3X" + }, + { + "__type__": "cc.PrefabInfo", + "fileId": "e20ccbf8-c106-4c2c-87a0-c0c5350ef8f8" + }, + { + "__type__": "cc.SceneGlobals", + "ambient": { + "__id__": 46 + }, + "shadows": { + "__id__": 47 + }, + "_skybox": { + "__id__": 48 + }, + "fog": { + "__id__": 49 + }, + "octree": { + "__id__": 50 + } + }, + { + "__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, + "_rotationAngle": 0 + }, + { + "__type__": "cc.FogInfo", + "_type": 0, + "_fogColor": { + "__type__": "cc.Color", + "r": 200, + "g": 200, + "b": 200, + "a": 255 + }, + "_enabled": false, + "_fogDensity": 0.3, + "_fogStart": 0.5, + "_fogEnd": 300, + "_fogAtten": 5, + "_fogTop": 1.5, + "_fogRange": 1.2, + "_accurate": false + }, + { + "__type__": "cc.OctreeInfo", + "_enabled": false, + "_minPos": { + "__type__": "cc.Vec3", + "x": -1024, + "y": -1024, + "z": -1024 + }, + "_maxPos": { + "__type__": "cc.Vec3", + "x": 1024, + "y": 1024, + "z": 1024 + }, + "_depth": 8 + } +] \ No newline at end of file diff --git a/assets/test.scene.meta b/assets/test.scene.meta new file mode 100644 index 0000000..687e8ab --- /dev/null +++ b/assets/test.scene.meta @@ -0,0 +1,11 @@ +{ + "ver": "1.1.40", + "importer": "scene", + "imported": true, + "uuid": "e20ccbf8-c106-4c2c-87a0-c0c5350ef8f8", + "files": [ + ".json" + ], + "subMetas": {}, + "userData": {} +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..b818a8d --- /dev/null +++ b/package.json @@ -0,0 +1,8 @@ +{ + "creator": { + "version": "3.6.2" + }, + "name": "snake", + "uuid": "c77417d5-3eec-4966-9046-0c396c2535d3", + "version": "3.6.2" +} diff --git a/settings/v2/packages/builder.json b/settings/v2/packages/builder.json new file mode 100644 index 0000000..e87fe37 --- /dev/null +++ b/settings/v2/packages/builder.json @@ -0,0 +1,3 @@ +{ + "__version__": "1.3.3" +} diff --git a/settings/v2/packages/cocos-service.json b/settings/v2/packages/cocos-service.json new file mode 100644 index 0000000..2a45ea8 --- /dev/null +++ b/settings/v2/packages/cocos-service.json @@ -0,0 +1,43 @@ +{ + "game": { + "app_id": "607022523", + "name": "snake02", + "c_id": "0" + }, + "appConfigMaps": [ + { + "app_id": "UNKNOW", + "config_id": "376ef1" + }, + { + "app_id": "607022523", + "config_id": "1aad86" + } + ], + "configs": [ + { + "app_id": "UNKNOW", + "config_id": "376ef1", + "config_name": "Default", + "config_remarks": "", + "services": [] + }, + { + "app_id": "607022523", + "config_id": "1aad86", + "config_name": "Default", + "config_remarks": "", + "services": [ + { + "service_id": "235", + "enable": true, + "param": { + "app_id": "607022523", + "store_id": "H5" + } + } + ] + } + ], + "__version__": "3.0.4" +} diff --git a/settings/v2/packages/device.json b/settings/v2/packages/device.json new file mode 100644 index 0000000..70e599e --- /dev/null +++ b/settings/v2/packages/device.json @@ -0,0 +1,3 @@ +{ + "__version__": "1.0.1" +} diff --git a/settings/v2/packages/engine.json b/settings/v2/packages/engine.json new file mode 100644 index 0000000..4adbebb --- /dev/null +++ b/settings/v2/packages/engine.json @@ -0,0 +1,144 @@ +{ + "__version__": "1.0.7", + "modules": { + "cache": { + "base": { + "_value": true + }, + "graphcis": { + "_value": true + }, + "gfx-webgl": { + "_value": true + }, + "gfx-webgl2": { + "_value": true + }, + "animation": { + "_value": true + }, + "skeletal-animation": { + "_value": false + }, + "3d": { + "_value": false + }, + "2d": { + "_value": true + }, + "xr": { + "_value": false + }, + "ui": { + "_value": true + }, + "particle": { + "_value": false + }, + "physics": { + "_value": false, + "_option": "physics-ammo" + }, + "physics-ammo": { + "_value": false + }, + "physics-cannon": { + "_value": false + }, + "physics-physx": { + "_value": false + }, + "physics-builtin": { + "_value": false + }, + "physics-2d": { + "_value": true, + "_option": "physics-2d-box2d" + }, + "physics-2d-box2d": { + "_value": false + }, + "physics-2d-builtin": { + "_value": false + }, + "intersection-2d": { + "_value": true + }, + "primitive": { + "_value": false + }, + "profiler": { + "_value": true + }, + "occlusion-query": { + "_value": false + }, + "geometry-renderer": { + "_value": false + }, + "debug-renderer": { + "_value": false + }, + "particle-2d": { + "_value": true + }, + "audio": { + "_value": true + }, + "video": { + "_value": true + }, + "webview": { + "_value": true + }, + "tween": { + "_value": true + }, + "terrain": { + "_value": false + }, + "tiled-map": { + "_value": true + }, + "spine": { + "_value": true + }, + "dragon-bones": { + "_value": true + }, + "marionette": { + "_value": false + }, + "custom-pipeline": { + "_value": false + } + }, + "includeModules": [ + "2d", + "animation", + "audio", + "base", + "dragon-bones", + "gfx-webgl", + "gfx-webgl2", + "intersection-2d", + "particle-2d", + "physics-2d-box2d", + "profiler", + "spine", + "tiled-map", + "tween", + "ui", + "video", + "webview" + ], + "noDeprecatedFeatures": { + "value": false, + "version": "" + }, + "flags": {} + }, + "macroConfig": { + "CLEANUP_IMAGE_CACHE": false + } +} diff --git a/settings/v2/packages/program.json b/settings/v2/packages/program.json new file mode 100644 index 0000000..4d87e97 --- /dev/null +++ b/settings/v2/packages/program.json @@ -0,0 +1,3 @@ +{ + "__version__": "1.0.0" +} diff --git a/settings/v2/packages/project.json b/settings/v2/packages/project.json new file mode 100644 index 0000000..cc1b70e --- /dev/null +++ b/settings/v2/packages/project.json @@ -0,0 +1,22 @@ +{ + "general": { + "designResolution": { + "fitHeight": false, + "fitWidth": true, + "width": 750, + "height": 1334 + } + }, + "layer": [ + { + "name": "player", + "value": 1 + } + ], + "__version__": "1.0.2", + "fbx": { + "legacyFbxImporter": { + "visible": true + } + } +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..7dc649a --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,9 @@ +{ + /* Base configuration. Do not edit this field. */ + "extends": "./temp/tsconfig.cocos.json", + + /* Add your custom configuration here. */ + "compilerOptions": { + "strict": false + } +}